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