Обработка массива массивов в Azure Stream Analytics - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть эта структура 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, но я снова получаю полный массив, я не могу получить что-то конкретное, например, «Имя» или «Имя».Count '

Любая помощь приветствуется.

Обновление:

Я использую запрос следующим образом:

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 голосов
/ 17 декабря 2018

Поскольку структура моего массива 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

...