다음을 통해 공유


GetArrayElement(Azure Stream Analytics)

지정된 인덱스에서 배열 요소를 반환합니다. 이 함수는 JSON 및 AVRO 형식의 입력 이벤트 데이터에서 배열 및 중첩된 개체를 구문 분석하는 데 유용합니다. 자세한 예제는 JSON 및 AVRO 데이터 구문 분석을 참조하세요. 배열의 모든 중첩된 요소를 반환해야 하는 경우 대신 GetArrayElements를 사용합니다.

Syntax

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

위의 샘플 데이터 세트는 두 레코드의 배열입니다. JSON 파일에서 로컬 입력 으로 사용되는 경우 최상위 배열은 Azure Stream Analytics에 의해 행/이벤트의 생성에 대해 해석됩니다. 쿼리 구문에서 고려할 필요가 없습니다.

개별 레코드 수준에는 서로 다른 형식의 두 가지 속성이 있습니다. DeviceIdnvarchar(max)형식이고, SensorReadingsrecord (object) 형식입니다. GetType 을 사용하여 필요한 경우 형식을 확인할 수 있습니다.

SensorReadings에는 세 가지 속성이 있습니다. 두 가지는 bigintTemperature 형식입니다. 및 HumidityCustomSensor형식 배열(bigint)입니다. 이 배열이 더 복잡한 경우(레코드 또는 배열을 포함하는 자체) GetArrayElements (복수형) 및 GetRecordPropertyValue 의 조합을 사용할 수 있습니다.

쿼리

이 쿼리는 레코드의 루트(), 점 표기법(DeviceId,Humidity)을 사용하여 중첩된 필드(Temperature배열 포함) 및 마지막으로 GetArrayElement(CustomSensor인덱스 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

추가 정보