Todos los productos
Search
Centro de documentos

MaxCompute:Desarrollo de una tarea de ODPS SQL

Última actualización: Oct 09, 2026

Una tarea de MaxCompute SQL utiliza una sintaxis similar a SQL para procesar de forma distribuida datos a gran escala (del orden de terabytes) cuando no se requieren resultados en tiempo real. Este tema describe cómo desarrollar una tarea de SQL en DataWorks y proporciona notas de uso importantes.

Introducción

ODPS SQL se usa para procesar y consultar datos en MaxCompute. Admite las operaciones comunes de SQL, como SELECT, INSERT, UPDATE y DELETE, además de la sintaxis y las funciones específicas de MaxCompute. Con ODPS SQL, usted puede escribir instrucciones similares a SQL para consultar y procesar datos sin necesidad de programar lógica compleja de procesamiento. Para obtener más información sobre la sintaxis de SQL, consulte SQL Overview.

Límites

Los nodos de ODPS SQL en DataWorks tienen los siguientes límites:

Categoría

Descripción

Uso de comentarios

Solo se admiten comentarios de una sola línea con el formato -- comment content. No se admiten los comentarios de varias líneas con el formato / comment content /.

Para obtener más información, consulte MaxCompute SQL comments.

También aplican los siguientes límites para los comentarios:

  • No es posible agregar un comentario después de una instrucción de palabra clave, como SET o USE.

  • No se permite usar un punto y coma (;) dentro de un comentario.

  • No agregue comentarios después de una instrucción que termine con punto y coma (;).

Envío de SQL

Las instrucciones SET o USE no se pueden usar de forma aislada; deben ejecutarse junto con otras instrucciones de SQL.

Si utiliza la instrucción USE para cambiar a otro proyecto de MaxCompute, las instrucciones SET del código SQL no surtirán efecto.

-- Not recommended:
    USE xc_dpe_e2;
    SELECT * FROM ads_user_info_1d WHERE dt = '${bizdate}' LIMIT 100;

    -- Recommended:
    SELECT * FROM xc_dpe_e2.ads_user_info_1d WHERE dt = '${bizdate}' LIMIT 100;

Desarrollo de SQL

El tamaño del código SQL no puede superar los 128 KB, y la cantidad de instrucciones de SQL tiene un límite de 200.

Resultado de la consulta

Únicamente las instrucciones de SQL que comienzan con SELECT o WITH devuelven un conjunto de resultados con formato.

El resultado de una consulta está sujeto a los siguientes límites:

  • Si el resultado supera las 10 000 filas, se muestra un máximo de 10 000 filas.

  • Si el tamaño del resultado excede los 10 MB, se devuelve el mensaje de error Result is too large, exceed the limit size: 10MB.

Nota

Si se topa con estos límites, descargue el resultado de la consulta para consultarlo de manera local mediante alguno de los siguientes métodos:

