Delen via


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

Zie ook