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에 의해 행/이벤트의 생성에 대해 해석됩니다. 쿼리 구문에서 고려할 필요가 없습니다.
개별 레코드 수준에는 서로 다른 형식의 두 가지 속성이 있습니다.
DeviceId
은 nvarchar(max)형식이고, SensorReadings
는 record (object) 형식입니다.
GetType 을 사용하여 필요한 경우 형식을 확인할 수 있습니다.
SensorReadings
에는 세 가지 속성이 있습니다. 두 가지는 bigintTemperature
형식입니다. 및 Humidity
는 CustomSensor
형식 배열(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 |