Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
SET-Klausel
Verwenden Sie die SET-Klausel, um Variablen zu definieren, die Ausdrucksergebnisse speichern. Sie können diese Variablen in SELECT- und WHERE-Klauseln sowie in Ersatzvorlagen wiederverwenden. Auf diese Weise können Sie das Duplizieren komplexer Ausdrücke vermeiden und die Anzahl der Funktionsaufrufen in Ihrer SQL-Anweisung reduzieren.
Die SET-Klausel unterstützt Datentypen OperatorenFunktionen,Literale,Case-Anweisungen,JSON-Erweiterungen,, Variablen undVerschachtelte Objektabfragen.
Syntax der SET-Klau
Die SET-Klausel muss in Ihrer SQL-Anweisung vor der SELECT-Klausel stehen. Verwenden Sie die folgende Syntax:
SET @variable_name = expression [, @variable_name2 = expression2]
Syntaxregeln:
Beginnen Sie Variablennamen mit
@Variablennamen können Buchstaben, Zahlen und Unterstriche enthalten
Variablennamen können bis zu 64 Zeichen lang sein
In einer einzigen SET-Klausel können mehrere Variablen, getrennt durch Kommas, festgelegt werden
Jede Variable kann nur einmal zugewiesen werden (Variablen sind unveränderlich)
Das SET-Schlüsselwort kann nur einmal pro SQL-Anweisung verwendet werden
Verwenden von Variablen
Nachdem Sie Variablen definiert haben, können Sie sie verwenden in:
SELECT-Klauseln
WHERE-Klauseln
Andere SET-Variablenzuweisungen
Vorlagen für die Ersetzung von Aktionen
Vorlagen für die Ersetzung von Aktionen sind fehlerhaft
Verschachtelte SELECT-Abfragen
Funktionsparameter (bestimmte Parameter wie Rolearn-Parameter und Parameter, die den Modus einer Funktion wechseln, unterstützen ähnlich wie
transform("enrichArray", attributes, values)keine Variablen)
Variablen werden mit derselben @variable_name Syntax referenziert, die in der SET-Klausel verwendet wird. Sie können auch die JSON-Erweiterungssyntax verwenden, um auf Eigenschaften von Variablen zuzugreifen, die Objekte enthalten, wie @variable_name.property z.
Beispiele für SET-Klausel
Grundlegende Verwendung von Variablen
Das folgende Beispiel zeigt eine Payload, die zum Thema device/data veröffentlicht wurde: {"temp_fahrenheit": 75, "humidity": 60}
SQL-Anweisung:
SET @temp_celsius = (temp_fahrenheit - 32) * 5 / 9 SELECT @temp_celsius AS celsius, humidity FROM 'device/data'
Ausgehende Payload: {"celsius": 23.89, "humidity": 60}
Greifen Sie auf Mitglieder in eingebetteten JSON-Objekten zu
Das folgende Beispiel zeigt eine Payload, die zum Thema device/data veröffentlicht wurde: {"device1": {"deviceId":"weather_sensor", "deviceData": {"sensors": {"temp_fahrenheit": 75, "humidity": 60}, "location": [47.606,-122.332]}}}
SQL-Anweisung:
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'
Ausgehende Payload: {"temp_fahrenheit":75,"humidity":60,"deviceId":"weather_sensor"}
Weitere Informationen zur Arbeit mit JSON-Erweiterungen finden Sie unter JSON-Erweiterungen
Vermeidung doppelter Funktionsaufrufen
SET-Variablen tragen dazu bei, das Duplizieren komplexer Dekodierungsoperationen zu vermeiden:
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
Ohne SET-Variablen müssten Sie die Dekodierungsfunktion dreimal wiederholen, was die Grenzwerte für Funktionsaufrufe überschreitet.
Mehrere Variablen
Sie können mehrere Variablen in einer einzigen SET-Klausel definieren, indem Sie sie durch Kommas trennen:
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
Verwenden von Variablen in Ersatzvorlagen
Variablen können auch in Vorlagen zur Aktionsersetzung verwendet werden, sodass Sie berechnete Werte sowohl in der SQL-Anweisung als auch in den Regelaktionen wiederverwenden können.
SQL-Anweisung:
SET @temp_celsius = (temp_fahrenheit - 32) * 5 / 9 SELECT @temp_celsius AS celsius, humidity FROM 'device/data'
Aktionskonfiguration:
{ "s3": { "roleArn": "arn:aws:iam::123456789012:role/testRuleRole", "bucketName": "bucket", "key": "temperature-data/${device_id}/temp-${@temp_celsius}C.json" } }
In diesem Beispiel @temp_celsius wird die SET-Variable in einer Ersatzvorlage verwendet, um das Schlüsselfeld der S3-Aktion zu erstellen.
Nutzung von Nicht-JSON-Nutzdaten
SET-Variablen unterstützen Nicht-JSON-Nutzlasten nicht direkt, daher muss die Nutzlast zuerst codiert oder dekodiert werden:
SET @encoded_payload = encode(*, 'base64') SELECT @encoded_payload AS raw_data FROM 'device/binary'
Weitere Informationen zur Arbeit mit Nicht-JSON-Payloads finden Sie unter Arbeiten mit binären Nutzlasten
Grenzen der SET-Klausel
Die folgenden Grenzwerte gelten für SET-Variablen:
Maximal 10 eindeutige Variablen pro SQL-Anweisung
Maximale Variablenwertgröße von 128 KiB (minimierter UTF-8-JSON-String)
Maximale Gesamtwertgröße von 128 KiB für alle Variablen
Variablennamen sind auf 64 Zeichen begrenzt
Variablen können JSON-Nutzlasten direkt so akzeptieren, wie sie sind (Nicht-JSON-Payloads müssen zuerst codiert/dekodiert werden)