View a markdown version of this page

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 ayuda a evitar la duplicación de expresiones complejas y a reducir el número de llamadas a funciones en la sentencia SQL.

La cláusula SET admite las variables Tipos de datosOperadoresFunciones,Literales,Instrucciones case,Extensiones JSON,, 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 hasta 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

Tras 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 RolEearn y los parámetros que cambian el modo de una función de forma similar a, 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 puedes 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 un 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}

Acceda a los miembros en objetos JSON incrustados

El siguiente ejemplo 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, consulta Extensiones JSON

Evitar llamadas a funciones duplicadas

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 usar 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 la acción:

{ "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 usa en una plantilla de sustitución para construir el campo clave de la acción S3.

Non-JSON uso de carga útil

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

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, consulta Uso de las cargas binarias

Establezca los límites de las cláusulas

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

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

  • El tamaño máximo del valor de la variable es de 128 KB (cadena UTF-8 JSON minificada)

  • El tamaño máximo del valor total es de 128 KB para todas las variables

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

  • Las variables pueden aceptar cargas útiles JSON directamente tal como están (primero deben aceptarse cargas útiles que no sean JSON) encoded/decoded