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 Para obtener más información, consulte MaxCompute SQL comments. También aplican los siguientes límites para los comentarios:
|
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 |
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:
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.
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 TABLEpara 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 INTOoINSERT OVERWRITEpara 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') ;ImportanteEvite usar la instrucción
INSERT INTOpara insertar datos, ya que podría provocar duplicaciones accidentales. Se recomienda utilizar la instrucciónINSERT OVERWRITEen su lugar. Para obtener más información, consulte Insert or overwrite data. -
Consultar datos
La instrucción
SELECTle 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;NotaDe 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
dateaddpara modificar la columnabirthcon 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.
NotaDebido 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.