

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
<a name="iot-sql-set"></a>

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](iot-sql-data-types.md) [Operatoren](iot-sql-operators.md)[Funktionen](iot-sql-functions.md),[Literale](iot-sql-literals.md),[Case-Anweisungen](iot-sql-case.md),[JSON-Erweiterungen](iot-sql-json.md),, [Variablen](#iot-sql-set-usage) und[Verschachtelte Objektabfragen](iot-sql-nested-queries.md).

## Syntax der SET-Klau
<a name="iot-sql-set-syntax"></a>

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
<a name="iot-sql-set-usage"></a>

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 fehlgeschlagen
+ 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
<a name="iot-sql-set-examples"></a>

**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](iot-sql-json.md) 

**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](binary-payloads.md) 

## Grenzen der SET-Klausel
<a name="iot-sql-set-limits"></a>

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)