在Azure流分析中处理阵列

时间:2018-12-17 17:04:59

标签: json azure-stream-analytics

我将此JSON结构提供给我的ASA:

[{
  "Stages": [
    {
      "Name": "Stage 1",
      "Count": 45,
      "First": "2018-12-17T11:31:12.7448439-04:00",
      "Average": 1.0,
      "Max": 0.0
    },
    {
      "Name": "Stage 2",
      "Count": 7,
      "First": "2018-12-17T11:31:12.7448469-04:00",
      "Average": 0.0,
      "Max": 0.0
    }
  ],
  "DateTimeET": "2018-12-17T11:31:12.7448477-04:00",
  "Division": "One"
}]

我坚持如何获取Stages数组中每个元素的名称,计数,第一,平均值和最大值。

我这样做:

WITH CTE AS (
    SELECT  
        event.Division
        ,event.DateTimeET
        ,StageElement
    FROM
        StageSummary AS event
    CROSS APPLY getarrayelements(event.Stages) AS StageElement
)

SELECT
    event2.Division
    ,event2.DateTimeET
    ,event2.StageElement
FROM
    CTE AS event2

我可以使用GetRecordProperties获得数组,但是我又获得了完整的数组,我无法获得特定的“名称”或“计数”

感谢您的帮助。

更新:

我正在使用如下查询:

WITH CTE AS (
    SELECT  
        event.Division
        ,event.DateTimeET
        ,StageElement
    FROM
        StageSummary AS event
    CROSS APPLY getarrayelements(event.Stages) AS StageElement
)

SELECT
    event2.Division
    ,event2.DateTimeET
    ,getrecordpropertyvalue(Elements,'Name') AS NameValue
FROM
    CTE AS event2
    CROSS APPLY getrecordproperties(event2.StageElement) AS Elements

但NameValue返回空。

1 个答案:

答案 0 :(得分:3)

由于我的Stages数组的结构是固定的,因此解决方案是使用ArrayValue这样查询每个元素:

    SELECT  
        event.Division
        ,event.DateTimeET
        ,StageElement.ArrayValue.Name
        ,StageElement.ArrayValue.Count
        ,StageElement.ArrayValue.First
        ,StageElement.ArrayValue.Average
        ,StageElement.ArrayValue.Max

    FROM
        StageSummary AS event
    CROSS APPLY getarrayelements(event.Stages) AS StageElement

这给了我所需的价值。我缺少ArrayValue来引用实际数据,因为GetArrayElements返回ArrayValue和ArrayIndex