十月,eKuiper 正式发布了 1.7.0 版本。这一版本引入了查询表和可更新 Sink 的概念,支持数据流与外部存储的数据一起计算,进一步完善了流批结合的实时计算能力。与此同时,我们改进了分析函数,支持分流进行有状态计算,添加了更多的分析函数,继续提高规则的表达能力。在外部连接整合方面,我们丰富了source/sink,部分资源整合适配了新的查询表和可更新 Sink 的能力。另外,新版本也着力提高产品运维的能力,优化了管理控制台的外部资源 source/sink 的管理逻辑;提供了规则集的批量导入导出和初始化功能。
在之前的 Newsletter 中,我们已经对 v1.7.0 的部分功能进行了介绍,本文将重点介绍本月新添加的功能。欢迎大家下载试用,并提出您的宝贵反馈。
新版本添加和改进了 SQL 语法和内置函数,支持更多原生的分析能力。
分析函数指的是通过保存状态进行状态相关分析的函数,使得用户可以无需通过复杂的时间窗口或者自定义函数完成一部分常用的有状态计算。eKuiper 原有版本中已经提供了诸如 lag
、 changed_col
和 had_changed
等分析函数。新的版本中,我们对分析函数进行了强化。
首先,分析函数在 SQL 逻辑计划中将被放置于数据源之后执行。运行时在流式处理规则中,分析函数需要在事件触发时进行状态更新。若在部分子句中,例如带 WHERE
过滤的规则中使用,有可能函数尚未执行规则已经返回。新的改动保证在事件触发时可及时进行状态更新。
其次,分析函数中添加了 Partition By
的分流语法。分析函数的计算默认是在数据流的所有输入事件上进行的。然而,有部分用户的数据流事实上包含了来自不同维度的数据,例如多个设备的数据混杂在一个 MQTT topic 中。新的语法允许用户在做分析计算时根据 Partition By
定义的维度进行分流计算。其语法如下所示:
textAnalyticFuncName(...) OVER ([PARTITION BY ])
假设用户接入一个数据流,其中的事件为来自多个设备的温度数据。以下两个示例分别演示了有无分流的计算效果。
示例 1:获取之前温度值的函数
lag(temperature)
示例 2:获取相同设备之前温度值的函数
lag(temperature) OVER (PARTITION BY deviceId)
新版本在资源连接方面主要完成了两部分工作:一方面继续增加内置和扩展的 source/sink;另一方面,扩展现有 source/sink 功能,并适配 Lookup Table 和 Updatable Sink 的能力。
新的版本重构了外部连接配置相关的 API 以实现在管理控制台上更易用的连接资源管理功能。另外一个较大的更新来自于流和规则的批量导入导出和初始化功能,方便用户进行规则的迁移。
资源是数据集成的关键概念 。eKuiper 需要从源资源中接入数据然后从动作目标资源中导出处理的数据。
在管理控制台上,当创建多个规则时,以前只支持源部分的资源复用,而针对动作,即使不同规则的动作目标一致,也需要多次重复输入资源信息。本次更新后,管理控制台中突出了资源管理概念,支持在单独页面配置资源,可分别对源和目标动作连接资源单独配置,在配置好后一键测试连接可用性,并支持用户在创建规则时引用已创建好的连接资源,简化规则编写步骤。
新版本中提供了 REST API 和 CLI 接口,用于导入导出当前 eKuiper 实例中的所有流,表和规则定义。这样可以快速地备份规则配置或者移植配置到新的 eKuiper 实例中。导入导出的规则集为文本的 JSON 格式,可读性较强,也可以手工编辑。
此外,导出的规则集文件可命名为 init.json
放置于 data
目录中。eKuiper 首次运行时将自动载入此初始规则集,从而可实现预置规则,提高分发效率。
下个月我们将进行 1.7.1 版本开发,主要包括 EdgeX Levski 版本的适配和 Bug 解决。此外,我们也将启动 v1.8.0 以及 Flow Editor 的开发。
版权声明: 本文为 EMQ 原创,转载请注明出处。