Clause SET - AWS IoT Core

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Clause SET

Utilisez la clause SET pour définir les variables qui stockent les résultats des expressions. Vous pouvez réutiliser ces variables dans les clauses SELECT et WHERE, ainsi que dans les modèles de substitution. Cela vous permet d'éviter de dupliquer des expressions complexes et de réduire le nombre d'appels de fonction dans votre instruction SQL.

La clause SET prend en charge les variables Types de donnéesOpérateursFonctionsLittéraux,Instructions Case,Extensions JSON,,, etRequêtes d'objets imbriqués.

Syntaxe de la clause SET

La clause SET doit apparaître avant la clause SELECT dans votre instruction SQL. Utilisez la syntaxe suivante :

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

Règles de syntaxe :

  • Commencez les noms de variables par @

  • Les noms de variables peuvent contenir des lettres, des chiffres et des traits de soulignement

  • Les noms de variables peuvent comporter jusqu'à 64 caractères

  • Plusieurs variables peuvent être définies dans une seule clause SET, séparées par des virgules

  • Chaque variable ne peut être affectée qu'une seule fois (les variables sont immuables)

  • Le mot clé SET ne peut être utilisé qu'une seule fois par instruction SQL.

Utilisation de variables

Après avoir défini les variables, vous pouvez les utiliser dans :

  • CLAUSES SELECT

  • clauses WHERE

  • Autres assignations de variables SET

  • Modèles de substitution d'actions

  • Modèles de substitution d'actions en cas d'erreur

  • Requêtes SELECT imbriquées

  • Paramètres de fonction (certains paramètres tels que les paramètres ROLearn et les paramètres qui changent le mode d'une fonction de manière similaire à ceux qui transform("enrichArray", attributes, values) ne prennent pas en charge les variables)

Les variables sont référencées selon la même @variable_name syntaxe que celle utilisée dans la clause SET. Vous pouvez également utiliser la syntaxe d'extension JSON pour accéder aux propriétés des variables contenant des objets, telles que@variable_name.property.

Exemples de clauses SET

Utilisation des variables de base

L'exemple suivant montre une charge utile publiée sur le sujet device/data : {"temp_fahrenheit": 75, "humidity": 60}

Instruction SQL :

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

Charge utile sortante : {"celsius": 23.89, "humidity": 60}

Accès aux membres dans les objets JSON intégrés

L'exemple suivant montre une charge utile publiée sur le sujet device/data : {"device1": {"deviceId":"weather_sensor", "deviceData": {"sensors": {"temp_fahrenheit": 75, "humidity": 60}, "location": [47.606,-122.332]}}}

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

Charge utile sortante : {"temp_fahrenheit":75,"humidity":60,"deviceId":"weather_sensor"}

pour plus d'informations sur l'utilisation des extensions JSON, reportez-vous à Extensions JSON

Éviter les appels de fonction dupliqués

Les variables SET permettent d'éviter de dupliquer des opérations de décodage complexes :

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

Sans les variables SET, vous devrez répéter la fonction de décodage trois fois, ce qui dépasse les limites d'appels de fonction.

Variables multiples

Vous pouvez définir plusieurs variables dans une seule clause SET en les séparant par des virgules :

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

Utilisation de variables dans les modèles de substitution

Les variables peuvent également être utilisées dans les modèles de substitution d'actions, ce qui vous permet de réutiliser les valeurs calculées à la fois dans l'instruction SQL et dans les actions de règle.

Instruction SQL :

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

Configuration de l'action :

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

Dans cet exemple, la variable SET @temp_celsius est utilisée dans un modèle de substitution pour construire le champ clé de l'action S3.

Utilisation de charges utiles non JSON

Les variables SET ne prennent pas directement en charge les charges utiles non JSON. Par conséquent, la charge utile doit d'abord être codée ou décodée :

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

pour plus d'informations sur la façon de travailler avec des charges utiles non JSON, reportez-vous à Utilisation des charges utiles binaires

Limites de la clause SET

Les limites suivantes s'appliquent aux variables SET :

  • Maximum de 10 variables uniques par instruction SQL

  • Taille de valeur variable maximale de 128 KiB (chaîne UTF-8 JSON minifiée)

  • Valeur totale maximale de 128 KiB pour toutes les variables

  • Noms de variables limités à 64 caractères

  • Les variables peuvent accepter les charges utiles JSON directement telles quelles (les charges utiles non JSON doivent d'abord être encodées/décodées)