全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
阿里云物联网套件

SQL表达式

更新时间:2017-08-31 13:39:12

本文档主要描述处理数据中SQL表达式。

为了容易理解,我们把一条规则抽象为一条sql表达(类试mysql语法):

例子:SELECT crypto(userId,’SHA1’) md2, (a+1) al, color c, config.flag flag, deviceId(),CASE col.a WHEN 1 THEN ‘Y’ ELSE ‘N’ END flagFROM“/12345/#”WHEREc is not null and b<0

select参数和where条件可以使用消息的payload属性作为列,不支持子查询。

1,FROM “topic”当有符合topic规则的消息到达时,消息的payload数据以json形式被上下文环境使用(如果消息格式不合法,将忽略此消息),您可以使用topic()函数引用具体的topic值。

注意,如果您选的topic来自别人共享的,则配置的topic需要与提供的topic模式匹配,比如 共享的topic:/123/+/abc,输入 /123/dfdf(不合法),/123/+/abc(合法),/123/567/abc(合法),详情请查看控制台配置

2,SELECT

select的属性来源于消息的payload,可以使用json表达式形式引用,也可以来源于函数比如deviceName()。

比如假定 设备发送的消息payload={a:123,b:45,c:’ccc’,d:{a:55,b:’222’,c:{a:88}},e:[{e1:1},{e1:2}]} , 对于(select d.c.a a1,a a2,deviceName() as d1),则a1=88,a2=123 ,d1=asdfdsf23434 。 建议参数使用别名,比如d.c.a a1

3,WHERE

规则触发条件,条件表达式。当符合topic的消息到达时,这条消息触发规则的条件,条件表达式列表见下方表格描述。

4,json表达式 select和where可以直接使用json表达式。 json表达式支持属性,也支持数组。如果payload数据解析出错将会导致规则运行失败。 转发数据action中的表达式需要使用 ${表达式} 来使用。

例子,假定payload={“tem”:50,”colors”:[{“c”:”red”},{“c”:”blue”}],”config”:{“isonline”:0}}, 则 tem=50,colors[0].c=red,config.isonline=0 。当消息规则匹配时,select属性列表可用于 转发动作参数引用。比如规则:select deviceName() as device,temperature t1 from xxxx,对于ots存储的action,配置中可以${device}、${t1} 分别引用到select中属性device t1

数组的使用说明

  1. 数组表达式需要使用双引号,比如设备消息为:{a:[{v:1},{v:2}]},那么select中引用a[0]的写法为:select ".a[0]" data1,".a[1].v" data2,则data1=[{v:1}],data2=2

条件表达式支持列表

操作符描述举例
=相等color = ‘red’
<>不等于color <> ‘red’
AND逻辑与color = ‘red’ AND siren = ‘on’
OR逻辑或color = ‘red’ OR siren = ‘on’
( )括号代表一个整体color = ‘red’ AND (siren = ‘on’ OR isTest)
+算术加法4 + 5
-算术减5 - 4
/20 / 4
* 5 * 4
%取余数20 % 6
<小于5 < 6
<=小于或等于5 <= 6
>大于6 > 5
>=大于或等于6 >= 5
函数调用支持函数,详细列表请参考 函数章节。deviceId()
JSON属性表达式可以从消息payload以json表达式提取属性.state.desired.color,a.b.c[0].d
CASE … WHEN … THEN … ELSE …ENDCase 表达式 CASE col WHEN 1 THEN ‘Y’ WHEN 0 THEN ‘N’ ELSE ‘’ END as flag
IN仅支持枚举,不支持子查询比如 where a in(1,2,3); 不支持以下形式: where a in(select xxx)
like匹配某个字符, 仅支持%号通配符, 代表匹配任意字符串比如where c1 like ‘%abc’, where c1 not like ‘%def%’
本文导读目录