Azure 流分析复杂查询未返回所需结果

Azure Stream Analytics complex query not returning desired results

这是输入 JSON 数据包。我正在流分析中编写转换查询以获取源和 masterTag 属性。

[{
      "source": "xda",
      "data": 
        [{
            "masterTag": "UNIFY",
            "speed": 180
        }],
      "EventEnqueuedUtcTime": "2018-07-20T19:28:18.5230000Z",
  },
  {
      "source": "xda",
      "data": [{
            "masterTag": "UNIFY",
            "speed": 214
        }],
      "EventEnqueuedUtcTime": "2018-07-20T19:28:20.5550000Z",
  }
]

这是我的:

WITH data AS
(
    SELECT
        source,
        GetArrayElement(data,0) as data_packet 
    FROM input 
)

SELECT 
    source, 
    data_packet.masterTag 
INTO 
    output
FROM data

但是,这个查询只有returns一个元素。如何更新此查询以获取 JSON 数据包中的所有元素?

尝试使用交叉应用函数 GetArrayElements(复数)。

例子 https://msdn.microsoft.com/en-us/azure/stream-analytics/reference/getarrayelements-azure-stream-analytics

https://msdn.microsoft.com/en-us/azure/stream-analytics/reference/complex-data-types-stream-analytics#array-data-types

我确实使用您的源数据和查询进行了测试,它确实得到了 2 个输出元素。所以,我认为你的意思是如何 return 数据数组中的所有元素都有更多元素。

您可以使用以下查询:

SELECT 
    jsoninput.source, 
    arrayElement.ArrayValue.masterTag
INTO 
    output
FROM jsoninput
CROSS APPLY GetArrayElements(jsoninput.data) AS arrayElement 

Json 示例:

[{
      "source": "xda",
      "data": 
        [{
            "masterTag": "UNIFY1",
            "speed": 180
        },
        {
            "masterTag": "UNIFY2",
            "speed": 180
        }],
      "EventEnqueuedUtcTime": "2018-07-20T19:28:18.5230000Z",
  },
  {
      "source": "xda",
      "data": [{
            "masterTag": "UNIFY3",
            "speed": 214
        },
        {
            "masterTag": "UNIFY4",
            "speed": 180
        }],
      "EventEnqueuedUtcTime": "2018-07-20T19:28:20.5550000Z",
  }
]

输出:

希望对你有帮助。