首页 > 解决方案 > 在 Azure 流分析中处理数组

问题描述

我将这个 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 Array 中每个元素的 Name、Count、First、Average 和 Max。

我这样做了:

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 返回空。

标签: jsonazure-stream-analytics

解决方案


由于我的 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


推荐阅读