Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
✅ Поток событий 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 |