Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Azure Stream Analytics中解析JSON记录数据类型_Azure_Azure Stream Analytics - Fatal编程技术网

在Azure Stream Analytics中解析JSON记录数据类型

在Azure Stream Analytics中解析JSON记录数据类型,azure,azure-stream-analytics,Azure,Azure Stream Analytics,我有多个不同类型的物联网设备流入Azure物联网中心。我将这些数据流式传输到SQL,但是我很难找到一个SA作业来识别两种不同的数据事件类型并正确解析它们,而不会失败 问题在于,一种类型的设备将遥测数据作为记录数据类型发送,其中包含已知模式中的嵌套字段,而另一种类型的设备将遥测数据作为记录数据类型发送,其中包含属性名称为变量的嵌套字段 嵌套字段位于已知架构中的记录数据类型示例: { "connected": "true", "tag

我有多个不同类型的物联网设备流入Azure物联网中心。我将这些数据流式传输到SQL,但是我很难找到一个SA作业来识别两种不同的数据事件类型并正确解析它们,而不会失败

问题在于,一种类型的设备将遥测数据作为记录数据类型发送,其中包含已知模式中的嵌套字段,而另一种类型的设备将遥测数据作为记录数据类型发送,其中包含属性名称为变量的嵌套字段

嵌套字段位于已知架构中的记录数据类型示例:

{
    "connected": "true",
    "tags": {
      "AFR_DOWNTIME_HOURS": 24,
      "AFR_INDEX_CALC2": 0,
      "OIL_HOURS": 188,
      "PIDD_SP": 0,
      "PIDG_SP": 0,
      "PIDS_SP": 49.997,
      "PIDSV_SP": 49.997,
      "RUNTIME_HOURS": 0
    },
    "timestamp": "2020-11-20T01:16:00.0000000Z",
    "EventProcessedUtcTime": "2020-11-20T02:12:00.5029724Z",
    "PartitionId": 0,
    "EventEnqueuedUtcTime": "2020-11-20T01:16:00.3080000Z",
    "IoTHub": {
      "MessageId": null,
      "CorrelationId": null,
      "ConnectionDeviceId": "FlexEdge",
      "ConnectionDeviceGenerationId": "637414289004334936",
      "EnqueuedTime": "2020-11-20T01:16:00.0000000",
      "StreamId": null
    }
  }
我当前用于此记录类型的查询如下,输出在下面的链接中

SELECT
        event.IoTHub.[ConnectionDeviceId] [deviceId]
        , tagElements.ArrayValue.Name [tag]
        , TRY_CAST(event.[timestamp] AS datetime) [timestamp]
        , TRY_CAST(tagElements.ArrayValue.[Value] AS float) [value]
    FROM
        [iotHub] [event]
    CROSS APPLY GetArrayElements(event.tags) [tagElements]

属性名称为变量的具有嵌套字段的记录数据类型示例:

{
    "deviceName": "AS-RT",
    "timestamp": "2020-11-20T01:11:04.0000000Z",
    "tags": [
      {
        "timestamp": "2020-11-20T01:11:01.0000000Z",
        "Name": "AMP_LEFT",
        "Value": "147.047333"
      },
      {
        "timestamp": "2020-11-20T01:11:01.0000000Z",
        "Name": "AMP_RIGHT",
        "Value": 145.79303
      },
      {
        "timestamp": "2020-11-20T01:11:01.0000000Z",
        "Name": "AMT_LEFT",
        "Value": 37.900002
      },
    ],
    "EventProcessedUtcTime": "2020-11-20T02:11:08.7171562Z",
    "PartitionId": 0,
    "EventEnqueuedUtcTime": "2020-11-20T01:11:04.9630000Z",
    "IoTHub": {
      "MessageId": null,
      "CorrelationId": null,
      "ConnectionDeviceId": "TAIKB1140905",
      "ConnectionDeviceGenerationId": "637243142777325257",
      "EnqueuedTime": "2020-11-20T01:11:04.0000000",
      "StreamId": null
    }
  }
我用于记录数据类型的查询如下,输出在下面的链接中:

SELECT
    event.IoTHub.[ConnectionDeviceId] [deviceId],
    tagElements.PropertyName [tag],
    event.timestamp [timestamp],
    tagElements.PropertyValue [value]
FROM [TESThub] [event]
CROSS APPLY GetRecordProperties(event.tags) AS tagElements

如何让流分析识别两种不同的数据类型,并在单个作业中正确解析它们?物联网设备具有不同数量的标签,但并非所有标签都具有相同的名称

如果上面的任何一个查询针对相反的数据记录运行,我会得到以下错误之一:

无法将“array”类型的值强制转换为表达式“event”中的“record”类型。标签' 无法将“记录”类型的值强制转换为表达式“事件”中的“数组”类型。标签'