GetArrayElement (Azure Stream Analytics)

Returnerar matriselementet vid det angivna indexet. Den här funktionen är användbar för att parsa matriser och kapslade objekt i JSON- och AVRO-formaterade indatahändelsedata. Fler exempel finns i Parsa JSON- och AVRO-data. Om du behöver returnera alla kapslade element i en matris använder du GetArrayElements i stället.

Syntax

GetArrayElement ( array_expression, bigint_expression )  

Argument

array_expression

Är matrisuttrycket som ska utvärderas som en källmatris. array_expression kan vara en kolumn av typen Matris eller resultatet av ett annat funktionsanrop.

bigint_expression

Är bigint-uttrycket som ska utvärderas som matrisindex. Ordningstalet i matrisen med element, med början vid 0.

Returtyper

Returtypen bestäms av matriselementtypen och kan vara någon av de typer som stöds.

Exempel

Exempeldata

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

Exempeldatauppsättningen ovan är en matris med två poster. När den används som lokala indata i en JSON-fil tolkas matrisen på den översta nivån för generering av rader/händelser av Azure Stream Analytics. Du behöver inte ta hänsyn till det i frågesyntaxen.

På den enskilda postnivån finns det två egenskaper med olika typer. DeviceId är av typen nvarchar(max), SensorReadings är av typen post (objekt). GetType kan användas för att fastställa typen vid behov.

SensorReadings har tre egenskaper: två är av typen bigint: Temperature och Humidity, och CustomSensor är av typen matris (av bigint). Om den här matrisen var mer komplex (som i sig innehåller poster eller matriser) kan en kombination av GetArrayElements (plural) och GetRecordPropertyValue användas.

Frågor

Den här frågan returnerar fält i roten av posten (DeviceId), kapslade fält med punktnotationen (Temperature,Humidity), inklusive en matris (CustomSensor) och slutligen de första och andra elementen i matrisen via GetArrayElement (index 0 och 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

Returnerar följande utdata:

DeviceId Temperatur Luftfuktighet CustomSensorArray FirstCustomSensorValue SecondCustomSensorValue
631 81 69 0,1,0 0 1
123 80 70 1,1,0 1 1

Använd CROSS APPLY för att visa matrisen:

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

Returnerar följande utdata:

DeviceId CustomerSensorValue
631 0
631 1
631 0
123 0
123 1
123 1

Därifrån kan du enkelt aggregera innehållet om det behövs:

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

Se även