✅ Azure 串流分析 ✅ 網狀架構事件串流
傳回位於指定索引處的陣列專案。 此函式適用於剖析 JSON 和 AVRO 格式化輸入事件數據中的數位和巢狀物件。 如需更多範例,請參閱 剖析 JSON 和 AVRO 數據。 如果您需要傳回陣列中的所有巢狀專案,請改用 GetArrayElements 。
語法
GetArrayElement ( array_expression, bigint_expression )
論點
array_expression
這是要評估為來源陣列的數位運算式。 array_expression可以是 Array 類型的數據行或另一個函數調用的結果。
bigint_expression
這是要評估為陣列索引的 bigint 運算式。 元素陣列中的序數位置,從 0 開始。
傳回型別
傳回型別是由數位專案類型所決定,而且可以是任何 支援的型別。
範例
範例數據
[
{
"DeviceId" : "123",
"SensorReadings" :
{
"Temperature" : 80,
"Humidity" : 70,
"CustomSensor": [1,1,0]
}
},
{
"DeviceId" : "631",
"SensorReadings" :
{
"Temperature" : 81,
"Humidity" : 69,
"CustomSensor": [0,1,0]
}
}
]
上述範例數據集是兩筆記錄的陣列。 當做 JSON 檔案中的 本機輸入 使用時,Azure 串流分析會解譯最上層數位來產生數據列/事件。 不需要在查詢語法中考慮它。
在個別記錄層級,有兩個不同 類型的屬性。
DeviceId 的類型為 nvarchar(max), SensorReadings 類型 為 record (object)。
GetType 可用來視需要判斷類型。
SensorReadings 有三個屬性:兩個類型為 bigint: Temperature 和 Humidity,且 CustomSensor 的類型 為 array (of bigint)。 如果這個陣列比較複雜(本身包含記錄或陣列),可以使用 GetArrayElements (plural) 和 GetRecordPropertyValue 的組合。
查詢
此查詢會傳回記錄根目錄 ()、使用點表示法的巢狀字段 (DeviceId,Humidity),包括陣列 (CustomSensorTemperature),最後,透過 GetArrayElement 傳回該陣列的第一個和第二個專案(索引 0 和 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
會傳回以下輸出:
| DeviceId | 溫度 | 溼度 | CustomSensorArray | FirstCustomSensorValue | SecondCustomSensorValue |
|---|---|---|---|---|---|
| 631 | 81 | 69 | 0,1,0 | 0 | 1 |
| 123 | 80 | 70 | 1,1,0 | 1 | 1 |
使用 CROSS APPLY 展開陣列:
SELECT
i.DeviceId,
CustomerSensorValue.ArrayValue AS CustomerSensorValue
FROM input AS i
CROSS APPLY GetArrayElements(i.SensorReadings.CustomSensor) AS CustomerSensorValue
會傳回以下輸出:
| DeviceId | CustomerSensorValue |
|---|---|
| 631 | 0 |
| 631 | 1 |
| 631 | 0 |
| 123 | 0 |
| 123 | 1 |
| 123 | 1 |
您可以視需要輕鬆地匯總內容:
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 |