GetArrayElement (Azure Stream Analytics)
Devolve o elemento de matriz no índice especificado. Esta função é útil para analisar matrizes e objetos aninhados em dados de eventos de entrada formatados em JSON e AVRO. Para obter mais exemplos, veja Analisar dados JSON e AVRO. Se precisar de devolver todos os elementos aninhados numa matriz, utilize Antes 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 suportados.
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 registos. Quando utilizada como entrada local num ficheiro JSON, a matriz de nível superior é interpretada para a geração de linhas/eventos pelo Azure Stream Analytics. Não é necessário ter em consideração a sintaxe da consulta.
Ao nível do registo individual, existem duas propriedades com tipos diferentes.
DeviceId
é do tipo nvarchar(max), SensorReadings
é do tipo registo (objeto).
GetType pode ser utilizado 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 esta matriz fosse mais complexa (contendo registos ou matrizes), poderia ser utilizada uma combinação de GetArrayElements (plural) e GetRecordPropertyValue .
Consultas
Esta consulta devolve campos na raiz do registo (DeviceId
), campos aninhados com a notação de pontos (Temperature
,Humidity
), incluindo uma matriz (CustomSensor
) e, por fim, o primeiro e segundo elementos dessa matriz através 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
Devolve o seguinte resultado:
DeviceId | Temperatura | Humidade | CustomSensorArray | FirstCustomSensorValue | SecondCustomSensorValue |
---|---|---|---|---|---|
631 | 81 | 69 | 0,1,0 | 0 | 1 |
123 | 80 | 70 | 1,1,0 | 1 | 1 |
Utilize 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
Devolve o seguinte resultado:
DeviceId | CustomerSensorValue |
---|---|
631 | 0 |
631 | 1 |
631 | 0 |
123 | 0 |
123 | 1 |
123 | 1 |
A partir daí, 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 |