azure - 使用 Azure 流分析保留最后的值

标签 azure azure-cosmosdb azure-iot-hub azure-stream-analytics

我们通过 IoT 中心收集设备事件,然后使用流分析进行处理。我们希望生成包含每个测量的最后一个值的状态概览。然后,状态将写入 CosmosDB 输出,每个设备一个文档。

简化的查询如下所示:

SELECT
    device_id as id, 
    LAST(value) OVER (PARTITION BY device_id LIMIT DURATION(day, 1) WHEN name = 'battery_status') AS battery_status
INTO status
FROM iothub

生成的文档应该是(也经过简化):

{
    "id": "8c03b6cef760",
    "battery_status": 95
}

问题在于,并非所有事件都包含 Battery_status,只要最后一个具有 Battery_status 的事件早于指定的持续时间,CosmosDB 文档中的最后一个值就会被 NULL 覆盖。

我需要的是一些构造来在没有数据时完全省略该值,从而保留输出文档中的最后一个值。我有什么想法可以实现这一目标吗?

最佳答案

目前 Azure 流分析不支持将输出分区到 CosmosDB 对于每个设备。 有两种解决方法。

  1. 您可以选择 Azure Function 来解决此问题。在 Azure 函数中,您可以创建 IoT 中心触发器,使用 battery_status 属性筛选数据,然后以编程方式将数据存储到每个设备的 CosmosDB。

  2. 您可以选择Azure存储容器而不是CosmosDB,然后将Azure存储容器配置为Azure IoT Hub中的端点和消息路由,请参阅IoT Hub Endpoints本教程介绍如何 save IoT hub messages that contain sensor data to your Azure blob storage 。在 route配置中,您可以添加查询字符串来过滤数据。

关于azure - 使用 Azure 流分析保留最后的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51782772/

相关文章:

javascript - 使用带有附件的 SendGrid 的 Azure Function (JS)

Azure IoT 访问失败 [401 未经授权]

Azure Iothub 的事件中心兼容连接字符串

Azure 计算能力 : Extra Large VM slow

visual-studio - Visual Studio 2012 调试器在调试 Azure 项目时突然停止

c# - 为什么 Azure 服务总线认为未设置 DefaultTimeToLive 属性?

c# - Azure Cosmos Document DB - 按 id 读取多个文档

azure-cosmosdb - 按名称使用属性查询 DocumentDB

c# - 为什么 DocumentDb 在测试场景中运行时偶尔会失败

azure-iot-hub - 如何使用流分析检测 IoT 中心设备中是否没有摄取数据?