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)