Microsoft Azure 时间序列见解:如何查询展平的动态数组

Microsoft Azure Time Series Insights: How to query a flattened dynamic array

我们使用 Time Series Insights Gen 2 从 IoT 中心读取数据。数据的形式与本文档中的示例 C 非常相似:https://docs.microsoft.com/en-us/azure/time-series-insights/concepts-json-flattening-escaping-rules

我们的数据结构如下:

{
  "timestamp": "2020-11-01T10:00:00.000Z",
  "sensors": [{
        "name" : "temperature",
        "unit" : "celsius"
        "value": 25.39
    },
    {
        "name" : "humidity",
        "unit" : "percentage" 
        "value": 97.85
    }
  ]
}

通常数组中还有更多 'sensor' 项。我们一直使用 Time Series Insights PAYG Preview,它运行良好。我们可以使用以下 JSON 有效载荷查询温度:

{
  "getEvents": {
    "timeSeriesId": ["some Id"],
    "searchSpan": {
        "from": "2020-08-27T07:34:00.000Z",
        "to": "2020-08-27T07:34:10.000Z"
    },
    "filter": {
        "tsx": "$event.sensors_name.String = 'temperature'"
    },
    "projectedProperties": [{
            "name": "sensors_value",
            "type": "Double"
        }]
    }
}

这非常有效,直到 Microsoft 将 PREVIEW PAYG 版本推向正式版本。它不再起作用,我们在文档中找到了它:

来源:https://docs.microsoft.com/en-us/azure/time-series-insights/concepts-supported-data-types

下面的文档更明确的说现在数组的展平是不一样的:

来源:https://docs.microsoft.com/en-us/azure/time-series-insights/ingestion-rules-update

是否有可能仍然查询这种动态类型的数组,而不必在每个数组项中放置时间戳或 deviceId?

该功能尚不存在,无法在 TSX 表达式中引用动态类型,并且无法将数组中的值检索为 projectedProperties。必须检索并解析整个数组 client-side。要触发展平,您必须如上所述在对象中添加 ID 或时间戳。

一个想法——创建一个新的 TSI 环境并配置一个复合 TS ID——无论你的初始 ID 是什么加上 sensor.name,(假设该名称是一个唯一标识符),那么你也消除对温度过滤器的需求。