EMQX 规则里的jqsql和selectsql,过滤的结果为啥会不同呢?

集成-规则-创建规则-sql编辑器 写的jqsql和selectsql过滤的结果是不同的,并且差别很大,目前测试采用的是开源版本。我理解select查询出来的更符合sql的语法特性,也是正确的。
微信图片_20240116105037




  1. 首先你看到的 _v_fun_* 这种的输出是因为你没有给定 alias, 所以 SQL 语句自己生成了一个随机 alias 当做 key 组成 SQL 的输出。你可以给他一个 alias:SELECT jq('.', payload) as jqresult FROM "jq_demo"

  2. 然后 jq 函数的输出是个数组,一般情况下你需要使用 nth 函数从中获取第一个元素:
    SELECT nth(1, jq('.', payload)) as jqresult FROM "jq_demo"

  3. 最后 FOREACH 语法用来对数组里的每一个元素都执行一遍动作,如果不是这个目的,需要使用 SELECT。

非常感谢!
的确如你所说的那样

查询语句:
SELECT
jq(‘.’,payload) as target_item
FROM “jq_demo/complex_rule/jq/”

查询结果:
{
“target_item”: [{
“properties”: {
“msg”: “hello”
},
“deviceId”: “test_product_emqx_device”
}]
}