Todos os produtos
Search
Central de documentação

IoT Platform:Expressões SQL

Última atualização: Jun 26, 2026

Ao criar uma regra de encaminhamento de dados, escreva uma instrução SQL para analisar e processar os dados JSON reportados pelos dispositivos. Dados em formato binário são transmitidos diretamente sem análise. Este tópico descreve como escrever expressões SQL para regras de encaminhamento de dados.

Expressões SQL

Importante

Se o identificador de um modelo da Thing Specification Language começar com um número, não será possível usar uma expressão SQL para acessar esse modelo. A versão anterior do recurso de encaminhamento de dados não oferece suporte ao encaminhamento de dados de modelos da Thing Specification Language cujos identificadores começam com um número.

Use a nova versão do recurso de encaminhamento de dados para editar um script que acesse um modelo da Thing Specification Language cujo identificador comece com um número e encaminhe seus dados. Para obter mais informações, consulte Guia de scripts.

É possível mapear dados JSON para uma tabela virtual. Nesse mapeamento, uma chave corresponde a uma coluna da tabela e um valor corresponde ao valor dessa coluna. Isso permite o uso de SQL para processamento de dados. A figura a seguir mostra uma expressão SQL para uma regra de encaminhamento de dados.

SQL expression

A seguir, são apresentados exemplos de SQL para regras de encaminhamento de dados:

  • Exemplo de SQL para processar dados de um tópico personalizado.

    Um sensor ambiental coleta dados de temperatura, umidade e pressão atmosférica. O dispositivo reporta os seguintes dados ao tópico personalizado /a1hRrzD****/+/user/update:

    {
        "temperature":25.1,
        "humidity":65,
        "pressure":101.5,
        "location":"***,***"
    }

    Para acionar a regra quando a temperatura for superior a 38°C e filtrar as informações de nome do dispositivo, temperatura e localização, use a seguinte instrução SQL:

    SELECT temperature as t, deviceName() as deviceName, location 
    FROM "/a1hRrzD****/+/user/update" 
    WHERE temperature > 38
  • Exemplo de SQL para processar dados de tópicos de comunicação básica e tópicos de comunicação de modelos da Thing Specification Language. Quando dados desses tópicos são encaminhados ao mecanismo de regras, o mecanismo os analisa. Para obter mais informações sobre o formato dos dados após a análise, consulte Formatos de dados. O sensor define duas propriedades personalizadas: Current Humidity (identificador: CurrentHumidity, tipo de dados: float, intervalo de valores: 0 a 100) e Current Temperature (identificador: CurrentTemperature, tipo de dados: float, intervalo de valores: -40 a 120).

    Após o mecanismo de regras analisar os dados das propriedades de temperatura e umidade reportados pelo sensor, os dados assumem o seguinte formato:

    {
        "deviceType": "TemperatureHumidityDetector", 
        "iotId": "N5KURkKdibnZvSls****000100", 
        "productKey": "a15NNfl****", 
        "gmtCreate": 1564569974224, 
        "deviceName": "N5KURkKdibnZvSls3Yfx", 
        "items": {
            "CurrentHumidity": {
                "value": 70, 
                "time": 1564569974229
            }, 
            "CurrentTemperature": {
                "value": 23.5, 
                "time": 1564569974229
            }
        }
    }
    Importante

    Em uma consulta SQL, use

    items.${PropertyIdentifier}.value

    para acessar os dados de uma propriedade específica.

    Para acionar a regra quando a temperatura for superior a 38°C e filtrar o nome do dispositivo, a temperatura atual e a umidade atual, use a seguinte instrução SQL:

    SELECTdeviceName() as deviceName, items.CurrentHumidity.value as Humidity, items.CurrentTemperature.value as Temperature
    FROM "/sysa15NNfl****/N5KUR***/thing/event/property/post"
    WHERE items.CurrentTemperature.value > 38

    Caso a propriedade pertença a um módulo personalizado, como testFB, o identificador da propriedade seguirá o formato ${ModuleIdentifier}:${PropertyIdentifier}. Para acessar os dados de uma propriedade específica, use aspas duplas (""). A instrução SQL fica da seguinte forma:

    SELECTdeviceName() as deviceName, "items.testFB:CurrentHumidity.value" as Humidity, "items.testFB:CurrentTemperature.value" as Temperature
    FROM "/sysa15NNfl****/N5KUR***/thing/event/property/post"
    WHERE "items.testFB:CurrentTemperature.value" > 38

