白皮书
车云灵活数采方案:释放数据价值,加速智能创新 →

eKuiper Newsletter 2022-02 | 新增变化检测函数、重构共用连接

eKuiper Team
2022-2-26
eKuiper Newsletter 2022-02 | 新增变化检测函数、重构共用连接

目前 eKuiper 处于 1.5.0 版本的开发周期中。本月我们主要实现了一个通用的变化检测函数,以满足很多用户提出的仅采集变化数据的需求。同时我们也在进行 1.4.3 版本的开发,解决了共用连接的订阅导致的问题以及其他用户反馈问题。

变化检测函数

通用的变化检测函数 changed_cols 已开发完成,并合并到 1.5.0 版本的分支中。changed_cols 函数的作用是检测指定的列是否发生变化,如果发生变化,则返回变化的列的值,否则不返回。在变化检测的场景中,用户经常需要监测多个列/表达式,而且数量不固定。因此,该函数可接收不定数量的参数,同时其返回值为多个列。相比于普通的标量函数固定返回单一结果列(多列结果会被包含在 map 中),这是第一个返回多列的函数,我们对函数的实现进行了重构以实现多列函数的支持。

该函数的使用语法为 CHANGED_COLS (<prefix>, <ignoreNull>, <expr> [,...,<exprN>])。在下面的例子中,我们将检测 temperaturehumidity 列是否发生变化,如果发生变化,则返回变化的列的值,且为列名添加c_ 前缀,否则不返回对应的列。

SELECT CHANGED_COLS("c_", true, temperature, humidity) FROM demo
_________________________________________________________
{"c_temperature":23,"c_humidity":88}
{"c_temperature":25}
{"c_humidity":90}
{"c_humidity":91}

我们可以注意到,列的个数是可变的,同时列的参数也可以是别的表达式。列参数也支持 * 号,表示检测所有列,例如 SELECT CHANGED_COLS("c_", true, *) FROM demo

多列函数仅可在 select 子句中使用。其选出的值不能用于 WHERE 或其他子句中。若需要根据变化值做过滤,需要将 CHANGED_COLS 的规则作为规则流水线的前置规则。我们接下来将实现其他配套的变化检测函数,以标量函数的形式,支持获取变化值,从而在过滤等其余子句中进行使用。

1.4.3 版本动态

1.4.3 版本主要解决本月发现的一些问题。主要是共用连接在 MQTT 和 EdgeX 中的订阅同一个主题导致的问题。我们对共用连接的实现进行了重构,以解决这个问题。另外,我们还修复了预编译的 tdengine 插件运行崩溃的问题。

推荐阅读

2019-11-27eKuiper Team
轻量级边缘计算 EMQX Kuiper 与 AWS IoT 集成方案

在各类物联网项目中,比如智能楼宇项目,需要将楼宇的数据(比如电梯、燃气、水电等)进行采集和分析。一种解决方案是将所有的设备直接接入在云端的物联网平台,类似于像 AWS IoT 或者 Azure IoT Hub。本文以一个常见的物联网使用场景为案例,介绍了如何利用边缘计算来实现对业务的快速、低成本和有效地处理。