首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >ES|QL 9.2版本:智能 LOOKUP JOIN与时间序列支持

ES|QL 9.2版本:智能 LOOKUP JOIN与时间序列支持

原创
作者头像
点火三周
发布2025-12-15 15:00:08
发布2025-12-15 15:00:08
1690
举报
文章被收录于专栏:Elastic Stack专栏Elastic Stack专栏

Elasticsearch 9.2于十月发布,带来了显著的改进,让您的数据分析变得更加快速、灵活和易于访问。本次发布的核心是对ES|QL的重大增强,这是一种管道查询语言,旨在为最终用户带来更大的价值。

以下是Elasticsearch 9.2中将通过ES|QL彻底改变您数据分析工作流的功能。

变革数据关联:更智能、更快速、更灵活的LOOKUP JOIN

在Elasticsearch 9.2中,ES|QL的LOOKUP JOIN命令经过了重大改进,变得更加高效和多功能。LOOKUP JOIN将ES|QL查询结果表中的数据与指定查找模式索引中的匹配记录相结合。它根据连接字段中的匹配值,将查找索引中的字段作为新列添加到结果表中。过去,数据连接仅限于单个字段和简单的相等性。现在不再如此!这些增强功能使您能够轻松应对复杂的数据关联场景。

LOOKUP JOIN的关键增强功能包括:

  • 多字段连接: 轻松在多个字段上进行连接。例如,将application_logsservice_registryservice_nameenvironmentversion上进行连接:
代码语言:javascript
复制
FROM application_logs
| LOOKUP JOIN service_registry ON service_name, environment, version
  • 通过表达式释放复杂连接条件(技术预览):

不再仅限于简单的相等性。LOOKUP JOIN现在允许您指定多个条件进行关联,并支持一系列二元操作符,包括 ==, !=, <, >, <=, 和 >=。这意味着您可以创建非常复杂的连接条件,从而能够对数据提出更复杂的问题。

示例1:查找具有每项服务SLA阈值的应用程序指标

代码语言:javascript
复制
FROM application_metrics
| LOOKUP JOIN sla_thresholds
      ON service_name == sla_service AND response_time > sla_response_time

示例2:此查询根据区域定价政策计算应付金额,这些政策会随时间变化。它基于复杂的日期范围和相等性条件连接三个数据集以计算最终的due_amount。第二个LOOKUP JOIN使用meter_readings索引中的measurement_date字段和customers索引中的region_id字段连接到pricing_policies索引,以找到特定regionmeasurement_date的正确定价政策。

代码语言:javascript
复制
FROM meter_readings
| LOOKUP JOIN customers
      ON meter_id
| LOOKUP JOIN pricing_policies
      ON
        region_id == region AND
          measurement_date >= policy_begin_date AND
          measurement_date < policy_end_date
| EVAL due_amount = (kwh_consumed * rate_per_kwh + base_charge) * (1 + tax_rate)
| EVAL period = policy_name
| KEEP customer_name, period, due_amount, measurement_date, kwh_consumed,
    rate_per_kwh, base_charge, tax_rate
| SORT measurement_date
  • 过滤连接的巨大性能提升:

我们改进了使用查找表条件过滤的“扩展连接”的性能。扩展连接为每个输入行生成多个匹配项,这可能会创建大型中间结果集。当这些行中的许多行被后续过滤器丢弃时,情况会变得更糟。在9.2中,我们通过在将过滤器应用于查找数据时过滤掉不必要的行来优化这些连接,避免处理将被丢弃的行。在某些情况下,这些连接的速度可提升至1000倍

过滤连接性能提升
过滤连接性能提升

当处理“扩展连接”时,这种优化尤为重要,其中查找可能最初生成许多潜在匹配项。通过智能地向下推送过滤器,仅处理相关数据,大大减少查询执行时间,使您能够在庞大数据集上进行实时分析。这意味着即使在非常大或复杂的连接操作中,您也能更快地获得洞察。

LOOKUP JOIN跨集群搜索(CCS)兼容性:

在8.19和9.1中,LOOKUP JOIN进入GA时不支持跨集群搜索(CCS)。对于跨多个集群运营的组织,LOOKUP JOIN现在在9.2中无缝集成了CCS。只需将查找索引放在您希望执行连接的所有远程集群上,ES|QL将自动利用这些远程查找索引与您的远程数据进行连接。这简化了分布式数据分析,并确保在整个Elasticsearch部署中实现一致的丰富化。

这些改进意味着您可以以前所未有的精度、速度和轻松程度关联多样的数据集,揭示更深入、更具操作性的见解,而无需复杂的变通方法或预处理步骤。

轻松丰富您的数据:Kibana Discover的查找索引用户体验

数据丰富化应该是简单的,而不是障碍。我们在Kibana的Discover中引入了一种出色的新用户体验,用于创建和管理查找索引。

直观的工作流程: Discover的全面自动补全功能将引导您完成流程,在ES|QL编辑器中建议查找索引和连接字段,使您能够轻松地将上传的数据与现有索引连接。输入不存在的查找索引的名称,然后单击即可直接访问查找编辑器创建索引。输入现有查找索引的名称,我们将建议编辑选项:

在线管理(CRUD): 直接在Discover中通过在线编辑功能(创建、读取、更新、删除)保持您的参考数据集最新。

LOOKUP查询示例
LOOKUP查询示例

轻松上传文件: 现在,您可以直接在Discover中上传文件(如CSV),并立即在您的LOOKUP JOIN中使用它们。无需在Kibana的不同区域之间切换!

轻松将数据添加到查找索引并在LOOKUP JOIN中使用它们
轻松将数据添加到查找索引并在LOOKUP JOIN中使用它们

