如何在 Microsoft Azure 流分析上从多个设备中分离数据

Posted

技术标签:

【中文标题】如何在 Microsoft Azure 流分析上从多个设备中分离数据【英文标题】:How to Separate Data from Multiple Devices on Microsoft Azure Stream Analytics 【发布时间】:2020-07-31 18:01:37 【问题描述】:

我目前正在尝试将 2 个不同的设备连接到 IoT 中心,我需要将数据与每个设备分开。为此,我尝试像这样配置我的流分析查询:

SELECT
    deviceId, temperature, humidity, CAST(iothub.EnqueuedTime AS datetime) AS event_date
INTO
    NodeMCUOutput
FROM
    iothubevents
WHERE
    deviceId = "NodeMCU1"

但是,由于某种原因,如果 WHERE 语句在代码中,则不会显示输出(显示输出时没有它,但未过滤数据)。我需要 WHERE 语句才能按照我想要的方式对数据进行排序。我错过了什么吗?有什么解决办法吗?非常感谢。干杯!

【问题讨论】:

如果 deviceId 是来自 IoT Hub 的设备 ID,下面的 Matthijs 回答将帮助您获得它。 【参考方案1】:

消息本身不包含的设备 ID 和其他属性作为元数据包含在消息中。您可以使用 GetMetadataPropertyValue() 函数读取该元数据。这应该适合你:

SELECT
    GetMetadataPropertyValue(iothubevents, 'IoTHub.ConnectionDeviceId') as deviceId, 
    temperature, 
    humidity, 
    CAST(GetMetadataPropertyValue(iothubevents, 'IoTHub.EnqueuedTime') AS datetime) AS event_date
INTO
    NodeMCUOutput
FROM
    iothubevents
WHERE 
    GetMetadataPropertyValue(iothubevents, 'IoTHub.ConnectionDeviceId') = 'NodeMCU1'

【讨论】:

很高兴能帮上忙!【参考方案2】:

我注意到您在 WHERE 子句中使用了双引号。 您需要一个简单的引号来匹配字符串。在这种情况下,它将是

WHERE deviceId = 'NodeMCU1'

如果 deviceId 是来自 IoT 中心元数据的设备 ID,Matthijs 的答案将帮助您检索它。

【讨论】:

以上是关于如何在 Microsoft Azure 流分析上从多个设备中分离数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Microsoft Azure IoT 中创建自定义的流数据仪表板?

如何在 Azure 流分析中通过 IotHub.ConnectionDeviceId 对延迟函数进行分区?

Grafana 作为 Azure 流分析输出

Azure 流分析的嵌套条件

Azure 流分析作业无限运行

关于如何为 Azure 流分析计算水印的说明