SELECT

  • Para formato de dados JSON

    Os campos em uma instrução SELECT podem ser os valores-chave do payload JSON de uma mensagem reportada. Também é possível usar funções SQL integradas, como deviceName(). Para obter mais informações sobre as funções SQL integradas do mecanismo de regras, consulte Lista de funções.

    O caractere * pode ser usado em combinação com funções. Subconsultas não são suportadas.

    Os dados JSON reportados podem ser uma matriz ou um objeto JSON aninhado. As instruções SQL oferecem suporte a JSONPath para recuperar valores de propriedades. Por exemplo, para {a:{key1:v1, key2:v2}}, use a.key2 para recuperar o valor v2. Ao usar variáveis, observe a diferença entre aspas simples e duplas. Aspas simples indicam uma constante. Aspas duplas ou a ausência de aspas indicam uma variável. Por exemplo, se você usar aspas simples em 'a.key2', o valor será a string a.key2.

    Nos exemplos de SQL deste tópico:

    • Na instrução SQL SELECTSELECT temperature as t, deviceName() as deviceName, location, temperature e location são campos dos dados reportados, e deviceName() é uma função SQL integrada.

    • Na instrução SELECT SELECT deviceName() as deviceName, items.CurrentHumidity.value as Humidity, items.CurrentTemperature.value as Temperature para processar dados de um tópico de reporte de propriedades, items.CurrentHumidity.value e items.CurrentTemperature.value são campos dos dados de propriedade reportados do módulo padrão. deviceName() é uma função SQL integrada.

      Nota

      items.testFB:CurrentHumidity.value

      e

      items.testFB:CurrentTemperature.value

      são campos dos dados de propriedade reportados de um módulo personalizado.

  • Para dados binários

    • Insira * para transmitir os dados diretamente. Não é possível usar funções após *.

    • Use funções integradas. Por exemplo, utilize a função to_base64(*) para converter os dados originais do payload binário em uma string Base64 e extraí-los. Use a função deviceName() para extrair o nome do dispositivo.

Nota

Uma instrução SELECT pode conter no máximo 50 campos.

FROM

