Sdílet prostřednictvím


GetArrayElement

✅Eventstream prostředků infrastruktury Azure Stream Analytics ✅

Vrátí prvek pole v zadaném indexu. Tato funkce je užitečná pro analýzu polí a vnořených objektů ve formátu JSON a AVRO formátovaných vstupních dat událostí. Další příklady najdete v tématu Analýza dat JSON a AVRO. Pokud potřebujete vrátit všechny vnořené prvky v poli, použijte místo toho GetArrayElements .

Syntaxe

GetArrayElement ( array_expression, bigint_expression )  

Argumenty

array_expression

Je výraz pole, který se má vyhodnotit jako zdrojová matice. array_expression může být sloupec typu Matice nebo výsledek jiného volání funkce.

bigint_expression

Je výraz bigint, který se má vyhodnotit jako index pole. Pořadová pozice v poli prvků počínaje číslem 0.

Návratové typy

Návratový typ je určen typem prvku pole a může být libovolný z podporovaných typů.

Příklady

Vzorová data

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

Výše uvedená ukázková datová sada je pole dvou záznamů. Při použití jako místní vstup v souboru JSON se pole nejvyšší úrovně interpretuje pro generování řádků a událostí službou Azure Stream Analytics. V syntaxi dotazu ji nemusíte brát v úvahu.

Na úrovni jednotlivých záznamů existují dvě vlastnosti s různými typy. DeviceId je typu nvarchar(max), SensorReadings je záznam typu (objekt). Typ GetType lze použít k určení typu v případě potřeby.

SensorReadings má tři vlastnosti: dva jsou typu bigint: Temperature a Humiditya CustomSensor je typu pole ( bigint). Pokud bylo toto pole složitější (samotné obsahující záznamy nebo pole), lze použít kombinaci GetArrayElements (množného čísla) a GetRecordPropertyValue .

Dotazy

Tento dotaz vrátí pole v kořenovém adresáři záznamu (DeviceId), vnořených polí pomocí zápisu tečky (Temperature,Humidity), včetně pole (CustomSensor) a nakonec první a druhý prvek tohoto pole prostřednictvím GetArrayElement (index 0 a 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

Vrátí následující výstup:

Id zařízení Teplota Vlhkost CustomSensorArray FirstCustomSensorValue SecondCustomSensorValue
631 81 69 0,1,0 0 1
123 80 70 1,1,0 1 1

Pomocí příkazu CROSS APPLY rozbalte pole:

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

Vrátí následující výstup:

Id zařízení CustomerSensorValue
631 0
631 1
631 0
123 0
123 1
123 1

V případě potřeby můžete obsah snadno agregovat:

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)
Id zařízení CustomerSensorTotal
123 2
631 1

Viz také