GetArrayElement (Azure Stream Analytics)
Vrátí prvek array v zadaném indexu. Tato funkce je užitečná pro parsování polí a vnořených objektů ve vstupních datech událostí ve formátu JSON a AVRO. 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 maticový výraz, který se má vyhodnotit jako zdrojové pole. array_expression může být sloupec typu Pole nebo výsledek jiného volání funkce.
bigint_expression
Je výraz bigint, který se má vyhodnotit jako index pole. Řadová pozice v matici prvků počínaje číslem 0.
Návratové typy
Návratový typ je určen typem elementu pole a může to být kterýkoli z podporovaných typů.
Příklady
Ukázková 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 polem dvou záznamů. Při použití jako místního vstupu v souboru JSON je pole nejvyšší úrovně interpretováno pro generování řádků nebo událostí službou Azure Stream Analytics. V syntaxi dotazu není potřeba ho 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 typu záznamu (object). V případě potřeby je možné typ určit pomocí getType.
SensorReadings
má tři vlastnosti: dvě jsou typu bigint: Temperature
a Humidity
a CustomSensor
jsou typu pole typu ( bigint). Pokud bylo toto pole složitější (samotné obsahující záznamy nebo pole), mohla by být použita kombinace GetArrayElements (množné číslo) a GetRecordPropertyValue .
Dotazy
Tento dotaz vrátí pole v kořenovém adresáři záznamu (DeviceId
), vnořená pole používající tečkovou notaci (Temperature
,Humidity
), včetně pole (CustomSensor
), a nakonec první a druhý prvek tohoto pole prostřednictvím rutiny 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:
DeviceId | 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:
DeviceId | CustomerSensorValue |
---|---|
631 | 0 |
631 | 1 |
631 | 0 |
123 | 0 |
123 | 1 |
123 | 1 |
Odtud můžete v případě potřeby 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)
DeviceId | CustomerSensorTotal |
---|---|
123 | 2 |
631 | 1 |