【发布时间】:2019-11-11 14:40:33
【问题描述】:
问题
我有一个 Azure IoT-Hub 向 Azure 流分析作业发送消息。
每条消息都包含一个“节点名称”。 我有一个表“plcnext_nodes”,每个节点都有一个唯一的“NodeId”及其对应的“NodeName”。
如何同时使用来自“plcnext_nodes”表的输入和 IoT-Hub 消息来使用“NodeId”将事件数据存储在另一个 SQL 表中?
我想使用“NodeId”而不是“NodeName”,因为有些名称可能会变得很长,并且在每条消息中一遍又一遍地保存它们会浪费存储空间。
所需的解决方案
我想解析以下 来自 IoT 中心的消息:
{
"NodeName": "ns=5;s=Arp.Plc.Eclr/DI2",
"NodeDataType": "Boolean",
"EventValue": 0,
"EventMeasuredUtcTime": "2019-11-11T12:15:22.4830000Z",
"EventProcessedUtcTime": "2019-11-11T12:41:57.1706596Z",
"EventEnqueuedUtcTime": "2019-11-11T12:15:32.1260000Z",
"IoTHub": {
...
}
}
将 'NodeName' 与 plcnext_nodes 表中的比较,以获得适当的 'NodeId':
NodeId NodeName NodeDataType
---------------------------------------------
1 ns=5;s=Arp.Plc.Eclr/DI1 Boolean
2 ns=5;s=Arp.Plc.Eclr/DI2 Boolean
...
要获得以下输出并插入到 plcnext_events 表中:
NodeId EventValue EventMeasured
-----------------------------------------------
1 0 2019-11-11 12:15:22.4830000
查询
我在 Azure 流分析上尝试了以下查询:
SELECT
NodeId,
EventValue,
EventMeasuredUtcTime,
EventEnqueuedUtcTime,
EventProcessedUtcTime
INTO
[plcnext_events]
FROM
[plcnext_nodes],
[iot_hub]
WHERE
[iot_hub].NodeName = [plcnext-nodes].NodeName
但是 FROM 中不支持 JOIN,并且我无法使用 JOIN 子句,因为它有 DATEDIFF 限制(plcnext_nodes 表没有时间戳)
有没有办法做到这一点?
【问题讨论】:
标签: sql azure stream analytics