Cláusula SET - AWS IoT Core

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)