Todos los productos
Search
Centro de documentos

IoT Platform:Expresiones SQL

Última actualización: Sep 03, 2026

Al crear una regla de reenvío de datos, debe escribir una instrucción SQL para analizar y procesar los datos JSON que reportan los dispositivos. Los datos en formato binario se transmiten directamente sin ser analizados. Este tema describe cómo escribir expresiones SQL para las reglas de reenvío de datos.

Expresiones SQL

Importante

Si el identificador de un modelo de Thing Specification Language comienza con un número, no puede usar una expresión SQL para acceder al modelo. La versión anterior de la función de reenvío de datos no admite el reenvío de datos desde modelos de Thing Specification Language cuyos identificadores comienzan con un número.

Puede utilizar la nueva versión de la función de reenvío de datos para editar un script que acceda a un modelo de Thing Specification Language cuyo identificador comience con un número y reenvíe sus datos. Para obtener más información, consulte Scripting guide.

Los datos JSON se pueden asignar a una tabla virtual. En esta asignación, una clave corresponde a una columna de la tabla y un valor corresponde al valor de dicha columna. Esto le permite usar SQL para el procesamiento de datos. La siguiente figura muestra una expresión SQL para una regla de reenvío de datos.

SQL expression

A continuación se presentan ejemplos de SQL para reglas de reenvío de datos:

  • Ejemplo de SQL para procesar datos de un tema personalizado.

    Un sensor ambiental recopila datos de temperatura, humedad y presión atmosférica. El dispositivo reporta los siguientes datos al tema personalizado /a1hRrzD****/+/user/update:

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

    Para activar la regla cuando la temperatura sea superior a 38 °C y filtrar por nombre del dispositivo, temperatura e información de ubicación, utilice la siguiente instrucción SQL:

    SELECT temperature as t, deviceName() as deviceName, location 
    FROM "/a1hRrzD****/+/user/update" 
    WHERE temperature > 38
  • Ejemplo de SQL para procesar datos de temas de comunicación básica y temas de comunicación de modelos de Thing Specification Language. Cuando los datos de estos temas se reenvían al motor de reglas, este los analiza. Para obtener más información sobre el formato de los datos tras el análisis, consulte Data formats. El sensor define dos propiedades personalizadas: Current Humidity (identificador: CurrentHumidity, tipo de datos: float, rango de valores: 0 a 100) y Current Temperature (identificador: CurrentTemperature, tipo de datos: float, rango de valores: -40 a 120).

    Después de que el motor de reglas analiza los datos de las propiedades de temperatura y humedad reportados por el sensor, los datos tienen el siguiente 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

    En una consulta SQL, debe usar

    items.${PropertyIdentifier}.value

    para acceder a los datos de una propiedad específica.

    Para activar la regla cuando la temperatura sea superior a 38 °C y filtrar por nombre del dispositivo, temperatura actual y humedad actual, utilice la siguiente instrucción 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

    Si la propiedad pertenece a un módulo personalizado, como testFB, el identificador de la propiedad tiene el formato ${ModuleIdentifier}:${PropertyIdentifier}. Para acceder a los datos de una propiedad específica, debe usar comillas dobles (""). La instrucción SQL es la siguiente:

    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 datos JSON

    Los campos en una instrucción SELECT pueden ser los valores de clave de la carga útil JSON de un mensaje reportado. También puede usar funciones SQL integradas, como deviceName(). Para obtener más información sobre las funciones SQL integradas del motor de reglas, consulte Function list.

    Puede usar * en combinación con funciones. No se admiten subconsultas.

    Los datos JSON reportados pueden ser una matriz o un objeto JSON anidado. Las instrucciones SQL admiten JSONPath para recuperar valores de propiedades. Por ejemplo, para {a:{key1:v1, key2:v2}}, puede usar a.key2 para recuperar el valor v2. Al usar variables, tenga en cuenta la diferencia entre comillas simples y dobles. Las comillas simples indican una constante. Las comillas dobles o la ausencia de comillas indican una variable. Por ejemplo, si usa comillas simples para 'a.key2', el valor será la cadena a.key2.

    En los ejemplos de SQL de este tema:

    • En una instrucción SQL SELECTSELECT temperature as t, deviceName() as deviceName, location, temperature y location son campos de los datos reportados, y deviceName() es una función SQL integrada.

    • En la instrucción SELECT SELECT deviceName() as deviceName, items.CurrentHumidity.value as Humidity, items.CurrentTemperature.value as Temperature para procesar datos de un tema de reporte de propiedades, items.CurrentHumidity.value y items.CurrentTemperature.value son campos de los datos de propiedad reportados del módulo predeterminado. deviceName() es una función SQL integrada.

      Nota

      items.testFB:CurrentHumidity.value

      y

      items.testFB:CurrentTemperature.value

      son campos de los datos de propiedad reportados de un módulo personalizado.

  • Para datos binarios

    • Puede introducir * para transmitir los datos directamente. No puede usar funciones después de *.

    • Puede usar funciones integradas. Por ejemplo, utilice la función to_base64(*) para convertir los datos originales de la carga útil binaria a una cadena Base64 y extraerla. Utilice la función deviceName() para extraer el nombre del dispositivo.

Nota

Una instrucción SELECT puede contener un máximo de 50 campos.

FROM

