本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
SET 子句
使用 SET 子句來定義存放運算式結果的變數。您可以在 SELECT 和 WHERE 子句以及替代範本中重複使用這些變數。這可協助您避免重複複雜的表達式,並減少 SQL 陳述式中的函數呼叫次數。
SET 子句支援 資料類型、運算子、函數、文字、案例陳述式、JSON Extensions、變數和 巢狀物件查詢。
SET 子句語法
SET 子句必須出現在 SQL 陳述式中的 SELECT 子句前面。使用下列語法:
SET @variable_name = expression [, @variable_name2 = expression2]
語法規則:
使用 啟動變數名稱
@變數名稱可以包含字母、數字和底線
變數名稱長度最多可達 64 個字元
您可以在單一 SET 子句中設定多個變數,並以逗號分隔
每個變數只能指派一次 (變數不可變)
每個 SQL 陳述式只能使用一次 SET 關鍵字
使用變數
定義變數之後,您可以在以下位置使用它們:
SELECT 子句
WHERE 子句
其他 SET 變數指派
動作替換範本
錯誤動作替換範本
巢狀 SELECT 查詢
函數參數 (某些參數,例如 roleArn 參數,以及切換類似
transform("enrichArray", attributes, values)不支援變數之函數模式的參數)
變數會使用與 SET @variable_name 子句中使用的相同語法來參考。您也可以使用 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 Extensions
避免重複的函數呼叫
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 個唯一變數
最大變數值大小為 128 KiB (最小 UTF-8 JSON 字串)
所有變數的總值大小上限為 128 KiB
變數名稱限制為 64 個字元
變數可以直接接受 JSON 承載 (必須先編碼/解碼非 JSON 承載)