Clausola SET - AWS IoT Core

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Clausola SET

Utilizzate la clausola SET per definire le variabili che memorizzano i risultati delle espressioni. È possibile riutilizzare queste variabili nelle clausole SELECT e WHERE e nei modelli sostitutivi. Ciò consente di evitare la duplicazione di espressioni complesse e di ridurre il numero di chiamate di funzione nell'istruzione SQL.

La clausola SET supportaTipi di dati,,Operatori,Funzioni, Valori letterali Istruzioni caseEstensioni JSON, Variabili e. Query di oggetti nidificati

Sintassi della clausola SET

La clausola SET deve comparire prima della clausola SELECT nell'istruzione SQL. Utilizzare la seguente sintassi:

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

Regole di sintassi:

  • Inizia i nomi delle variabili con @

  • I nomi delle variabili possono contenere lettere, numeri e caratteri di sottolineatura

  • I nomi delle variabili possono contenere fino a 64 caratteri

  • È possibile impostare più variabili in una singola clausola SET, separate da virgole

  • Ogni variabile può essere assegnata una sola volta (le variabili sono immutabili)

  • La parola chiave SET può essere utilizzata solo una volta per istruzione SQL

Utilizzo di variabili

Dopo aver definito le variabili, puoi usarle in:

  • Clausole SELECT

  • Clausole WHERE

  • Altre assegnazioni di variabili SET

  • Modelli di sostituzione delle azioni

  • Modelli di sostituzione delle azioni di errore

  • Interrogazioni SELECT annidate

  • Parametri delle funzioni (alcuni parametri come i parametri ROLearn e i parametri che modificano la modalità di una funzione in modo simile a transform("enrichArray", attributes, values) non supportare le variabili)

Le variabili vengono referenziate utilizzando la stessa @variable_name sintassi utilizzata nella clausola SET. È inoltre possibile utilizzare la sintassi dell'estensione JSON per accedere alle proprietà delle variabili che contengono oggetti, ad esempio. @variable_name.property

Esempi di clausole SET

Utilizzo delle variabili di base

L'esempio seguente mostra un payload pubblicato sull'argomentodevice/data: {"temp_fahrenheit": 75, "humidity": 60}

Istruzione SQL:

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

Payload in uscita: {"celsius": 23.89, "humidity": 60}

Accedi ai membri negli oggetti JSON incorporati

L'esempio seguente mostra un payload pubblicato sull'argomento: device/data {"device1": {"deviceId":"weather_sensor", "deviceData": {"sensors": {"temp_fahrenheit": 75, "humidity": 60}, "location": [47.606,-122.332]}}}

Istruzione 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'

Payload in uscita: {"temp_fahrenheit":75,"humidity":60,"deviceId":"weather_sensor"}

per ulteriori informazioni su come lavorare con le estensioni JSON, consulta Estensioni JSON

Evitare chiamate di funzione duplicate

Le variabili SET aiutano a evitare la duplicazione di operazioni di decodifica complesse:

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

Senza le variabili SET, sarebbe necessario ripetere la funzione di decodifica tre volte, il che supera i limiti di chiamata alla funzione.

Variabili multiple

È possibile definire più variabili in una singola clausola SET separandole con virgole:

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

Utilizzo di variabili nei modelli sostitutivi

Le variabili possono essere utilizzate anche nei modelli di sostituzione delle azioni, che consentono di riutilizzare i valori calcolati sia nell'istruzione SQL che nelle azioni delle regole.

Istruzione SQL:

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

Configurazione dell'azione:

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

In questo esempio, la variabile SET @temp_celsius viene utilizzata in un modello sostitutivo per costruire il campo chiave dell'azione S3.

Utilizzo di payload non JSON

Le variabili SET non supportano direttamente payload non JSON, quindi il payload deve essere prima codificato o decodificato:

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

per ulteriori informazioni su come lavorare con payload non JSON, consulta Utilizzo di payload binari

Limiti della clausola SET

I seguenti limiti si applicano alle variabili SET:

  • Massimo 10 variabili univoche per istruzione SQL

  • Dimensione massima del valore variabile di 128 KiB (stringa JSON UTF-8 minimizzata)

  • Dimensione massima del valore totale di 128 KB per tutte le variabili

  • Nomi di variabili limitati a 64 caratteri

  • Le variabili possono accettare i payload JSON direttamente così come sono (i payload non JSON devono prima essere codificati/decodificati)