En la cláusula FROM, puede especificar un tema para coincidir con el tema de origen de los mensajes del dispositivo que desea procesar. Para el nivel de nombre de dispositivo en el tema, puede usar el carácter comodín de signo más (+). Este carácter representa todos los dispositivos en el nivel actual, es decir, todos los dispositivos bajo el producto. Cuando especifique un tema personalizado, también puede usar el carácter comodín de signo de número (#). Este carácter representa el nivel actual y todos los niveles subsiguientes en el tema. Para obtener más información sobre los caracteres comodín, consulte Use custom topics for communication.

Cuando llega un mensaje del tema especificado, su carga útil se analiza como JSON y se procesa según la instrucción SQL. Si el formato del mensaje no es válido, el mensaje se ignora. Puede usar la función topic() para hacer referencia a un valor de tema específico.

En los ejemplos de SQL anteriores:

  • La instrucción FROM "/a1hRrzD****/+/user/update" indica que la instrucción SQL procesa solo mensajes del tema personalizado /a1hRrzD****/+/user/update.

  • La instrucción FROM "/sys/a15NNfl****/N5KURkKdibnZvSls3Yfx/thing/event/property/post" indica que la instrucción SQL procesa solo mensajes del tema al que el dispositivo N5KURkKdibnZvSls3Yfx reporta propiedades.

WHERE

  • Para formato de datos JSON

    La cláusula WHERE especifica la condición de activación de la regla, que es una expresión condicional. No se admiten subconsultas. Los campos que puede usar en la cláusula WHERE son los mismos que en la instrucción SELECT. Cuando se recibe un mensaje del tema correspondiente, se evalúa la instrucción WHERE para determinar si se activa la regla. Para obtener más información sobre las expresiones condicionales, consulte la sección Expresiones condicionales admitidas a continuación.

    En los dos ejemplos anteriores, la instrucción condicional WHERE temperature > 38 indica que la regla se activa solo cuando la temperatura es superior a 38 °C.

  • Para formato de datos binarios

    Para datos binarios, la cláusula WHERE solo admite funciones integradas y expresiones condicionales. No puede usar campos de la carga útil.

Resultados de SQL

Después de ejecutar la instrucción SQL, se genera un resultado SQL para el siguiente paso de reenvío. Si ocurre un error durante el análisis de la carga útil, la regla no se ejecuta correctamente.

Si desea reenviar datos a Tablestore, debe usar el formato de variable ${Expression} para hacer referencia al valor correspondiente cuando configure el destino del reenvío de datos.

Si las reglas de los dos ejemplos anteriores necesitan reenviar datos a una tabla de datos en Tablestore, los valores de la clave primaria se pueden configurar de la siguiente manera:

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

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

Uso de matrices

Las expresiones de matriz deben ir entre comillas dobles. El operador $. obtiene un objeto JSON. El operador $. es opcional. El operador . obtiene una matriz JSON.

Por ejemplo, si el mensaje del dispositivo es

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

, diferentes expresiones producen los siguientes resultados:

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

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

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

  • "a[1].v" devuelve 1

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

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

Expresiones condicionales admitidas

Operador Descripción Ejemplo
= Igual a color = 'red'
<> No igual a color <> 'red'
AND AND lógico color = 'red' AND siren = 'on'
OR OR lógico color = 'red' OR siren = 'on'
+ Suma aritmética 4 + 5
- Resta aritmética 5 - 4
/ División 20 / 4
* Multiplicación 5 * 4
% Módulo 20 % 6
< Menor que 5 < 6
<= Menor o igual que 5 <= 6
> Mayor que 6 > 5
>= Mayor o igual que 6 >= 5
Invocación de función Admite funciones. Para obtener más información, consulte Function list. deviceId()
Expresión de propiedad JSON Extrae propiedades de la carga útil del mensaje mediante expresiones JSON. state.desired.color,a.b.c[0].d
CASE … WHEN … THEN … ELSE …END Expresión Case. No se admite anidamiento. CASE col WHEN 1 THEN 'Y' WHEN 0 THEN 'N' ELSE '' END as flag
IN Solo admite enumeraciones. No se admiten subconsultas. Por ejemplo: where a in(1,2,3). No se admite el siguiente formato: where a in(select xxx).
like Coincide con un carácter. Solo se admite el carácter comodín %, que coincide con cualquier cadena.
  • like: Consulta datos que contienen un carácter específico.
  • not like: Consulta datos que no contienen un carácter específico.
where c1 like '%abc'
not like where c1 not like '%def%'

Depurar instrucciones SQL

Si establece Data Format en JSON al crear una regla de reenvío de datos, puede depurar la instrucción SQL en línea desde la consola de IoT Platform. El procedimiento es el siguiente.

  1. Después de escribir el SQL, haga clic en SQL Debug.

  2. En el cuadro de diálogo SQL Debugging, en la pestaña Debugging Parameters, introduzca los datos para la depuración y haga clic en Debug. Product Device Device Tag Topic Payload Data

    Introduzca los datos de carga útil para la depuración según el formato de datos del tema. El formato de datos se describe a continuación:

    • Si el tema es un tema personalizado, el formato de los datos de carga útil que introduzca debe ser igual al formato de los datos reportados al tema.

    • Si el tema es un tema de comunicación básica o un tema de comunicación de modelo de Thing Specification Language, consulte Data formats.

    Los parámetros de depuración incluyen

    ,

    ,

    (puede agregar o eliminar etiquetas de pares clave-valor),

    y

    .

  3. Debug Result Haga clic en la pestaña para ver el resultado. El resultado de la depuración se muestra en formato JSON e incluye campos como attribute('b') con un valor de "b", payload con un valor de {"timeout":"test"}, attribute('a') con un valor de "a", attribute('coordinate') para la coordenada del dispositivo, deviceName para el nombre del dispositivo y timestamp con un valor como 1579004949668.