GetArrayElement (Analisi di flusso di Azure)

Restituisce l'elemento matrice in corrispondenza dell'indice specificato. Questa funzione è utile per l'analisi di matrici e oggetti annidati nei dati degli eventi di input in formato JSON e AVRO. Per altri esempi, vedere Analisi dei dati JSON e AVRO. Se è necessario restituire tutti gli elementi annidati in una matrice, usare invece GetArrayElements .

Sintassi

GetArrayElement ( array_expression, bigint_expression )  

Argomenti

array_expression

Espressione di matrice da valutare come matrice di origine. array_expression può essere una colonna di tipo Array o il risultato di un'altra chiamata di funzione.

bigint_expression

Espressione bigint da valutare come indice di matrice. Posizione ordinale nella matrice di elementi, a partire da 0.

Tipi restituiti

Il tipo restituito è determinato dal tipo di elemento della matrice e può essere uno dei tipi supportati.

Esempio

Dati di esempio

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

Il set di dati di esempio precedente è una matrice di due record. Se usato come input locale in un file JSON, la matrice di primo livello viene interpretata per la generazione di righe/eventi da Analisi di flusso di Azure. Non è necessario prenderlo in considerazione nella sintassi della query.

A livello di singolo record, esistono due proprietà con tipi diversi. DeviceId è di tipo nvarchar(max), SensorReadings è di tipo record (oggetto). GetType può essere usato per determinare il tipo quando necessario.

SensorReadings ha tre proprietà: due sono di tipo bigint: Temperature e Humiditye CustomSensor è di tipo matrice (di bigint). Se questa matrice era più complessa (se stessa contenente record o matrici), è possibile usare una combinazione di GetArrayElements (plural) e GetRecordPropertyValue .

Query

Questa query restituisce i campi nella radice del record (DeviceId), i campi annidati usando la notazione punto (Temperature,Humidity), inclusa una matrice (CustomSensor) e infine il primo e il secondo elemento della matrice tramite GetArrayElement (indice 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

Restituisce l'output seguente:

DeviceId Temperatura Umidità CustomSensorArray FirstCustomSensorValue SecondCustomSensorValue
631 81 69 0,1,0 0 1
123 80 70 1,1,0 1 1

Usare CROSS APPLY per espandere la matrice:

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

Restituisce l'output seguente:

DeviceId CustomerSensorValue
631 0
631 1
631 0
123 0
123 1
123 1

Da qui è possibile aggregare facilmente il contenuto, se necessario:

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

Vedi anche