As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Cláusula SET
Use a cláusula SET para definir variáveis que armazenam resultados de expressões. Você pode reutilizar essas variáveis nas cláusulas SELECT e WHERE e em modelos de substituição. Isso ajuda a evitar a duplicação de expressões complexas e a reduzir o número de chamadas de função em sua instrução SQL.
A cláusula SET suporta Tipos de dadosOperadores,Funções,Literais,Declarações de caso,,Extensões JSON, Variáveis e. Consultas de objeto aninhado
Sintaxe da cláusula SET
A cláusula SET deve aparecer antes da cláusula SELECT em sua instrução SQL. Use a seguinte sintaxe:
SET @variable_name = expression [, @variable_name2 = expression2]
Regras de sintaxe:
Inicie os nomes das variáveis com
@Os nomes das variáveis podem conter letras, números e sublinhados
Os nomes das variáveis podem ter até 64 caracteres
Várias variáveis podem ser definidas em uma única cláusula SET, separadas por vírgulas
Cada variável só pode ser atribuída uma vez (as variáveis são imutáveis)
A palavra-chave SET só pode ser usada uma vez por instrução SQL
Usando variáveis
Depois de definir as variáveis, você pode usá-las em:
Cláusulas SELECT
Cláusulas WHERE
Outras atribuições de variáveis SET
Modelos de substituição de ações
Modelos de substituição de ações de erro
Consultas SELECT aninhadas
Parâmetros da função (certos parâmetros, como parâmetros do RoLearn e parâmetros que alternam o modo de uma função semelhante a
transform("enrichArray", attributes, values)que não suportam variáveis)
As variáveis são referenciadas usando a mesma @variable_name sintaxe usada na cláusula SET. Você também pode usar a sintaxe da extensão JSON para acessar propriedades de variáveis que contêm objetos, como. @variable_name.property
Exemplos da cláusula SET
Uso básico de variáveis
O exemplo a seguir mostra uma carga publicada no tópicodevice/data: {"temp_fahrenheit": 75, "humidity": 60}
Declaração do SQL:
SET @temp_celsius = (temp_fahrenheit - 32) * 5 / 9 SELECT @temp_celsius AS celsius, humidity FROM 'device/data'
Carga útil de saída: {"celsius": 23.89, "humidity": 60}
Acesse membros em objetos JSON incorporados
O exemplo a seguir mostra uma carga publicada no tópicodevice/data: {"device1": {"deviceId":"weather_sensor", "deviceData": {"sensors": {"temp_fahrenheit": 75, "humidity": 60}, "location": [47.606,-122.332]}}}
Declaração do 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 de saída: {"temp_fahrenheit":75,"humidity":60,"deviceId":"weather_sensor"}
para obter mais informações sobre como trabalhar com extensões JSON, consulte Extensões JSON
Evitando chamadas de função duplicadas
As variáveis SET ajudam a evitar a duplicação de operações complexas de decodificação:
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
Sem as variáveis SET, você precisaria repetir a função de decodificação três vezes, o que excede os limites de chamada da função.
Várias variáveis
Você pode definir várias variáveis em uma única cláusula SET separando-as com vírgulas:
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
Usando variáveis em modelos de substituição
As variáveis também podem ser usadas em modelos de substituição de ações, permitindo que você reutilize valores computados nas ações da instrução SQL e da regra.
Declaração do SQL:
SET @temp_celsius = (temp_fahrenheit - 32) * 5 / 9 SELECT @temp_celsius AS celsius, humidity FROM 'device/data'
Configuração da ação:
{ "s3": { "roleArn": "arn:aws:iam::123456789012:role/testRuleRole", "bucketName": "bucket", "key": "temperature-data/${device_id}/temp-${@temp_celsius}C.json" } }
Neste exemplo, a variável SET @temp_celsius é usada em um modelo de substituição para construir o campo-chave da ação do S3.
Uso de carga útil não JSON
As variáveis SET não oferecem suporte direto a cargas não JSON, portanto, a carga deve ser codificada ou decodificada primeiro:
SET @encoded_payload = encode(*, 'base64') SELECT @encoded_payload AS raw_data FROM 'device/binary'
para obter mais informações sobre como trabalhar com cargas não JSON, consulte Como trabalhar com cargas úteis binárias
Limites da cláusula SET
Os limites a seguir se aplicam às variáveis SET:
Máximo de 10 variáveis exclusivas por instrução SQL
Tamanho máximo do valor variável de 128 KiB (string JSON UTF-8 minificada)
Tamanho máximo do valor total de 128 KiB para todas as variáveis
Nomes de variáveis limitados a 64 caracteres
As variáveis podem aceitar cargas JSON diretamente como estão (cargas não JSON devem primeiro ser codificadas/decodificadas)