GetArrayElement (Azure Stream Analytics)

Devuelve el elemento de matriz que se encuentra en el índice especificado. Esta función es útil para analizar matrices y objetos anidados en datos de eventos de entrada con formato JSON y AVRO. Para obtener más ejemplos, consulte Análisis de datos JSON y AVRO. Si necesita devolver todos los elementos anidados de una matriz, use GetArrayElements en su lugar.

Sintaxis

GetArrayElement ( array_expression, bigint_expression )  

Argumentos

array_expression

Es la expresión de matriz que se va a evaluar como una matriz de origen. array_expression puede ser una columna de tipo Array o resultado de otra llamada de función.

bigint_expression

Es la expresión bigint que se va a evaluar como índice de matriz. Posición ordinal en la matriz de elementos, a partir de 0.

Tipos de valor devuelto

El tipo de valor devuelto viene determinado por el tipo de elemento de matriz y puede ser cualquiera de los tipos admitidos.

Ejemplos

Datos de ejemplo

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

El conjunto de datos de ejemplo anterior es una matriz de dos registros. Cuando se usa como entrada local en un archivo JSON, azure Stream Analytics interpreta la matriz de nivel superior para la generación de filas o eventos. No es necesario tenerlo en cuenta en la sintaxis de consulta.

En el nivel de registro individual, hay dos propiedades con tipos diferentes. DeviceId es de tipo nvarchar(max), SensorReadings es de tipo record (object). GetType se puede usar para determinar el tipo cuando sea necesario.

SensorReadings tiene tres propiedades: dos son de tipo bigint: Temperature y Humidity, y CustomSensor es de tipo matriz (de bigint). Si esta matriz era más compleja (que contiene registros o matrices), se podría usar una combinación de GetArrayElements (plural) y GetRecordPropertyValue .

Consultas

Esta consulta devuelve campos en la raíz del registro (DeviceId), campos anidados mediante la notación de puntos (Temperature,Humidity), incluida una matriz (CustomSensor) y, por último, los elementos primero y segundo de esa matriz a través de GetArrayElement (índice 0 y 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

Devuelve la salida siguiente:

deviceId Temperatura Humedad CustomSensorArray FirstCustomSensorValue SecondCustomSensorValue
631 81 69 0,1,0 0 1
123 80 70 1,1,0 1 1

Use CROSS APPLY para desplegar la matriz:

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

Devuelve la salida siguiente:

deviceId CustomerSensorValue
631 0
631 1
631 0
123 0
123 1
123 1

Desde allí, puede agregar fácilmente el contenido si es necesario:

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

Consulte también