Поделиться через


GetArrayElement

✅ Поток событий Azure Stream Analytics ✅ Fabric

Возвращает элемент массива по указанному индексу. Эта функция полезна для синтаксического анализа массивов и вложенных объектов в данных событий JSON и AVRO с форматированными входными данными. Дополнительные примеры см. в разделе "Анализ данных JSON и AVRO". Если необходимо вернуть все вложенные элементы в массиве, используйте GetArrayElements .

Синтаксис

GetArrayElement ( array_expression, bigint_expression )  

Аргументы

array_expression

Выражение массива, вычисляемое как исходный массив. array_expression может быть столбцом массива типов или результатом другого вызова функции.

bigint_expression

Выражение bigint, вычисляемого как индекс массива. Порядковое положение в массиве элементов, начиная с 0.

Типы возвращаемых данных

Тип возвращаемого значения определяется типом элемента массива и может быть любым из поддерживаемых типов.

Примеры

Примерные данные

[
{
    "DeviceId" : "123",
    "SensorReadings" :
    {
        "Temperature" : 80,
        "Humidity" : 70,
        "CustomSensor": [1,1,0]
    }
},
{
    "DeviceId" : "631",
    "SensorReadings" :
    {
        "Temperature" : 81,
        "Humidity" : 69,
        "CustomSensor": [0,1,0]
    }
}
]

Приведенный выше пример набора данных представляет собой массив из двух записей. При использовании в качестве локальных входных данных в JSON-файле массив верхнего уровня интерпретируется для создания строк и событий с помощью Azure Stream Analytics. Нет необходимости учитывать его в синтаксисе запроса.

На отдельном уровне записей есть два свойства с разными типами. DeviceId имеет тип nvarchar(max), SensorReadings имеет тип записи (объект). GetType можно использовать для определения типа при необходимости.

SensorReadingsимеет три свойства: два типа bigint: Temperature и HumidityCustomSensorмассив типов (bigint). Если этот массив был более сложным (сам содержит записи или массивы), можно использовать сочетание GetArrayElements (plural) и GetRecordPropertyValue .

Запросы

Этот запрос возвращает поля в корне записи (), вложенные поля с помощью нотации точек (DeviceId,Humidity), включая массив (CustomSensorTemperature), и, наконец, первые и второй элементы этого массива через GetArrayElement (индекс 0 и 1):

SELECT   
    i.DeviceId,
    i.SensorReadings.Temperature,
    i.SensorReadings.Humidity,
    i.SensorReadings.CustomSensor as CustomSensorArray,
    GetArrayElement(i.SensorReadings.CustomSensor,0) AS FirstCustomSensorValue,
    GetArrayElement(i.SensorReadings.CustomSensor,1) AS SecondCustomSensorValue
FROM input i

Возвращает следующие выходные данные:

DeviceId Температура Влажность CustomSensorArray FirstCustomSensorValue SecondCustomSensorValue
631 восемьдесят один 69 0,1,0 0 1
123 80 70 1,1,0 1 1

Используйте CROSS APPLY для развертывания массива:

SELECT   
    i.DeviceId,
    CustomerSensorValue.ArrayValue AS CustomerSensorValue
FROM input AS i
CROSS APPLY GetArrayElements(i.SensorReadings.CustomSensor) AS CustomerSensorValue

Возвращает следующие выходные данные:

DeviceId CustomerSensorValue
631 0
631 1
631 0
123 0
123 1
123 1

В этом случае можно легко агрегировать содержимое при необходимости:

SELECT   
    i.DeviceId,
    SUM(CustomerSensorValue.ArrayValue) AS CustomerSensorTotal 
FROM input AS i
CROSS APPLY GetArrayElements(i.SensorReadings.CustomSensor) AS CustomerSensorValue 
GROUP BY i.DeviceId, TumblingWindow(minute, 1)
DeviceId CustomerSensorTotal
123 2
631 1

См. также