GetArrayElement (Azure Stream Analytics)
Retorna o elemento de matriz no índice especificado. Essa função é útil para analisar matrizes e objetos aninhados em dados de evento de entrada formatados em JSON e AVRO. Para obter mais exemplos, consulte Análise de dados JSON e AVRO. Se você precisar retornar todos os elementos aninhados em uma matriz, use GetArrayElements .
Sintaxe
GetArrayElement ( array_expression, bigint_expression )
Argumentos
array_expression
É a expressão de matriz a ser avaliada como uma matriz de origem. array_expression pode ser uma coluna do tipo Matriz ou resultado de outra chamada de função.
bigint_expression
É a expressão bigint a ser avaliada como índice de matriz. A posição ordinal na matriz de elementos, começando em 0.
Tipos de retorno
O tipo de retorno é determinado pelo tipo de elemento de matriz e pode ser qualquer um dos tipos com suporte.
Exemplos
Dados de exemplo
[
{
"DeviceId" : "123",
"SensorReadings" :
{
"Temperature" : 80,
"Humidity" : 70,
"CustomSensor": [1,1,0]
}
},
{
"DeviceId" : "631",
"SensorReadings" :
{
"Temperature" : 81,
"Humidity" : 69,
"CustomSensor": [0,1,0]
}
}
]
O conjunto de dados de exemplo acima é uma matriz de dois registros. Quando usada como entrada local em um arquivo JSON, a matriz de nível superior é interpretada para a geração de linhas/eventos pelo Azure Stream Analytics. Não é necessário levar isso em consideração na sintaxe da consulta.
No nível de registro individual, há duas propriedades com tipos diferentes.
DeviceId
é do tipo nvarchar(max), SensorReadings
é do tipo record (objeto).
GetType pode ser usado para determinar o tipo quando necessário.
SensorReadings
tem três propriedades: duas são do tipo bigint: Temperature
e Humidity
e CustomSensor
é do tipo matriz (de bigint). Se essa matriz fosse mais complexa (contendo registros ou matrizes), uma combinação de GetArrayElements (plural) e GetRecordPropertyValue poderia ser usada.
Consultas
Essa consulta retorna campos na raiz do registro (DeviceId
), campos aninhados usando a notação de ponto (Temperature
,Humidity
), incluindo uma matriz (CustomSensor
) e, por fim, o primeiro e o segundo elementos dessa matriz por meio de GetArrayElement (índice 0 e 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
Retorna a seguinte saída:
deviceId | Temperatura | Umidade | CustomSensorArray | FirstCustomSensorValue | SecondCustomSensorValue |
---|---|---|---|---|---|
631 | 81 | 69 | 0,1,0 | 0 | 1 |
123 | 80 | 70 | 1,1,0 | 1 | 1 |
Use CROSS APPLY para desdobrar a matriz:
SELECT
i.DeviceId,
CustomerSensorValue.ArrayValue AS CustomerSensorValue
FROM input AS i
CROSS APPLY GetArrayElements(i.SensorReadings.CustomSensor) AS CustomerSensorValue
Retorna a seguinte saída:
deviceId | CustomerSensorValue |
---|---|
631 | 0 |
631 | 1 |
631 | 0 |
123 | 0 |
123 | 1 |
123 | 1 |
A partir daí, você pode agregar facilmente o conteúdo, se necessário:
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 |