共用方式為


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有三個屬性:兩個類型為BigintTemperatureHumidity ,而 CustomSensorBigint) 的類型陣列 (。 如果這個陣列本身包含記錄或陣列) 更複雜的 (,可以使用 GetArrayElements (複數) 和 GetRecordPropertyValue 的組合。

查詢

此查詢會傳回記錄根目錄的欄位 (DeviceId) 、使用 點標記法 的巢狀欄位 (TemperatureHumidity) ,包括 陣列 (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

另請參閱