SQL模板是否可以设置默认值

环境信息

  • EMQX 版本:4.0.13
  • 操作系统及版本:Linux CentOS 7.9 64位
  • 其他:docker 20.10.17、TDengine 2.6.0.4

问题描述

emqx数据存入数据库时,提供的SQL模板是否支持默认值。

配置文件及日志

TDengine测试表

CREATE TABLE t_test (
   ts timestamp,
   id int,
   name nchar(50)
)

SQL模板

INSERT INTO test.t_test VALUES (
   now,
   ${payload.id},
   '${payload.name}'
)

测试json字符串

# id,name都存在
{
    "id": 2,
    "name": "modbus2-group1"
}

# name不存在
{
    "id": 2
}

json字符串中当key都存在时,可以正常入库。

# id不存在
{
    "name": "modbus2-group1"
}

json中int类型的key不存在时,数据无法入库。字符串有默认值undefined,但似乎非字符串类型的json中必须要有对应key,想请教一下EMQX是否支持非字符串类型的默认值?如果支持那么SQL模板又该如何写?

规则里面这么写:

SELECT
  CASE WHEN is_null(payload.id) THEN 0
       ELSE payload.id
  END as id,
  payload.name as name
FROM "t/#"

这样 id 这个字段如果没有, 那么 ${id} 的值就是 0

1 个赞

厉害:+1:,非常感谢