GetArrayElement (Azure Stream Analytics)
Gibt das Arrayelement am angegebenen Index zurück. Diese Funktion ist nützlich zum Analysieren von Arrays und geschachtelten Objekten in JSON- und AVRO-formatierten Eingabeereignisdaten. Weitere Beispiele finden Sie unter Analysieren von JSON- und AVRO-Daten. Wenn Sie alle geschachtelten Elemente in einem Array zurückgeben müssen, verwenden Sie stattdessen GetArrayElements .
Syntax
GetArrayElement ( array_expression, bigint_expression )
Argumente
array_expression
Der Arrayausdruck, der als Quellarray ausgewertet werden soll. array_expression kann eine Spalte vom Typ Array oder das Ergebnis eines anderen Funktionsaufrufs sein.
bigint_expression
Der bigint-Ausdruck, der als Arrayindex ausgewertet werden soll. Die Ordnungsposition im Array von Elementen, beginnend bei 0.
Rückgabetypen
Der Rückgabetyp wird vom Arrayelementtyp bestimmt und kann jeder der unterstützten Typen sein.
Beispiele
Beispieldaten
[
{
"DeviceId" : "123",
"SensorReadings" :
{
"Temperature" : 80,
"Humidity" : 70,
"CustomSensor": [1,1,0]
}
},
{
"DeviceId" : "631",
"SensorReadings" :
{
"Temperature" : 81,
"Humidity" : 69,
"CustomSensor": [0,1,0]
}
}
]
Das obige Beispieldataset ist ein Array von zwei Datensätzen. Bei Verwendung als lokale Eingabe in einer JSON-Datei wird das Array der obersten Ebene für die Generierung von Zeilen/Ereignissen von Azure Stream Analytics interpretiert. Es ist nicht erforderlich, sie in der Abfragesyntax zu berücksichtigen.
Auf der Ebene der einzelnen Datensätze gibt es zwei Eigenschaften mit unterschiedlichen Typen.
DeviceId
ist vom Typ nvarchar(max), SensorReadings
ist vom Typ record (object).
GetType kann verwendet werden, um den Typ bei Bedarf zu bestimmen.
SensorReadings
verfügt über drei Eigenschaften: zwei sind vom Typ bigint: Temperature
und Humidity
, und CustomSensor
ist vom Typ array (von bigint). Wenn dieses Array komplexer ist (selbst Datensätze oder Arrays enthält), kann eine Kombination aus GetArrayElements (Plural) und GetRecordPropertyValue verwendet werden.
Abfragen
Diese Abfrage gibt Felder am Stamm des Datensatzes (DeviceId
), geschachtelte Felder mit der Punktnotation (Temperature
,Humidity
), einschließlich eines Arrays (CustomSensor
) und schließlich das erste und zweite Element dieses Arrays über GetArrayElement (Index 0 und 1) zurück:
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
Dieser Befehl liefert die folgende Ausgabe:
deviceId | Temperatur | Luftfeuchtigkeit | CustomSensorArray | FirstCustomSensorValue | SecondCustomSensorValue |
---|---|---|---|---|---|
631 | 81 | 69 | 0,1,0 | 0 | 1 |
123 | 80 | 70 | 1,1,0 | 1 | 1 |
Verwenden Sie CROSS APPLY , um das Array zu entfalten:
SELECT
i.DeviceId,
CustomerSensorValue.ArrayValue AS CustomerSensorValue
FROM input AS i
CROSS APPLY GetArrayElements(i.SensorReadings.CustomSensor) AS CustomerSensorValue
Dieser Befehl liefert die folgende Ausgabe:
deviceId | CustomerSensorValue |
---|---|
631 | 0 |
631 | 1 |
631 | 0 |
123 | 0 |
123 | 1 |
123 | 1 |
Von dort aus können Sie den Inhalt bei Bedarf einfach aggregieren:
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 |