Partager via


GetArrayElement

✅ Azure Stream Analytics ✅ Fabric Eventstream

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 des 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 )  

Les arguments

array_expression

Expression de tableau à évaluer comme 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, commençant à 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’elle est utilisée 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 de tenir compte de la syntaxe de la requête.

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

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

Requêtes

Cette requête retourne des champs à la racine de l’enregistrement (DeviceId), des champs imbriqués à l’aide de la notation par points (Temperature,Humidity), y compris un tableau (CustomSensor), et enfin, les premiers 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éployer 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 agréger facilement 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