GetArrayElement (Azure Stream Analytics)

Zwraca element tablicy w określonym indeksie. Ta funkcja jest przydatna w przypadku analizowania tablic i zagnieżdżonych obiektów w formacie JSON i AVRO sformatowanych danych zdarzeń wejściowych. Aby uzyskać więcej przykładów, zobacz Analizowanie danych JSON i AVRO. Jeśli musisz zwrócić wszystkie zagnieżdżone elementy w tablicy, zamiast tego użyj polecenia GetArrayElements .

Składnia

GetArrayElement ( array_expression, bigint_expression )  

Argumenty

array_expression

Czy wyrażenie tablicy ma być oceniane jako tablica źródłowa. array_expression może być kolumną typu Array lub wynikiem innego wywołania funkcji.

bigint_expression

Czy wyrażenie bigint ma być oceniane jako indeks tablicy. Położenie porządkowe w tablicy elementów, począwszy od 0.

Typy zwracane

Typ zwracany jest określany przez typ elementu tablicy i może być dowolnym z obsługiwanych typów.

Przykłady

Przykładowe dane

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

Powyższy przykładowy zestaw danych to tablica dwóch rekordów. W przypadku użycia jako danych wejściowych lokalnych w pliku JSON tablica najwyższego poziomu jest interpretowana dla generowania wierszy/zdarzeń przez usługę Azure Stream Analytics. Nie ma potrzeby uwzględnienia jej w składni zapytania.

Na poziomie pojedynczego rekordu istnieją dwie właściwości z różnymi typami. DeviceId jest typu nvarchar(max), SensorReadings jest rekordem typu (obiekt). Parametr GetType może służyć do określania typu w razie potrzeby.

SensorReadings ma trzy właściwości: dwa są typu bigint: Temperature i Humidity, i CustomSensor jest tablicą typów ( bigint). Jeśli ta tablica była bardziej złożona (sama zawiera rekordy lub tablice), można użyć kombinacji elementów GetArrayElements (mnogiej) i GetRecordPropertyValue .

Zapytania

To zapytanie zwraca pola w katalogu głównym rekordu (DeviceId), zagnieżdżone pola przy użyciu notacji kropki (,Humidity), w tym tablicy (CustomSensorTemperature), a na koniec pierwsze i drugie elementy tej tablicy za pośrednictwem elementu GetArrayElement (indeks 0 i 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

Zwraca następujące dane wyjściowe:

DeviceId Temperatura Wilgotność CustomSensorArray FirstCustomSensorValue SecondCustomSensorValue
631 81 69 0,1,0 0 1
123 80 70 1,1,0 1 1

Użyj polecenia CROSS APPLY , aby rozwinąć tablicę:

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

Zwraca następujące dane wyjściowe:

DeviceId CustomerSensorValue
631 0
631 1
631 0
123 0
123 1
123 1

W razie potrzeby można łatwo agregować zawartość:

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

Zobacz też