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