转换概述编辑

您可以选择以下两种方法之一来转换您的数据:透视最新

  • 所有转换都会保留您的源索引。它们会创建一个新的索引,专门用于转换后的数据。
  • 转换可能具有 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