Delen via


GetArrayElement

✅ Azure Stream Analytics ✅ Fabric Eventstream

Retourneert het matrixelement op de opgegeven index. Deze functie is handig voor het parseren van matrices en geneste objecten in JSON- en AVRO-indeling voor 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

Moet de matrixexpressie worden geëvalueerd als een bronmatrix. array_expression kan een kolom van het type Matrix of het resultaat van een andere functie-aanroep zijn.

bigint_expression

Wordt de bigint-expressie geëvalueerd als matrixindex. De rangtelpositie in de matrix met 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 bovenstaande voorbeeldgegevensset 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. Er hoeft geen rekening mee te worden gehouden in de querysyntaxis.

Op recordniveau 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.

Opvragen

Deze query retourneert velden in de hoofdmap van de record (DeviceId), geneste velden met behulp van de punt notatie (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 eenvoudig aggregeren indien nodig:

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