Partager via


GetArrayElement (Azure Stream Analytics)

Retourne l’élément de tableau à l’index spécifié. Cette fonction est utile pour analyser des tableaux et des objets imbriqués dans des données d’événement d’entrée au format JSON et AVRO. Pour plus d’exemples, consultez Analyse de données JSON et AVRO. Si vous devez retourner tous les éléments imbriqués dans un tableau, utilisez GetArrayElements à la place.

Syntaxe

GetArrayElement ( array_expression, bigint_expression )  

Arguments

array_expression

Expression de tableau à évaluer en tant que tableau source. array_expression peut être une colonne de type Array ou le résultat d’un autre appel de fonction.

bigint_expression

Expression bigint à évaluer en tant qu’index de tableau. Position ordinale dans le tableau d’éléments, à partir de 0.

Types de retour

Le type de retour est déterminé par le type d’élément de tableau et peut être l’un des types pris en charge.

Exemples

Exemple de données

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

L’exemple de jeu de données ci-dessus est un tableau de deux enregistrements. Lorsqu’il est utilisé comme entrée locale dans un fichier JSON, le tableau de niveau supérieur est interprété pour la génération de lignes/événements par Azure Stream Analytics. Il n’est pas nécessaire d’en tenir compte dans la syntaxe de requête.

Au niveau de l’enregistrement individuel, il existe deux propriétés de types différents. DeviceId est de type nvarchar(max), SensorReadings est de type enregistrement (objet). GetType peut être utilisé pour déterminer le type si nécessaire.

SensorReadings a trois propriétés : deux sont de type bigint : Temperature et Humidity, et CustomSensor est de type tableau (de bigint). Si ce tableau était plus complexe (contenant lui-même des enregistrements ou des tableaux), une combinaison de GetArrayElements (pluriel) et GetRecordPropertyValue peut être utilisée.

Requêtes

Cette requête retourne les champs à la racine de l’enregistrement (DeviceId), les champs imbriqués à l’aide de la notation par points (Temperature,Humidity), y compris un tableau (CustomSensor), et enfin, les premier et deuxième éléments de ce tableau via GetArrayElement (index 0 et 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

Retourne la sortie suivante :

deviceId Température Humidité CustomSensorArray FirstCustomSensorValue SecondCustomSensorValue
631 81 69 0,1,0 0 1
123 80 70 1,1,0 1 1

Utilisez CROSS APPLY pour déplier le tableau :

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

Retourne la sortie suivante :

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

À partir de là, vous pouvez facilement agréger le contenu si nécessaire :

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

Voir aussi