Notas de uso

  • Asegúrese de que la cuenta utilizada para ejecutar la tarea de ODPS SQL cuente con los permisos obligatorios en el proyecto de MaxCompute correspondiente. Para obtener más información, consulte DataWorks On MaxCompute permission control y MaxCompute permissions.

  • Las tareas de MaxCompute SQL requieren recursos de cuota para ejecutarse. Si una tarea tarda mucho tiempo, acceda a la consola de MaxCompute para comprobar el consumo de cuota y verificar que haya recursos suficientes disponibles. Para obtener más información, consulte Computing Resources - Quota Management.

  • Al desarrollar una tarea en un nodo de ODPS SQL, los parámetros especiales, como una dirección de OSS, deben ir entre comillas dobles ("). De lo contrario, se genera un error de análisis sintáctico y la tarea falla.

  • En casos extremos, como un corte de energía en el servidor o un cambio entre nodos principal y secundario, es posible que DataWorks no logre finalizar por completo las tareas de MaxCompute relacionadas. Ante esta situación, acceda al proyecto de MaxCompute correspondiente para terminate the job.

  • El orden de ejecución de keyword statements (SET and USE) varies by DataWorks environment.

    • In DataStudio: All keyword statements (SET and USE) are combined and executed before other SQL statements.
    • En el entorno de programación (Scheduling environment): las instrucciones se ejecutan en el orden en que están escritas.

    Suponga que en un nodo se define el siguiente código.

    SET a=b;
    CREATE TABLE name1(id string);
    SET c=d;
    CREATE TABLE name2(id string);

    A continuación se describe el orden de ejecución en los distintos entornos.

    SQL ejecutado

    DataStudio

    Entorno de programación

    Primera instrucción de SQL

    SET a=b;
    SET c=d;
    CREATE TABLE name1(id string);
    SET a=b;
        CREATE TABLE name1(id string);

    Segunda instrucción de SQL

    SET a=b;
    SET c=d;
    CREATE TABLE name2(id string);
    SET c=d;
        CREATE TABLE name2(id string);

Edición de código: ejemplos sencillos

Comandos de SQL

Los comandos de MaxCompute SQL emplean una sintaxis similar a la de SQL estándar y admiten instrucciones DDL, DML y DQL, así como sintaxis específica de MaxCompute. Para conocer los requisitos de sintaxis y ver ejemplos de uso de cada comando de SQL, consulte SQL overview. A continuación se muestra un ejemplo sencillo sobre cómo desarrollar y ejecutar comandos de SQL.

Nota
  • Cuando utilice tipos de datos nuevos con las funciones extendidas de MaxCompute 2.0, agregue SET odps.sql.type.system.odps2=true; antes de la instrucción de SQL y envíelos juntos para habilitar el uso de dichos tipos de datos. Para obtener más información, consulte 2.0 Data Types Version.

  • DataWorks ofrece parámetros de programación que permiten pasar parámetros de forma dinámica en escenarios programados. Defina variables en el código del nodo de ODPS SQL con el formato ${variable_name} y asigne valores en la sección Properties > Parameter. Para conocer los formatos compatibles con los parámetros de programación, consulte Supported formats for scheduling parameters.

  • Crear una tabla

    Utilice la instrucción CREATE TABLE para crear una tabla sin particiones, una tabla particionada, una tabla externa o una tabla agrupada (clustered). Para obtener más información, consulte CREATE TABLE. Ejemplo de instrucción de SQL:

    -- Create a partitioned table named test1.
    CREATE TABLE if NOT EXISTS students
    ( id BIGINT,
      name STRING,
      age BIGINT,
      birth DATE)
    partitioned BY (gender STRING); 
  • Insertar datos

    Use la instrucción INSERT INTO o INSERT OVERWRITE para insertar o actualizar datos en una tabla de destino. Para obtener más información, consulte Insert or overwrite data (INSERT INTO | INSERT OVERWRITE). Ejemplos de instrucciones de SQL:

    -- Insert data.
    INSERT INTO students PARTITION(gender='boy') VALUES (1,'John',15,DATE '2008-05-15') ;
    INSERT INTO students PARTITION(gender='boy') VALUES (2,'Jack',17,DATE '2006-07-20') ;
    INSERT INTO students PARTITION(gender='girl') VALUES (3,'Alice',20,DATE '2003-04-20') ;
    INSERT INTO students PARTITION(gender='girl') VALUES (4,'Lily',21,DATE '2002-01-08') ;
    INSERT INTO students PARTITION(gender='boy') VALUES (5,'Bob',17,DATE '2006-09-12') ;
    Importante

    Evite usar la instrucción INSERT INTO para insertar datos, ya que podría provocar duplicaciones accidentales. Se recomienda utilizar la instrucción INSERT OVERWRITE en su lugar. Para obtener más información, consulte Insert or overwrite data.

  • Consultar datos

    La instrucción SELECT le permite llevar a cabo operaciones como consultas anidadas, consultas agrupadas y ordenamiento. Para obtener más información, consulte SELECT syntax. Ejemplos de instrucciones de SQL:

    -- (Optional) Enable full table scan at the project level. This operation requires high-level permissions.
    -- SETPROJECT odps.sql.allow.fullscan=true;  
    
    -- Enable full table scan at the session level. This setting is valid only for the current session.
    SET odps.sql.allow.fullscan=true; 
    -- Query the information about all boys and sort the results by ID in ascending order.
    SELECT * FROM students WHERE gender='boy' ORDER BY id;
    Nota

    De forma predeterminada, un usuario de RAM no tiene permisos de consulta en las tablas de producción. Para consultar dichas tablas, envíe una solicitud en Security Center. Para conocer los ajustes predefinidos de permisos de datos de MaxCompute y el control de acceso en DataWorks, consulte MaxCompute data permission control details. Para saber cómo otorgar permisos mediante comandos en MaxCompute, consulte Manage user permissions by using commands.

Funciones de SQL

MaxCompute admite funciones integradas y funciones definidas por el usuario (UDF) para el desarrollo y análisis de datos. Para obtener más información sobre las funciones integradas, consulte Overview of built-in functions. Para conocer más acerca de las UDF, consulte MaxCompute UDF overview. En el siguiente ejemplo se muestra cómo usar funciones de SQL.

  • Funciones integradas: estas funciones vienen preinstaladas en MaxCompute y se pueden invocar directamente. Tomando como base el ejemplo anterior, utilice la función dateadd para modificar la columna birth con una unidad y un intervalo específicos. Comando de ejemplo:

    -- Enable full table scan at the session level. This setting is valid only for the current session.
    SET odps.sql.allow.fullscan=true; 
    SELECT id, name, age, birth, dateadd(birth,1,'mm') AS birth_dateadd FROM students;
  • Funciones definidas por el usuario (UDF): para usar una UDF, debe escribir el código de la función, cargarlo como recurso y registrar la función. Para obtener más información, consulte Create and use a UDF.

Ejecución y resultados

  • Los resultados de la ejecución se muestran directamente en formato de hoja de cálculo. Puede realizar operaciones en DataWorks, abrir los resultados en una hoja de cálculo o copiar y pegar el contenido en un archivo de Excel local. Para obtener más información, consulte Debug tasks.

    Nota

    Debido a un ajuste en la información de zona horaria de China publicado por la Organización Internacional de Normalización (ISO), podría presentarse una discrepancia temporal en la visualización de fechas al ejecutar consultas de SQL relevantes en DataWorks. La diferencia es de 5 minutos y 52 segundos para las fechas comprendidas entre 1900 y 1928, y de 9 segundos para las fechas anteriores a 1900.

  • Registro de ejecución: haga clic en la pestaña Operational Logs para consultar Logview. Para obtener más información, consulte View job information by using Logview V2.0.

  • Resultados devueltos:

    • Consulte la información de todos los niños y ordene los resultados por identificador (ID) de forma ascendente.

      +------------+------------+------------+------------+------------+
      | id         | name       | age        | birth      | gender     |
      +------------+------------+------------+------------+------------+
      | 1          | John       | 15         | 2008-05-15 | boy        |
      | 2          | Jack       | 17         | 2006-07-20 | boy        |
      | 5          | Bob        | 17         | 2006-09-12 | boy        |
      +------------+------------+------------+------------+------------+
    • Modifique la columna birth con una unidad y un intervalo específicos.

      +------------+------------+------------+------------+---------------+
      | id         | name       | age        | birth      | birth_dateadd |
      +------------+------------+------------+------------+---------------+
      | 4          | Lily       | 21         | 2002-01-08 | 2002-02-08    |
      | 3          | Alice      | 20         | 2003-04-20 | 2003-05-20    |
      | 2          | Jack       | 17         | 2006-07-20 | 2006-08-20    |
      | 1          | John       | 15         | 2008-05-15 | 2008-06-15    |
      | 5          | Bob        | 17         | 2006-09-12 | 2006-10-12    |
      +------------+------------+------------+------------+---------------+

    En la página de resultados de la consulta, puede ordenar los datos por un campo específico y descargarlos. Para obtener más información, consulte Process query results.

Edición de código: ejemplos avanzados

Para consultar ejemplos más avanzados de tareas de ODPS SQL, revise los siguientes temas:

Preguntas frecuentes

  • P: ¿Por qué mi tarea de ODPS SQL permanece en estado de espera durante mucho tiempo?

    R: Las tareas de ODPS SQL requieren recursos de cuota para ejecutarse. Si su tarea permanece en estado de espera por mucho tiempo, acceda a la consola de MaxCompute para comprobar el consumo de cuota y verificar que haya recursos suficientes disponibles. Para obtener más información, consulte Computing Resources - Quota Management.

  • P: ¿Por qué aparece el mensaje de error "You have No privilege 'odps:xxxx' on xxxx" al ejecutar una tarea de ODPS SQL?

    R: La cuenta utilizada para ejecutar la tarea de ODPS SQL debe contar con los permisos obligatorios en el proyecto de MaxCompute correspondiente. Para obtener más información, consulte MaxCompute permissions.