无论您是映射用户ID到姓名、添加业务元数据,还是连接静态参考文件,此功能使数据丰富化普及,将连接的力量直接交到每个用户手中——快速、简单,且集中在一个地方。

保持上下文:引入INLINE STATS(技术预览)

聚合数据是关键,但有时您需要在看到原始数据的同时查看聚合数据。我们很高兴地推出INLINE STATS作为技术预览功能。

STATS命令不同,STATS命令会用聚合输出替换您的输入字段,而INLINE STATS则保留所有原始输入字段,并仅添加新的聚合字段。这使您能够在聚合后对原始输入字段进行进一步操作,提供更连续和灵活的分析工作流。

例如,计算平均飞行距离,同时保留单个航班行:

代码语言:javascript
复制
FROM kibana_sample_data_flights
 | KEEP Carrier, Dest, DistanceMiles
 | INLINE STATS avgDist = ROUND(AVG(DistanceMiles))
       BY Dest
 | WHERE DistanceMiles > avgDist
使用avgDist过滤比平均值大的飞行结果
使用avgDist过滤比平均值大的飞行结果

在此查询中,avgDist被添加到我们按Dest(目的地)分组的每一行中,然后,因为我们仍然有航班信息列,我们能够将结果过滤到距离大于平均值的航班。

ES|QL中的时间序列支持(技术预览)

Elasticsearch使用时间序列数据流来存储指标。我们正在通过TS源命令在ES|QL中添加对时间序列聚合的支持。这在Elastic Cloud 无服务器和9.2基础版中作为技术预览提供。

时间序列分析主要基于汇总查询,这些查询在时间桶上总结指标值,并按一个或多个过滤维度切片。大多数汇总查询依赖于两步处理,(a) 内部聚合函数按时间序列总结值,(b) 外部聚合函数结合(a)中的结果跨时间序列。

TS源命令与STATS结合,为在时间序列上表达此类查询提供了一种简洁而有效的方法。更具体地说,考虑以下示例,用于计算每个主机和每小时的请求总速率:

代码语言:javascript
复制
TS my_metrics
| WHERE @timestamp > NOW() - 1 day
| STATS SUM(RATE(requests))
      BY host, TBUCKET(1h)

在此情况下,时间序列聚合函数RATE首先按时间序列和小时评估。然后使用SUM结合生成的部分聚合来计算每个主机和小时的最终聚合值。

您可以在此处查看可用的时间序列聚合函数列表。counter rate现在支持,它可能是处理计数器最重要的聚合函数。

TS源命令被设计为与STATS结合,执行调优以有效支持时间序列聚合。例如,数据在进入STATS之前被排序。当前不允许可能丰富或更改时间序列数据或其顺序的处理命令(如FORKINLINE STATS)在TSSTATS之间。这一限制可能在未来被解除。

STATS表格输出可以与任何适用的命令进一步处理。例如,以下查询计算每个主机和小时的平均cpu_usage与每个主机的最大值的比率:

代码语言:javascript
复制
TS my_metrics
| STATS avg_usage = AVG(AVG_OVER_TIME(cpu_usage))
      BY host, time_bucket = TBUCKET(1h)
| INLINE STATS max_avg_usage = MAX(avg_usage)
      BY host
| EVAL ratio = avg_usage / max_avg_usage
| KEEP host, time_bucket, ratio
| SORT host, time_bucket DESC

时间序列数据存储在我们的底层列式存储引擎上,该引擎由Lucene文档值提供支持。TS命令通过ES|QL计算引擎添加了矢量化查询执行。与等效DSL查询相比,查询性能通常提高了一个数量级以上,并且与成熟的特定于指标的系统相当。我们将在未来提供详细的架构和性能分析,敬请期待。

扩展您的工具包:新的ES|QL函数

为了进一步增强ES|QL的实用性和多样性,我们增加了一套新的函数

字符串操作: 提供更强大文本和URL处理的CONTAINSMV_CONTAINSURL_ENCODEURL_ENCODE_COMPONENTURL_DECODE

时间序列和地理空间: 灵活时间分桶的TBUCKET,用于向量操作的TO_DENSE_VECTOR,以及用于高级基于位置分析的全面地理空间函数ST_GEOHASHST_GEOTILEST_GEOHEXTO_GEOHASHTO_GEOTILETO_GEOHEX

日期格式化: 更具可读性的日期表示的DAY_NAMEMONTH_NAME

这些函数为您提供了一套更丰富的工具,可以直接在ES|QL中操作和分析您的数据。

背后的性能和效率提升

除了高亮显示的功能外,Elasticsearch 9.2还包括对ES|QL的众多性能优化。我们通过在RLIKE (LIST中应用推送来加快RLIKE (LIST)的速度,其中函数替换了多个类似的RLIKE查询。使用RLIKE (LIST),我们可以将这些查询合并为一个自动机,并应用一个自动机而不是多个。我们还加快了带索引排序的关键字段的加载速度,并进行了常规查询优化——这些改进确保您的ES|QL查询比以往更高效地运行。

立即开始!

Elasticsearch 9.2为ES|QL带来了前所未有的强大功能和灵活性,显著提升了您的数据分析工作流。我们鼓励您探索这些新功能,并体验它们带来的不同。

有关Elasticsearch 9.2中所有更改和增强功能的完整列表,请查阅官方发布说明。祝您查询愉快!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 变革数据关联:更智能、更快速、更灵活的LOOKUP JOIN
  • 轻松丰富您的数据:Kibana Discover的查找索引用户体验
  • 保持上下文:引入INLINE STATS(技术预览)
  • ES|QL中的时间序列支持(技术预览)
  • 扩展您的工具包:新的ES|QL函数
  • 背后的性能和效率提升
  • 立即开始!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档