Cláusula SET - AWS IoT Core

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cláusula SET

Utilice la cláusula SET para definir las variables que almacenan los resultados de las expresiones. Puede reutilizar estas variables en las cláusulas SELECT y WHERE y en las plantillas de sustitución. Esto le ayuda a evitar la duplicación de expresiones complejas y a reducir el número de llamadas a funciones en su sentencia SQL.

La cláusula SET admiteTipos de datos,Operadores,Funciones,Literales, Instrucciones caseExtensiones JSON, Variables yConsultas de objetos anidados.

Sintaxis de la cláusula SET

La cláusula SET debe aparecer antes que la cláusula SELECT en la sentencia SQL. Utilice la siguiente sintaxis:

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

Reglas de sintaxis:

  • Comience los nombres de las variables con @

  • Los nombres de las variables pueden contener letras, números y guiones bajos

  • Los nombres de las variables pueden tener una longitud máxima de 64 caracteres

  • Se pueden establecer varias variables en una sola cláusula SET, separadas por comas

  • Cada variable solo se puede asignar una vez (las variables son inmutables)

  • La palabra clave SET solo se puede usar una vez por sentencia SQL

Uso de variables

Después de definir las variables, puede usarlas en:

  • cláusulas SELECT

  • cláusulas WHERE

  • Otras asignaciones de variables SET

  • Plantillas de sustitución de acciones

  • Plantillas de sustitución de acciones de error

  • Consultas SELECT anidadas

  • Parámetros de función (algunos parámetros, como los parámetros de RoLearn y los parámetros que cambian el modo de una función de forma similar, transform("enrichArray", attributes, values) no admiten variables)

Se hace referencia a las variables con la misma @variable_name sintaxis utilizada en la cláusula SET. También puede usar la sintaxis de la extensión JSON para acceder a las propiedades de las variables que contienen objetos, como@variable_name.property.

Ejemplos de cláusulas SET

Uso básico de variables

El siguiente ejemplo muestra una carga útil publicada sobre el tema: device/data {"temp_fahrenheit": 75, "humidity": 60}

Instrucción SQL:

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

Carga útil saliente: {"celsius": 23.89, "humidity": 60}

Accede a los miembros en objetos JSON incrustados

En el siguiente ejemplo, se muestra una carga útil publicada sobre un tema: device/data {"device1": {"deviceId":"weather_sensor", "deviceData": {"sensors": {"temp_fahrenheit": 75, "humidity": 60}, "location": [47.606,-122.332]}}}

Instrucción 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'

Carga útil saliente: {"temp_fahrenheit":75,"humidity":60,"deviceId":"weather_sensor"}

para obtener más información sobre cómo trabajar con extensiones JSON, consulte Extensiones JSON

Evitar la duplicación de llamadas a funciones

Las variables SET ayudan a evitar la duplicación de operaciones de decodificación complejas:

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

Sin las variables SET, tendría que repetir la función de decodificación tres veces, lo que supera los límites de llamadas a la función.

Variables múltiples

Puede definir varias variables en una sola cláusula SET separándolas con comas:

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

Uso de variables en plantillas de sustitución

Las variables también se pueden utilizar en las plantillas de sustitución de acciones, lo que permite reutilizar los valores calculados tanto en las acciones de la sentencia SQL como en las de las reglas.

Instrucción SQL:

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

Configuración de acciones:

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

En este ejemplo, la variable SET @temp_celsius se utiliza en una plantilla de sustitución para construir el campo clave de la acción de S3.

Uso de cargas que no son de JSON

Las variables SET no admiten directamente cargas útiles que no sean de JSON, por lo que la carga útil debe codificarse o decodificarse primero:

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

para obtener más información sobre cómo trabajar con cargas útiles que no son de JSON, consulte Uso de las cargas binarias

LÍMITES DE CLÁUSULAS SET

Los siguientes límites se aplican a las variables SET:

  • Máximo de 10 variables únicas por sentencia SQL

  • Tamaño máximo de valor variable de 128 KiB (cadena JSON UTF-8 minificada)

  • Tamaño máximo del valor total de 128 KiB para todas las variables

  • Los nombres de las variables están limitados a 64 caracteres

  • Las variables pueden aceptar cargas útiles de JSON directamente tal cual (las cargas que no son de JSON deben codificarse o decodificarse primero)