从Azure Stream Analytics中的数组中提取某些值,然后手动添加其他值

问题描述 投票:0回答:1

我已经设置了一些传感器,以便通过事件中心接收数据(JSON)到Stream Analytics作业,再到Data Lake Gen2。我只需要数据中的一些值,并想添加一些值,例如Floor,Room,因为这些数据未包含在我从传感器接收到的数据中。由于传感器不多,我认为我可以在流分析中手动添加它。例如。序列号等于“ 1234567”的情况下,添加下限“ 2”。在这里我遇到了一些麻烦,因为数据存储在数组中,如下所示。

我的目标是分离数组中的元素(数据点)以分离事件,但仍将传感器中的值保留为SerialNo,DateTime,并将值添加为floor,room等。我不知道是否可以执行?

这是我收到的流分析数据的示例。在此示例中,它只是两个数据点,但是有些情况下最多有9个数据点。原因是传感器测量许多不同的事物(例如温度,湿度),并在1小时和24小时内平均进行自身的汇总。

[
  {
    "dsType": "MIBUS",
    "timeStamp": 1583304733314,
    "dateTime": "2020-03-04T06:52:13.0000000Z",
    "serialNo": "1234567",
    "manufacturer": "Trank",
    "battLvl": 0,
    "bridgeId": "03000000",
    "dpCnt": 2,
    "datapoint": [
      {
        "type": "FLOAT",
        "name": "Temperature",
        "size": 32,
        "dataType": "BCD_DIGIT",
        "res": 0.1,
        "resUnit": "Degrees",
        "valueType": "CSV",
        "unit": "C",
        "value": 12.5,
        "scale": 1,
        "min": "-20",
        "max": "55",
        "low": " ",
        "high": " "
      },
      {
        "type": "NUMBER",
        "name": "Humidity",
        "size": 8,
        "dataType": "UINT8",
        "unit": "%",
        "res": 1,
        "resUnit": "%",
        "valueType": "CSV",
        "value": 46,
        "scale": 1,
        "min": " ",
        "max": " ",
        "low": " ",
        "high": " "
      }
    ],
    "uniqueId": "TR1234567",
    "EventProcessedUtcTime": "2020-03-04T07:50:07.7614906Z",
    "PartitionId": 0,
    "EventEnqueuedUtcTime": "2020-03-04T06:52:13.3990000Z"
  },

所以我希望从显示的数据中得到的结果看起来像这样:

SerialNo        DateTime                     name       value       valueType       Floor       Room   
1234567   2020-03-04T06:52:13.0000000Z    Temperature   12,5          CSV             2        Bedroom
1234567   2020-03-04T06:52:13.0000000Z     Humidity      46           CSV             2        Bedroom

我尝试过函数屁股GetArrayElement,CROSS APPLY,GetRecordProperties等,没有任何运气。可能是因为我没有以正确的方式应用它们。

我愿意接受所有建议以使其正确:)

提前感谢!

azure azure-stream-analytics stream-analytics
1个回答
1
投票

您可以通过编写类似以下的查询来轻松转换array elements into separate events:>

SELECT i.serialNo, i.dateTime, sensorData.ArrayValue.name, 
sensorData.ArrayValue.value, sensorData.ArrayValue.valueType
FROM input i
CROSS APPLY GetArrayElements(datapoint) as sensorData

为了获取地板和卧室的值,您还可以使用Reference data input(SQL数据库或Blob存储)。然后,使用您的实时输入来JOIN此参考数据,以基于序列号获取地板和卧室的值。

© www.soinside.com 2019 - 2024. All rights reserved.