GetArrayElement (Azure Stream Analytics)
Belirtilen dizindeki dizi öğesini döndürür. Bu işlev, JSON ve AVRO biçimli giriş olayı verilerinde dizileri ve iç içe nesneleri ayrıştırmada kullanışlıdır. Daha fazla örnek için bkz. JSON ve AVRO verilerini ayrıştırma. Dizideki tüm iç içe öğeleri döndürmeniz gerekiyorsa, bunun yerine GetArrayElements kullanın.
Söz dizimi
GetArrayElement ( array_expression, bigint_expression )
Bağımsız değişkenler
array_expression
Bir kaynak dizi olarak değerlendirilecek dizi ifadesidir. array_expression Dizi türünde bir sütun veya başka bir işlev çağrısının sonucu olabilir.
bigint_expression
Dizi dizini olarak değerlendirilecek bigint ifadesidir. 0'dan başlayarak öğe dizisindeki sıralı konum.
Dönüş Türleri
Dönüş türü, dizi öğesi türü tarafından belirlenir ve desteklenen türlerden herhangi biri olabilir.
Örnekler
Örnek veriler
[
{
"DeviceId" : "123",
"SensorReadings" :
{
"Temperature" : 80,
"Humidity" : 70,
"CustomSensor": [1,1,0]
}
},
{
"DeviceId" : "631",
"SensorReadings" :
{
"Temperature" : 81,
"Humidity" : 69,
"CustomSensor": [0,1,0]
}
}
]
Yukarıdaki örnek veri kümesi iki kayıt dizisidir. Bir JSON dosyasında yerel giriş olarak kullanıldığında, üst düzey dizi Azure Stream Analytics tarafından satır/olay oluşturma için yorumlanır. Sorgu söz diziminde bunu dikkate almanız gerekmez.
Tek kayıt düzeyinde, farklı türlerde iki özellik vardır.
DeviceId
nvarchar(max) türünde, SensorReadings
kayıt türündedir (nesne).
GetType , gerektiğinde türü belirlemek için kullanılabilir.
SensorReadings
üç özelliğe sahiptir: ikisi bigint türündedir: Temperature
ve Humidity
ve CustomSensor
türü dizisidir ( bigint). Bu dizi daha karmaşıksa (kayıtları veya dizileri içeren kendisi), GetArrayElements (çoğul) ve GetRecordPropertyValue birleşimi kullanılabilir.
Sorgular
Bu sorgu, bir diziCustomSensor
()DeviceId
ve son olarak GetArrayElement aracılığıyla bu dizinin birinci ve ikinci öğeleri (dizin 0 ve 1) dahil olmak üzere nokta gösterimini (Temperature
,Humidity
) kullanarak iç içe yerleştirilmiş kayıtların () kökündeki alanları döndürür:
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
Aşağıdaki çıkışı döndürür:
DeviceId | Sıcaklık | Nem oranı | CustomSensorArray | FirstCustomSensorValue | SecondCustomSensorValue |
---|---|---|---|---|---|
631 | 81 | 69 | 0,1,0 | 0 | 1 |
123 | 80 | 70 | 1,1,0 | 1 | 1 |
Diziyi açmak için CROSS APPLY kullanın:
SELECT
i.DeviceId,
CustomerSensorValue.ArrayValue AS CustomerSensorValue
FROM input AS i
CROSS APPLY GetArrayElements(i.SensorReadings.CustomSensor) AS CustomerSensorValue
Aşağıdaki çıkışı döndürür:
DeviceId | CustomerSensorValue |
---|---|
631 | 0 |
631 | 1 |
631 | 0 |
123 | 0 |
123 | 1 |
123 | 1 |
Buradan, gerekirse içeriği kolayca toplayabilirsiniz:
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 |