Bagikan melalui


GetArrayElement

✅ Azure Stream Analytics ✅ Fabric Eventstream

Mengembalikan elemen array pada indeks yang ditentukan. Fungsi ini berguna untuk mengurai array dan objek berlapis dalam data peristiwa input berformat JSON dan AVRO. Untuk contoh selengkapnya, lihat Mengurai data JSON dan AVRO. Jika Anda perlu mengembalikan semua elemen berlapis dalam array, gunakan GetArrayElements sebagai gantinya.

Sintaksis

GetArrayElement ( array_expression, bigint_expression )  

Argumen

array_expression

Adalah ekspresi array yang akan dievaluasi sebagai array sumber. array_expression bisa berupa kolom jenis Array atau hasil panggilan fungsi lain.

bigint_expression

Adalah ekspresi bigint yang akan dievaluasi sebagai indeks array. Posisi ordinal dalam array elemen, mulai dari 0.

Jenis Kembalian

Jenis pengembalian ditentukan oleh jenis elemen array dan dapat berupa salah satu jenis yang didukung.

Contoh

Data contoh

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

Himpunan data sampel di atas adalah array dari dua rekaman. Saat digunakan sebagai input lokal dalam file JSON, array tingkat atas ditafsirkan untuk pembuatan baris/peristiwa oleh Azure Stream Analytics. Tidak perlu mempertimbangkannya dalam sintaks kueri.

Pada tingkat catatan individual, ada dua properti dengan jenis yang berbeda. DeviceId berjenis nvarchar(max), SensorReadings adalah jenis rekaman (objek). GetType dapat digunakan untuk menentukan jenis bila perlu.

SensorReadings memiliki tiga properti: dua adalah jenis bigint: Temperature dan Humidity, dan CustomSensor berjenis array (dari bigint). Jika array ini lebih kompleks (sendiri berisi rekaman atau array), kombinasi GetArrayElements (plural) dan GetRecordPropertyValue dapat digunakan.

Pertanyaan

Kueri ini mengembalikan bidang di akar rekaman (DeviceId), bidang berlapis menggunakan notasi titik (Temperature,Humidity), termasuk array (CustomSensor), dan akhirnya, elemen pertama dan kedua dari array tersebut melalui GetArrayElement (indeks 0 dan 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

Mengembalikan output berikut:

DeviceId Suhu Kelembaban CustomSensorArray FirstCustomSensorValue SecondCustomSensorValue
631 81 (delapan puluh satu) 69 0,1,0 0 1
123 80 70 1,1,0 1 1

Gunakan CROSS APPLY untuk membuka array:

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

Mengembalikan output berikut:

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

Dari sana, Anda dapat dengan mudah mengagregasi konten jika perlu:

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

Lihat juga