转换限制

编辑

以下限制和已知问题适用于 Elastic 转换功能的 8.17.0 版本。这些限制分为以下几类:

配置限制

编辑
前缀为下划线的字段名在最新的转换中被省略
编辑

如果您使用 latest 类型的转换,并且源索引的字段名以下划线 (_) 字符开头,则这些字段被假定为内部字段。这些字段将从目标索引的文档中省略。

如果远程集群配置正确,转换支持跨集群搜索
编辑

如果您使用 跨集群搜索,则远程集群必须支持您在转换中使用的搜索和聚合。转换会验证其配置;如果您使用跨集群搜索并且验证失败,请确保远程集群支持您使用的查询和聚合。

在转换中使用脚本
编辑

当聚合支持脚本时,转换在每种情况下都支持脚本。但是,在转换中使用脚本时,您可能需要考虑某些因素

  • 当字段由脚本创建时,转换无法推断输出字段的索引映射。在这种情况下,您可能需要在创建转换之前自己创建目标索引的映射。
  • 脚本字段可能会增加转换的运行时。
  • 当您将脚本用于 group_by 中定义的所有分组时,转换无法优化查询,当您以这种方式使用脚本时,您将收到警告消息。
转换中 Painless 脚本的弃用警告
编辑

如果转换包含使用已弃用语法的 Painless 脚本,则在预览或启动转换时会显示弃用警告。但是,无法批量检查所有转换的弃用警告,因为运行所需的查询可能是一个资源密集型过程。因此,由于已弃用的 Painless 语法导致的任何弃用警告在升级助手(Upgrade Assistant)中都不可用。

转换在索引字段上表现更好
编辑

转换按用户定义的时间字段对数据进行排序,该字段会被频繁访问。如果时间字段是 运行时字段,则在查询时计算字段值的性能影响可能会显著减慢转换速度。使用索引字段作为时间字段(使用转换时)。

连续转换调度限制
编辑

连续转换会定期检查源数据的更改。调度程序的功能目前仅限于基本的定期计时器,该计时器的 frequency 范围为 1 秒到 1 小时。默认值为 1 分钟。这旨在运行少而频繁。为该计时器选择 frequency 时,请考虑您的摄取率以及转换搜索/索引操作对集群中其他用户的影响。另请注意,重试以 frequency 间隔发生。

操作限制

编辑
聚合响应可能与目标索引映射不兼容
编辑

首次启动透视转换时,它将推断目标索引所需的映射。此过程基于源索引的字段类型和使用的聚合。如果字段来自 scripted_metricsbucket_scripts,则将使用 动态映射。在某些情况下,推断的映射可能与实际数据不兼容。例如,可能会发生数值溢出,或者动态映射的字段可能同时包含数字和字符串。如果您认为可能发生了这种情况,请检查 Elasticsearch 日志。

您可以使用 预览转换 API 查看推断的映射。请参阅 API 响应中的 generated_dest_index 对象。

如果需要,您可以使用 创建索引 API 通过创建自定义目标索引在启动转换之前定义自定义映射。由于推断的映射不能被索引模板覆盖,因此请使用创建索引 API 来定义自定义映射。索引模板仅适用于来自使用动态映射的脚本的字段。

批量转换可能无法考虑已更改的文档
编辑

批量转换使用 复合聚合,该聚合允许高效地分页浏览所有存储桶。复合聚合尚不支持搜索上下文,因此如果在批量数据帧正在进行时更改了源数据(删除、更新、添加),则结果可能不包括这些更改。

连续转换的一致性不考虑已删除或更新的文档
编辑

虽然转换过程允许在摄取新数据的同时持续重新计算转换,但它也存在一些限制。

只有当更改实体的时间字段也被更新并落在检查更改操作的范围内时,才能识别更改的实体。这在原则上是为以下用例设计的,并且适用于该用例,即新数据被赋予摄取时间的时间戳。

如果删除了源索引模式范围内的索引,例如在删除基于历史时间索引时,则在连续检查点处理中执行的复合聚合将搜索不同的源数据,并且仅存在于已删除索引中的实体将不会从数据帧目标索引中删除。

根据您的用例,您可能希望在删除后完全重新创建转换。或者,如果您的用例可以容忍历史存档,您可能希望在聚合中包含最大摄取时间戳。这将使您可以在查看目标索引时排除最近未更新的结果。

删除转换不会删除目标索引或 Kibana 索引模式
编辑

