数据转换概述

编辑

您可以选择以下任一方法来转换您的数据:枢轴最新

  • 所有转换均不会修改您的源索引。它们会创建一个新的索引,专门用于转换后的数据。
  • 转换可能具有 API 提供的比 Kibana 中提供的更多配置选项。有关所有转换配置选项,请参阅API 文档

转换是持久性任务;它们存储在集群状态中,这使得它们能够应对节点故障。请参阅检查点的工作原理错误处理,以了解转换背后的机制。

枢轴转换

编辑

您可以使用转换将您的数据枢轴到新的以实体为中心的索引中。通过转换和汇总您的数据,可以以替代的、有趣的方式对其进行可视化和分析。

许多 Elasticsearch 索引都组织为事件流:每个事件都是一个单独的文档,例如单笔商品购买。转换使您可以汇总这些数据,将其转换为组织性更强、更易于分析的格式。例如,您可以汇总单个客户的所有购买记录。

转换使您可以定义枢轴,这是一组将索引转换为不同、更易于理解的格式的特性。枢轴会将您的数据汇总到新的索引中。

要定义枢轴,首先选择一个或多个用于对数据进行分组的字段。您可以选择分类字段(术语)和数值字段进行分组。如果使用数值字段,则使用您指定的间隔对字段值进行分组。

第二步是决定如何汇总分组数据。使用聚合时,实际上是在询问有关索引的问题。聚合类型不同,每种类型都有其自身的用途和输出。要了解有关支持的聚合和分组字段的更多信息,请参阅创建转换

作为可选步骤,您还可以添加查询以进一步限制聚合的范围。

转换执行复合聚合,该聚合会遍历源索引查询定义的所有数据。聚合的输出存储在目标索引中。每次转换查询源索引时,它都会创建一个检查点。您可以决定是否希望转换运行一次或持续运行。批量转换是具有单个检查点的单个操作。持续转换会持续递增和处理检查点,因为会引入新的源数据。

假设您经营一家销售服装的网店。每个订单都会创建一个包含唯一订单 ID、订购产品的名称和类别、价格、订购数量、订单的精确日期以及一些客户信息(姓名、性别、位置等)的文档。您的数据集包含去年的所有交易。

如果您想查看上一财政年度不同类别的销售情况,请定义一个转换,该转换按产品类别(女鞋、男装等)和订单日期对数据进行分组。使用去年作为订单日期的间隔。然后在订购数量上添加一个求和聚合。结果是以实体为中心的索引,显示去年每个产品类别中销售的商品数量。

Example of a pivot transform preview in Kibana

最新转换

编辑

您可以使用latest类型的转换将最新的文档复制到新的索引中。您必须将一个或多个字段标识为用于对数据进行分组的唯一密钥,以及一个按时间顺序排序数据的日期字段。例如,您可以使用此类型的转换来跟踪每个客户的最新购买或每个主机的最新事件。

Example of a latest transform preview in Kibana

与枢轴一样,最新转换可以运行一次或持续运行。它对源索引中的数据执行复合聚合,并将输出存储在目标索引中。如果转换持续运行,则会自动将新的唯一密钥值添加到目标索引,并且在每个检查点都会自动更新现有密钥值的最新文档。

性能注意事项

编辑

转换对源索引执行搜索聚合,然后将结果索引到目标索引。因此,转换永远不会比聚合和索引过程花费更少的时间或使用更少的资源。

如果您的转换必须处理大量历史数据,则它最初的资源使用率很高,尤其是在第一个检查点期间。

为了获得更好的性能,请确保您的搜索聚合和查询已优化,并且您的转换仅处理必要的数据。考虑是否可以将源查询应用于转换以减少其处理的数据范围。还要考虑集群是否有足够的资源来支持复合聚合搜索及其结果的索引。

如果您希望分散对集群的影响(以转换速度较慢为代价),则可以限制其执行搜索和索引请求的速率。当您创建更新转换时,请设置docs_per_second限制。如果您想计算当前速率,请使用获取转换统计信息 API中的以下信息

documents_processed / search_time_in_ms * 1000