Partilhar via


GetArrayElement

✅ Azure Stream Analytics ✅ Fabric Eventstream

Retorna o elemento array 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, consulte Análise de dados JSON e AVRO. Se você precisar retornar todos os elementos aninhados em uma matriz, use GetArrayElements em vez disso.

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 Array 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 devolução

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 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 há necessidade de levá-lo 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 (object). 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 array (de bigint). Se essa matriz fosse mais complexa (ela mesma contendo registros ou matrizes), uma combinação de GetArrayElements (plural) e GetRecordPropertyValue poderia ser usada.

Interrogações

Essa consulta retorna campos na raiz do registro (DeviceId), campos aninhados usando a notação de pontos (Temperature,Humidity), incluindo uma matriz (CustomSensor), e, finalmente, o primeiro e o segundo elementos dessa matriz via 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 Humidade 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 facilmente agregar 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

Ver também