GetArrayElement (Azure Stream Analytics)
Retourneert het matrixelement op de opgegeven index. Deze functie is handig voor het parseren van matrices en geneste objecten in JSON- en AVRO-geformatteerde invoergebeurtenisgegevens. Zie JSON- en AVRO-gegevens parseren voor meer voorbeelden. Als u alle geneste elementen in een matrix wilt retourneren, gebruikt u in plaats daarvan GetArrayElements .
Syntaxis
GetArrayElement ( array_expression, bigint_expression )
Argumenten
array_expression
Is de matrixexpressie die moet worden geëvalueerd als een bronmatrix. array_expression kan een kolom zijn van het type Matrix of het resultaat van een andere functieaanroep.
bigint_expression
Is de bigint-expressie die moet worden geëvalueerd als matrixindex. De rangtelpositie in de matrix van elementen, beginnend bij 0.
Retourtypen
Het retourtype wordt bepaald door het type matrixelement en kan een van de ondersteunde typen zijn.
Voorbeelden
Voorbeeldgegevens
[
{
"DeviceId" : "123",
"SensorReadings" :
{
"Temperature" : 80,
"Humidity" : 70,
"CustomSensor": [1,1,0]
}
},
{
"DeviceId" : "631",
"SensorReadings" :
{
"Temperature" : 81,
"Humidity" : 69,
"CustomSensor": [0,1,0]
}
}
]
De voorbeeldgegevensset hierboven is een matrix van twee records. Wanneer deze wordt gebruikt als lokale invoer in een JSON-bestand, wordt de matrix op het hoogste niveau geïnterpreteerd voor het genereren van rijen/gebeurtenissen door Azure Stream Analytics. Het is niet nodig om hiermee rekening te houden in de querysyntaxis.
Op het niveau van de afzonderlijke records zijn er twee eigenschappen met verschillende typen.
DeviceId
is van het type nvarchar(max), SensorReadings
is van het type record (object).
GetType kan worden gebruikt om het type te bepalen wanneer dat nodig is.
SensorReadings
heeft drie eigenschappen: twee zijn van het type bigint: Temperature
en Humidity
, en CustomSensor
is van het type matrix (van bigint). Als deze matrix complexer was (zelf met records of matrices), kan een combinatie van GetArrayElements (meervoud) en GetRecordPropertyValue worden gebruikt.
Query's
Deze query retourneert velden in de hoofdmap van de record (DeviceId
), geneste velden met de puntnotatie (Temperature
,Humidity
), inclusief een matrix (CustomSensor
) en ten slotte de eerste en tweede elementen van die matrix via GetArrayElement (index 0 en 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
Retourneert de volgende uitvoer:
DeviceId | Temperatuur | Vochtigheid | CustomSensorArray | FirstCustomSensorValue | SecondCustomSensorValue |
---|---|---|---|---|---|
631 | 81 | 69 | 0,1,0 | 0 | 1 |
123 | 80 | 70 | 1,1,0 | 1 | 1 |
Gebruik CROSS APPLY om de matrix uit te vouwen:
SELECT
i.DeviceId,
CustomerSensorValue.ArrayValue AS CustomerSensorValue
FROM input AS i
CROSS APPLY GetArrayElements(i.SensorReadings.CustomSensor) AS CustomerSensorValue
Retourneert de volgende uitvoer:
DeviceId | CustomerSensorValue |
---|---|
631 | 0 |
631 | 1 |
631 | 0 |
123 | 0 |
123 | 1 |
123 | 1 |
Van daaruit kunt u de inhoud zo nodig eenvoudig samenvoegen:
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 |