次の方法で共有


配列要素を取得

✅ Azure Stream Analytics ✅ Fabric Eventstream

指定したインデックス位置にある配列要素を返します。 この関数は、JSON および AVRO 形式の入力イベント データで配列と入れ子になったオブジェクトを解析する場合に便利です。 その他の例については、「 JSON と AVRO データの解析」を参照してください。 配列内のすべての入れ子になった要素を返す必要がある場合は、代わりに GetArrayElements を使用します。

構文

GetArrayElement ( array_expression, bigint_expression )  

論争

array_expression

ソース配列として評価される配列式です。 array_expression配列型の列または別の関数呼び出しの結果を指定できます。

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]
    }
}
]

上記のサンプル データセットは、2 つのレコードの配列です。 JSON ファイルで ローカル入力 として使用する場合、最上位の配列は、Azure Stream Analytics による行/イベントの生成に対して解釈されます。 クエリ構文で考慮する必要はありません。

個々のレコード レベルには、型が異なる 2 つのプロパティ がありますDeviceIdnvarchar(max)型、 SensorReadingsrecord 型 (object) です。 必要に応じて、GetType を使用して型を決定できます。

SensorReadings には 3 つのプロパティがあります。2 つは bigint 型です。 TemperatureHumidityCustomSensor配列 型 ( bigint) です。 この配列がより複雑な場合 (それ自体はレコードまたは配列を含む)、 GetArrayElements (plural) と GetRecordPropertyValue の組み合わせを使用できます。

クエリ

このクエリは、レコードのルートにあるフィールド (DeviceId)、ドット 表記 (Temperature,Humidity) を使用して入れ子になったフィールド ( 配列 (CustomSensor) を含む)、最後に GetArrayElement (インデックス 0 と 1) を使用してその配列の最初と 2 番目の要素を返します。

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

次の出力が返されます。

デバイスID 気温 湿度 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

次の出力が返されます。

デバイスID 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)
デバイスID CustomerSensorTotal
123 2
631 1

こちらも参照ください