SET 절 - AWS IoT Core

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

SET 절

SET 절을 사용하여 표현식 결과를 저장하는 변수를 정의합니다. SELECT 및 WHERE 절과 대체 템플릿에서 이러한 변수를 재사용할 수 있습니다. 이렇게 하면 복잡한 표현식을 복제하지 않고 SQL 문에서 함수 호출 수를 줄일 수 있습니다.

SET 절은 데이터 타입, , 연산자, 함수리터럴, Case 문, JSON 확장, 변수 및를 지원합니다중첩된 객체 쿼리.

SET 절 구문

SET 절은 SQL 문의 SELECT 절 앞에 나타나야 합니다. 다음 구문을 사용합니다.

SET @variable_name = expression [, @variable_name2 = expression2]

구문 규칙:

  • 를 사용하여 변수 이름 시작 @

  • 변수 이름에는 문자, 숫자 및 밑줄이 포함될 수 있습니다.

  • 변수 이름은 최대 64자까지 가능합니다.

  • 쉼표로 구분된 단일 SET 절에서 여러 변수를 설정할 수 있습니다.

  • 각 변수는 한 번만 할당할 수 있습니다(변수는 변경할 수 없음).

  • SET 키워드는 SQL 문당 한 번만 사용할 수 있습니다.

변수 사용

변수를 정의한 후 다음에서 사용할 수 있습니다.

  • SELECT 절

  • WHERE 절

  • 기타 SET 변수 할당

  • 작업 대체 템플릿

  • 오류 작업 대체 템플릿

  • 중첩된 SELECT 쿼리

  • 함수 파라미터( roleArn 파라미터와 같은 특정 파라미터 및와 유사한 함수 모드를 전환하는 파라미터는 변수를 지원하지 transform("enrichArray", attributes, values) 않음)

변수는 @variable_name SET 절에 사용된 것과 동일한 구문을 사용하여 참조됩니다. JSON 확장 구문을 사용하여와 같이 객체가 포함된 변수의 속성에 액세스할 수도 있습니다@variable_name.property.

SET 절 예제

기본 변수 사용

다음 예제는 주제에 게시된 페이로드를 보여줍니다device/data. {"temp_fahrenheit": 75, "humidity": 60}

SQL 문

SET @temp_celsius = (temp_fahrenheit - 32) * 5 / 9 SELECT @temp_celsius AS celsius, humidity FROM 'device/data'

발신 페이로드: {"celsius": 23.89, "humidity": 60}

임베디드 JSON 객체의 멤버 액세스

다음 예제는 주제에 게시된 페이로드를 보여줍니다device/data. {"device1": {"deviceId":"weather_sensor", "deviceData": {"sensors": {"temp_fahrenheit": 75, "humidity": 60}, "location": [47.606,-122.332]}}}

SQL 문

SET @device_sensor_data = device1.deviceData.sensors SELECT @device_sensor_data.temp_fahrenheit AS temp_fahrenheit, @device_sensor_data.humidity as humidity, device1.deviceId as deviceId FROM 'device/data'

발신 페이로드: {"temp_fahrenheit":75,"humidity":60,"deviceId":"weather_sensor"}

JSON 확장을 사용하는 방법에 대한 자세한 내용은 섹션을 참조하세요. JSON 확장

중복 함수 호출 방지

SET 변수는 복잡한 디코딩 작업의 중복을 방지하는 데 도움이 됩니다.

SET @decoded_data = decode(encode(*, 'base64'), 'proto', 'schema', 'schema.desc', 'message.proto', 'Message') SELECT @decoded_data.sensor_id, @decoded_data.reading FROM 'device/protobuf' WHERE @decoded_data.reading > 100

SET 변수가 없으면 디코딩 함수를 세 번 반복해야 하며, 이는 함수 호출 제한을 초과합니다.

여러 변수

쉼표로 구분하여 단일 SET 절에서 여러 변수를 정의할 수 있습니다.

SET @user_data = get_user_properties(device_id), @threshold = 50 SELECT @user_data.name, temp_fahrenheit FROM 'sensors/+' WHERE temp_fahrenheit > @threshold AND @user_data.active = true

대체 템플릿에서 변수 사용

변수는 작업 대체 템플릿에서도 사용할 수 있으므로 SQL 문과 규칙 작업 모두에서 계산된 값을 재사용할 수 있습니다.

SQL 문

SET @temp_celsius = (temp_fahrenheit - 32) * 5 / 9 SELECT @temp_celsius AS celsius, humidity FROM 'device/data'

작업 구성:

{ "s3": { "roleArn": "arn:aws:iam::123456789012:role/testRuleRole", "bucketName": "bucket", "key": "temperature-data/${device_id}/temp-${@temp_celsius}C.json" } }

이 예제에서 SET 변수@temp_celsius는 대체 템플릿에서 S3 작업의 키 필드를 구성하는 데 사용됩니다.

비 JSON 페이로드 사용량

SET 변수는 비 JSON 페이로드를 직접 지원하지 않으므로 먼저 페이로드를 인코딩하거나 디코딩해야 합니다.

SET @encoded_payload = encode(*, 'base64') SELECT @encoded_payload AS raw_data FROM 'device/binary'

비 JSON 페이로드 작업 방법에 대한 자세한 내용은 섹션을 참조하세요. 이진 페이로드 작업

SET 절 제한

SET 변수에는 다음 제한이 적용됩니다.

  • SQL 문당 최대 10개의 고유 변수

  • 최대 변수 값 크기 128KiB(최소 UTF-8 JSON 문자열)

  • 모든 변수에 대해 128KiB의 최대 총 값 크기

  • 변수 이름은 64자로 제한됩니다.

  • 변수는 JSON 페이로드를 그대로 직접 수락할 수 있습니다(JSON이 아닌 페이로드를 먼저 인코딩/디코딩해야 함).