共用方式為


GetArrayElement

✅ 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 有三個屬性:兩個類型為 bigintTemperatureHumidity,且 CustomSensor 的類型 為 array (of bigint)。 如果這個陣列比較複雜(本身包含記錄或陣列),可以使用 GetArrayElements (plural) 和 GetRecordPropertyValue 的組合。

查詢

此查詢會傳回記錄根目錄 ()、使用點表示法的巢狀字段 (DeviceIdHumidity),包括陣列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

另請參閱