【问题标题】:Azure Stream Analytics query with multiple inputs具有多个输入的 Azure 流分析查询
【发布时间】: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


    【解决方案1】:

    您可以在流分析中使用引用数据连接来连接表。

    Using Reference Data for Lookups in Stream Analytics

    参考数据(也称为查找表)是一个有限数据集,本质上是静态的或缓慢变化的,用于执行查找或扩充您的数据流。

    在您的情况下,转到您的流分析作业中的 输入 部分并添加参考输入。您可以选择 Blob 存储SQL 数据库 作为源。

    然后您可以定义您的 SQL 查询以返回您需要的参考数据。对于您的情况,您的参考数据查询如下所示:

    SELECT NodeId, NodeName, NodeDataType
    FROM dbo.plcnext-nodes
    

    在 SA 中定义参考数据连接后,请转到流分析中的 查询 部分并更新您的查询。对于您的场景,您的查询将如下所示(使用 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
    

    【讨论】:

    • 谢谢!工作了一个款待。没想过将其添加为参考表;)
    猜你喜欢
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    相关资源
    最近更新 更多