SET-Klausel - AWS IoT Core

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)