[英]Azure Stream Analytics query with multiple inputs
我有一個 Azure IoT-Hub 向 Azure Stream 分析作業發送消息。
每條消息都包含一個“NodeName”。 我有一個表“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
...
要獲取以下 output 並插入到plcnext_events表中:
NodeId EventValue EventMeasured
-----------------------------------------------
1 0 2019-11-11 12:15:22.4830000
我在 Azure Stream Analytics 上嘗試了以下查詢:
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 表沒有時間戳)
您可以使用 Stream Analytics 中的參考數據聯接來聯接表。
在 Stream Analytics 中使用參考數據進行查找
參考數據(也稱為查找表)是一個有限數據集,即 static 或性質緩慢變化的數據集,用於執行查找或擴充數據流。
在您的情況下,go 在 Stream 分析作業的輸入部分下,並添加參考輸入。 您可以將 select Blob Storage或SQL 數據庫作為您的源。
然后,您可以定義您的 SQL 查詢以返回您需要的參考數據。 對於您的情況,您的參考數據查詢將如下所示:
SELECT NodeId, NodeName, NodeDataType
FROM dbo.plcnext-nodes
在 SA 中定義參考數據聯接后,go 到 Stream Analytics 中的查詢部分並更新您的查詢。 對於您的場景,您的查詢將如下所示(使用 JOIN):
SELECT
pn.NodeId,
hub.EventValue,
hub.EventMeasuredUtcTime,
hub.EventEnqueuedUtcTime,
hub.EventProcessedUtcTime
INTO [plcnext_events]
FROM [iot_hub] hub
JOIN [plcnext-nodes] pn ON pn.NodeName = hub.NodeName
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.