Azure 串流分析 (GetArrayElement)
傳回位於指定索引處的陣列專案。 此函式適用于剖析 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 (物件) 。
GetType 可用來在必要時判斷類型。
SensorReadings
有三個屬性:兩個類型為Bigint: Temperature
和 Humidity
,而 CustomSensor
是Bigint) 的類型陣列 (。 如果這個陣列本身包含記錄或陣列) 更複雜的 (,可以使用 GetArrayElements (複數) 和 GetRecordPropertyValue 的組合。
查詢
此查詢會傳回記錄根目錄的欄位 (DeviceId
) 、使用 點標記法 的巢狀欄位 (Temperature
、 Humidity
) ,包括 陣列 (CustomSensor
) ,最後透過 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 |