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 |