EMQ X MQTT 规则引擎 select_and_transform_error

EMQ X 规则引擎使用出现 select_and_transform_error 错误

EMQ X v3.4.0 升级后使用规则引擎出现 select_and_transform_error 错误,原因是官方移除了 JSON Payload 自动解码。

以后必须强制 json_decode(payload) as payload 这种写法,不能直接 payload.msg 这样了:

之前:

SELECT
-- 直接用 . 来取值
payload.msg as msg
FROM
"message.publish"
WHERE
topic =~ 't/#'

v 3.4.0 之后

SELECT
-- 先解码
json_decode(payload) as payload,
-- 再使用
payload.msg as msg
FROM
"message.publish"
WHERE
topic =~ 't/#'

json_decode 就是一个 SQL 函数,推测是为了兼顾性能再没法保证用户的 payload 一定是 JSON 时,每次 try catch 自动解码浪费性能,所以移除了直接的 payload.x 语法。

不过更多原因,笔者猜测这个功能也是为了兼容消息编解码(Schema Registy)。

https://docs.emqx.io/tutorial/v3/cn/rule_engine/schema_register.html