3.5.13.Transform
创作人:骆潇龙
审稿人:刘帅
概述
Elasticsearch 为用户提供了强大全文搜索功能,但是以扫描聚合操作为核心的 OLAP 计算并不是 Elasticsearch 的强项。这些劣势主要有:多维度分组时排序、分页效果不好;复杂聚合(Composite aggregation)后无法按照分组文档个数进行排序;不支持 Join 查询;无法高效获取聚合操作中每个分桶的精确信息(获取 TopN 十分高效)。产生这些劣势的主要原因有,Elasticsearch 本质是基于 Lucene 的分布式系统,底层数据的存储结构混合使用了列式存储和行式存储,采用Scatter-Gather计算模型。聚合时先将请求分散到各个 shard 上独立进行计算,然后由协调节点收集所有结果计算出最终结果。
为了弥补 OLAP 计算上的不足,较低搜索成本,Elasticsearch 提出得解决思路是预计算聚合结果并落地保存,这样业务使用时只用简单聚合,甚至直接查询就可得出结果。该功能可在
7.2版本以后用Transforms API 来实现。Transforms API 允许用户定义 Transforms 任务,每隔一段时间对某1个索引执行聚合计算,并将结果保存在新的索引中。通过此功能用户可以将以事件流水为中心的索引转化为记录实体行为的汇总索引,以便进行数据分析。
本文主要为大家介绍如何使用 Transforms 功能。为了让大家对其有个感性认识,本文首先会介绍如何在 Kibana 上快速配置 Transforms 任务。然后,以生命周期为依据,介绍如何使用API 创建、执行、修改和关闭 Transform 任务。最后,将介绍一些 Transform 使用建议,主要包括何时用 Transforms 代替 aggregations,Transforms 任务变更检测机制 —— checkpoint 以及 Transforms 的一些限制。
快速开始
本小节介绍如何在 Kibana 使用自带的Sample eCommerce Order数据快速创建并执行
Transforms 任务。Sample eCommerce Order数据 Elasticsearch 提供的样例数据,这些数据是1家电子商务公司的订单流水表。基于这些数据我们希望得到每个用户的消费汇总信息,此时使用 Transforms 功能代替频繁的 aggregations 操作是明智的选择。
添加数据集
在 Kibana 首页选择添加数据
选择添加Sample eCommerce Order样例数据。
创建并执行 Transforms 任务
首页点击 Manage->Transforms 进入任务管理页面,点击 Create a transforms 创建任务,并选择 [eCommerce]Order 索引。
配置1个 Transforms 任务总共分3步,第一步,选择分组属性和聚合方式。本例中用用户ID 作为分组属性,用购买商品数、税前订单价和订单 ID 作为聚合属性,计算每个用户购买的总商品数据,单个订单最多购买商品数,总消费金额以及每个用户下单总数。
第二步,设置任务基本信息,主要包括,任务 id、新索引名称、执行模式。
第三步,执行,点击Create and start,开始实际执行任务。执行完成后会出现新的索引
ecommerce-user-consumes
Transforms 管理
执行完成后,我们可以在Transforms任务管理栏浏览、修改、删除任务。
Transforms API 介绍
上一小节我们介绍了在 Kibana 上配置 Transforms 任务,本小节将详细介绍如何用 REST
API 管理 Transforms 任务。Transforms 任务一样都有生命周期的概念。1个完整的 Transforms 任务的生命周期主要包括:前期准备、任务初始化及开始、任务维护、任务销毁。在任务维护中可以监控任务运行状态、暂停并修改任务。下面将详细介绍这几个环节的 API。
《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.13.Transform (2) https://developer.aliyun.com/article/1228176