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

Siehe auch