Na cláusula FROM, especifique um tópico para corresponder ao tópico de origem das mensagens do dispositivo que você deseja processar. Para o nível de nome do dispositivo no tópico, use o caractere curinga de sinal de adição (+). Esse caractere representa todos os dispositivos no nível atual, ou seja, todos os dispositivos sob o produto. Ao especificar um tópico personalizado, também é possível usar o caractere curinga de cerquilha (#). Esse caractere representa o nível atual e todos os níveis subsequentes no tópico. Para obter mais informações sobre caracteres curinga, consulte Usar tópicos personalizados para comunicação.

Quando uma mensagem do tópico especificado chega, seu payload é analisado como JSON e processado com base na instrução SQL. Se o formato da mensagem for inválido, ela será ignorada. Use a função topic() para referenciar um valor específico do tópico.

Nos exemplos de SQL acima:

  • A instrução FROM "/a1hRrzD****/+/user/update" indica que a instrução SQL processa apenas mensagens do tópico personalizado /a1hRrzD****/+/user/update.

  • A instrução FROM "/sys/a15NNfl****/N5KURkKdibnZvSls3Yfx/thing/event/property/post" indica que a instrução SQL processa apenas mensagens do tópico no qual o dispositivo N5KURkKdibnZvSls3Yfx reporta propriedades.

WHERE

  • Para formato de dados JSON

    A cláusula WHERE especifica a condição de acionamento da regra, que é uma expressão condicional. Subconsultas não são suportadas. Os campos utilizáveis na cláusula WHERE são os mesmos da instrução SELECT. Quando uma mensagem é recebida do tópico correspondente, a instrução WHERE é avaliada para determinar se a regra deve ser acionada. Para obter mais informações sobre expressões condicionais, consulte a seção Expressões condicionais suportadas abaixo.

    Nos dois exemplos acima, a instrução condicional WHERE temperature > 38 indica que a regra é acionada somente quando a temperatura é superior a 38°C.

  • Para formato de dados binários

    Para dados binários, a cláusula WHERE suporta apenas funções integradas e expressões condicionais. Não é possível usar campos do payload.

Resultados do SQL

Após a execução da instrução SQL, um resultado SQL é gerado para a próxima etapa de encaminhamento. Se ocorrer um erro durante a análise do payload, a execução da regra falhará.

Para encaminhar dados ao Tablestore, use o formato de variável ${Expression} para referenciar o valor correspondente ao definir o destino do encaminhamento de dados.

Se as regras dos dois exemplos acima precisarem encaminhar dados para uma tabela de dados no Tablestore, configure os valores da chave primária da seguinte maneira:

  • ${t}, ${deviceName} e ${location}.

  • ${deviceName}, ${Humidity} e ${Temperature}.

Uso de matrizes

As expressões de matriz devem estar entre aspas duplas. O operador $. busca um objeto JSON. O operador $. é opcional. O operador . busca uma matriz JSON.

Por exemplo, se a mensagem do dispositivo for

{"a":[{"v":0},{"v":1},{"v":2}]}

, diferentes expressões produzem os seguintes resultados:

  • "a[0]" retorna {"v":0}

  • "$.a[0]" retorna {"v":0}

  • ".a[0]" retorna [{"v":0}]

  • "a[1].v" retorna 1

  • "$.a[1].v" retorna 1

  • ".a[1].v" retorna [1]

  • Expressões condicionais suportadas

    Operador Descrição Exemplo
    = Igual a color = 'red'
    <> Diferente de color <> 'red'
    AND E lógico color = 'red' AND siren = 'on'
    OR OU lógico color = 'red' OR siren = 'on'
    + Adição aritmética 4 + 5
    - Subtração aritmética 5 - 4
    / Divisão 20 / 4
    * Multiplicação 5 * 4
    % Módulo 20 % 6
    < Menor que 5 < 6
    <= Menor ou igual a 5 <= 6
    > Maior que 6 > 5
    >= Maior ou igual a 6 >= 5
    Invocação de função Suporta funções. Para obter mais informações, consulte Lista de funções. deviceId()
    Expressão de propriedade JSON Extrai propriedades do payload da mensagem usando expressões JSON. state.desired.color,a.b.c[0].d
    CASE … WHEN … THEN … ELSE …END Expressão Case. Não suporta aninhamento. CASE col WHEN 1 THEN 'Y' WHEN 0 THEN 'N' ELSE '' END as flag
    IN Suporta apenas enumerações. Subconsultas não são suportadas. Por exemplo: where a in(1,2,3). O seguinte formato não é suportado: where a in(select xxx).
    like Corresponde a um caractere. Apenas o caractere curinga % é suportado, correspondendo a qualquer string.
    • like: Consulta dados que contêm um caractere específico.
    • not like: Consulta dados que não contêm um caractere específico.
    where c1 like '%abc'
    not like where c1 not like '%def%'

    Depurar instruções SQL

    Se você definir Data Format como JSON ao criar uma regra de encaminhamento de dados, será possível depurar a instrução SQL online no console do IoT Platform. O procedimento é descrito a seguir.

    1. Após escrever o SQL, clique em SQL Debug.

    2. Na caixa de diálogo SQL Debugging, na aba Debugging Parameters, insira os dados para depuração e clique em Debug. Os parâmetros incluem Product, Device, Device Tag (é possível adicionar ou excluir tags de par chave-valor), Topic e Payload Data.

      Insira os dados do payload para depuração de acordo com o formato de dados do tópico. O formato de dados é descrito da seguinte maneira:

      • Se o tópico for personalizado, o formato dos dados do payload inseridos deve ser idêntico ao formato dos dados reportados ao tópico.

      • Se o tópico for de comunicação básica ou de comunicação de modelo da Thing Specification Language, consulte Formatos de dados.

    3. Clique na aba Debug Result para visualizar o resultado. O resultado da depuração é exibido em formato JSON e inclui campos como attribute('b') com valor "b", payload com valor {"timeout":"test"}, attribute('a') com valor "a", attribute('coordinate') para a coordenada do dispositivo, deviceName para o nome do dispositivo e timestamp com um valor como 1579004949668.