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)