当使用 DELETE _transform/index 删除转换时,目标索引和 Kibana 索引模式(如果已创建)都不会被删除。必须单独删除这些对象。

处理聚合页面大小的动态调整
编辑

在转换的开发过程中,控制优先于性能。在设计考虑中,最好让转换在后台安静地花费更长时间完成,而不是快速完成并在资源消耗中优先。

复合聚合非常适合高基数数据,可以分页浏览结果。如果在执行复合聚合搜索时发生 熔断器 内存异常,则我们将尝试再次减少请求的存储桶数量。此熔断器是根据集群内的所有活动计算的,而不仅仅是来自转换的活动,因此它可能只是一个临时资源可用性问题。

对于批量转换,请求的存储桶数量只会向下调整。值的降低可能会导致转换检查点完成的时间更长。对于连续转换,请求的存储桶数量在每个检查点开始时都会重置回其默认值,并且可能会在 Elasticsearch 日志中重复出现熔断器异常。

转换以批处理方式检索数据,这意味着它一次计算多个存储桶。默认情况下,每个搜索/索引操作 500 个存储桶。可以使用 max_page_search_size 更改默认值,最小值是 10。如果请求的存储桶数量减少到最小值后仍然发生故障,则转换将设置为失败状态。

处理多个术语的动态调整
编辑

对于每个检查点,都会识别自上次执行检查以来已更改的实体。此更改实体列表作为 术语查询 提供给转换复合聚合,一次一页。然后,将更新应用于每个实体页面的目标索引。

页面 sizemax_page_search_size 定义,该值也用于定义复合聚合搜索返回的存储桶数量。默认值为 500,最小值为 10。

索引设置 index.max_terms_count 定义了 terms 查询中可以使用的最大词项数量。默认值为 65536。如果 max_page_search_size 超过 index.max_terms_count,转换将失败。

max_page_search_size 使用较小的值可能会导致转换检查点完成的时间更长。

处理失败的转换
编辑

失败的转换会作为持久性任务保留,应适当处理,可以删除它或解决失败的根本原因并重新启动。

当使用 API 删除失败的转换时,首先使用 _stop?force=true 停止它,然后再删除它。

如果文档尚未可用于搜索,则连续转换可能会给出不正确的结果
编辑

索引文档后,会有很短的延迟,直到它可以用于搜索。

连续转换会定期检查自上次检查以来和 now 减去 sync.time.delay 之间发生更改的实体。此时间窗口移动而不会重叠。如果最近索引的文档的时间戳落在此时间窗口内,但此文档尚不可用于搜索,则此实体将不会被更新。

如果使用表示数据摄取时间的 sync.time.field 并使用零秒或非常小的 sync.time.delay,则更可能发生此问题。

支持日期纳秒数据类型
编辑

如果您的数据使用 日期纳秒数据类型,则聚合仍然是毫秒分辨率。此限制也会影响您的转换中的聚合。

不支持将数据流作为目标索引
编辑

转换会更新目标索引中的数据,这需要写入目标索引。数据流 被设计为仅追加,这意味着您不能直接向数据流发送更新或删除请求。因此,不支持将数据流用作转换的目标索引。

将 ILM 作为目标索引可能会导致重复的文档
编辑

不建议将 ILM 用作转换目标索引。转换会更新当前目标中的文档,并且不能删除 ILM 以前使用的索引中的文档。如果在滚动更新的情况下将转换与 ILM 结合使用,这可能会导致重复的文档。

如果您使用 ILM 来拥有基于时间的索引,请考虑改用 日期索引名称。如果您的转换包含基于 date_histogramgroup_by,则该处理器在没有重复文档的情况下工作。

Kibana 中的限制

编辑
转换在所有 Kibana 空间中可见
编辑

空间 使您能够在 Kibana 中组织源索引和目标索引以及其他已保存的对象,并且只查看属于您的空间的对象。但是,转换是一项在集群级别管理的长期运行的任务,因此其范围不限于特定的空间。可以在 堆栈管理 > Kibana 下为数据视图实现空间感知,该数据视图允许对转换目标索引的权限。

Kibana 中列出最多 1,000 个转换
编辑

Kibana 中的转换管理页面最多列出 1000 个转换。

Kibana 可能不支持所有转换配置选项
编辑

可能存在通过转换 API 可用但在 Kibana 中不受支持的配置选项。有关配置选项的完整列表,请参阅文档