SELECT 字段名 FROM 事件 WHERE 条件
FROM 子句用于选择主题或事件来源,消息发布则填写消息的主题,是事件则填写对应的事件主题
SELECT * 是选择所有字段,也可以在**可选字段**中选择
输出结果为所有可用字段
SELECT * FROM "$events/message_publish"
选择字段输出
SELECT clientId as id, payload FROM "$events/message_publish"
WHERE 对 SELECT 选择出来的某个字段进行**条件过滤*
选取 clientId= test001 的终端发来的消息
SELECT * FROM "$events/message_publish" where clientId = 'test001'
| 函数名 | 函数作用 | 返回值 |
|---|
+ | 加法,或字符串拼接 | 加和,或拼接之后的字符串 |
- | 减法 | 差值 |
* | 乘法 | 乘积 |
/ | 除法 | 商值 |
= | 比较两者是否完全相等。可用于比较变量和主题 | true/false |
=~ | 比较主题(topic)是否能够匹配到主题过滤器(topic filter)。只能用于主题匹配 | true/false |
like | 跟mysql的like语法 | 模糊查询 |
| 函数名 | 函数作用 | 返回值 |
|---|
> | 大于 | true/false |
< | 小于 | true/false |
<= | 小于等于 | true/false |
>= | 大于等于 | true/false |
<> | 不等于 | true/false |
!= | 不等于 | true/false |
- 从 topic 为
"/test01/post" 的消息中提取所有字段:
SELECT * FROM "/test01//post"
- 从 topic 为
"test01/a" 或 "test01/b" 的消息中提取所有字段:
SELECT * FROM "test01/a","test01/b"
- 从 topic 能够匹配到
'test01/#' 的消息中提取所有字段。
- 从 topic 能够匹配到
't/#' 的消息中提取 proto_name、payload和 clientid 字段:
SELECT proto_name, payload, clientId FROM "t/#"
- 在
clientid = 'c1' 连接成功时,提取其来源 IP 地址和端口号:
SELECT peername as ip_port FROM "$events/client_connected" WHERE clientId = 'fastbee'
- 筛选所有订阅
'test01/#' 主题且订阅级别为 QoS 1 的 clientid:
SELECT clientid FROM "$events/session_subscribed" WHERE topic = 't/#' and qos = 1
- 筛选所有订阅主题能匹配到
't/#' 且订阅级别为 QoS 1 的 clientid。注意与上例不同的是,这里用的是主题匹配操作符**'=~'**,所以会匹配订阅 't' 或 't/+/a' 的订阅事件:
SELECT clientid FROM "$events/session_subscribed" WHERE topic =~ 't/#' and qos = 1
- 筛选所有上报主题 。匹配包含
'test/post' 内容的所有主题,与 '=~' 功能相似,类似于sql的模糊匹配:
SELECT clientid FROM "$events/message_publish" WHERE topic like '%test/post%'
- FROM 子句后面的主题需要用双引号
"",。 - WHERE 子句后面接筛选条件,如果使用到字符串需要用单引号
'' 引起来。 - FROM 子句里如有多个主题,需要用逗号
"," 分隔。例如 SELECT * FROM "test/1", "test/2" 。 - 不要给 payload 创建别名,否则会影响运行性能。即尽量不要这么写:
SELECT payload as py。