El nodo SQL de MaxCompute en DataWorks programa periódicamente tareas SQL de MaxCompute y se integra con otros tipos de nodos dentro de un flujo de trabajo unificado. MaxCompute SQL utiliza una sintaxis similar a SQL, adecuada para el procesamiento distribuido de datos a gran escala (del orden de TB) donde los resultados en tiempo real no son críticos.
Introducción
MaxCompute SQL procesa y consulta datos en MaxCompute. Admite operaciones SQL comunes como SELECT, INSERT, UPDATE y DELETE, además de la sintaxis y las funciones específicas de MaxCompute. Para obtener más información sobre la sintaxis SQL, consulte SQL overview.
Requisitos previos
Tiene bound a MaxCompute compute engine al espacio de trabajo de DataWorks.
-
(Opcional, para usuarios de RAM) El usuario de RAM responsable del desarrollo de tareas debe ser miembro del espacio de trabajo y tener el rol Development o Workspace Administrator. El rol Workspace Administrator incluye permisos amplios, por lo que debe otorgarse con precaución. Para obtener más información sobre cómo agregar un miembro a un espacio de trabajo, consulte Add members to a workspace.
NotaSi utiliza una cuenta de Alibaba Cloud, puede omitir este paso.
Limitaciones
A continuación se describen las limitaciones aplicables al desarrollo SQL en el nodo SQL de MaxCompute:
Categoría | Descripción |
Comentarios | Solo se admiten comentarios de una sola línea que comienzan con Para obtener más información, consulte MaxCompute SQL comments. Los comentarios también tienen las siguientes limitaciones:
|
Envío de SQL | ODPS SQL no admite instrucciones SET o USE independientes. Estas deben ejecutarse junto con una instrucción SQL específica. Si utiliza la instrucción |
Desarrollo SQL | El tamaño del código SQL no puede superar los128 KB, y la cantidad de instrucciones SQL no puede exceder las200. |
Resultados de la consulta | Solo las instrucciones SQL que comienzan con SELECT o WITH pueden generar conjuntos de resultados con formato. Los resultados de las consultas presentan las siguientes limitaciones:
Nota Si se topa con estas limitaciones en los resultados, descargue los datos a su computadora local mediante uno de los siguientes métodos:
|
Notas
Asegúrese de que la cuenta utilizada para ejecutar tareas SQL de MaxCompute tenga los permisos obligatorios en el proyecto de MaxCompute correspondiente. Para obtener más información, consulte DataWorks On MaxCompute permission control y MaxCompute authorization.
La ejecución de tareas SQL de MaxCompute depende de los recursos de cuota. Si una tarea tarda mucho en ejecutarse, vaya a la consola de MaxCompute para revisar el consumo de recursos de cuota y asegúrese de que haya recursos suficientes disponibles para la ejecución. Para obtener más información, consulte View quota resource consumption.
Al desarrollar tareas de nodos SQL de MaxCompute, los parámetros especiales, como las rutas de OSS, deben ir entre comillas dobles. La omisión de comillas puede provocar excepciones de análisis sintáctico y causar errores en la ejecución de la tarea.
Cuando ejecute instrucciones relacionadas con palabras clave (SET, USE) en distintos entornos de DataWorks, the execution order varies. For more information, see Appendix 1: SQL execution order in different environments.
En algunos 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. En esta situación, vaya al proyecto de MaxCompute correspondiente para terminate the job.
Cuando el propósito principal de una tarea es crear una tabla nueva (por ejemplo,
DROP TABLEseguido deCREATE TABLE AS SELECT), el motor de MaxCompute realiza una comprobación previa de metadatos antes de la ejecución. Si la tabla ya existe, se devuelve un error de forma directa. Para la creación inicial de la tabla, utiliceCREATE TABLE IF NOT EXISTS. Para escrituras de datos posteriores, useINSERT OVERWRITE TABLE ... SELECT ...en su lugar.-
Es posible controlar el modo de ejecución de SQL mediante el parámetro
odps.task.sql.realtime. Establezca el valor entruepara habilitar el modo Online y lograr una ejecución en tiempo real, o establézcalo enfalsepara forzar el modo Offline. Coloque este parámetro al inicio del código SQL, antes de las instrucciones SQL de negocio. Ejemplo:SET odps.task.sql.realtime=true; -- Your business SQL statements SELECT * FROM my_table; No se admite modificar directamente el tipo de datos de una columna de STRING a tipos complejos como STRUCT. Si se devuelve el error
ODPS-0130071, compruebe si la conversión del tipo de campo cumple con las reglas semánticas y evite operaciones de conversión de tipos no compatibles.
Crear un nodo SQL de MaxCompute
Para obtener información sobre cómo crear un nodo, consulte Create a MaxCompute SQL node.
Desarrollar un nodo SQL de MaxCompute
En la página de edición del nodo SQL de MaxCompute, lleve a cabo las siguientes operaciones.
Desarrollar código SQL
DataWorks proporciona parámetros de programación para pasar valores dinámicamente al código en escenarios de programación. Puede definir variables en un nodo SQL de MaxCompute con el formato ${variable_name} y luego asignarles valores en la sección Scheduling Parameters de Scheduling Settings. Para obtener más información sobre los formatos compatibles, consulte Scheduling parameters. MaxCompute SQL emplea una sintaxis similar a la de SQL estándar y admite instrucciones DDL, DML y DQL, además de la sintaxis propia de MaxCompute. Para consultar la sintaxis detallada y ejemplos, vea SQL overview.
A continuación se presentan tres ejemplos para distintos escenarios:
Cuando las funciones extendidas de MaxCompute 2.0 utilizan nuevos tipos de datos, debe agregar
SET odps.sql.type.system.odps2=true;antes de la instrucción SQL que contiene la función. Envíela y ejecútela junto con dicha instrucción para que los nuevos tipos de datos funcionen correctamente. Para obtener más información sobre los tipos de datos de la versión 2.0, consulte MaxCompute 2.0 data types.Las instrucciones SQL de MaxCompute se ejecutan en un orden distinto según se encuentren en los entornos de Data Studio u Operation Center. Para obtener más información, consulte Appendix 1: SQL execution order in different environments.
Crear una tabla
Utilice la instrucción CREATE TABLE para crear tablas sin particiones, tablas particionadas, tablas externas y tablas agrupadas (clustered). Para obtener más información, consulte CREATE TABLE. Vea el siguiente ejemplo de SQL:
-- Create a partitioned table named students
CREATE TABLE IF NOT EXISTS students
( id BIGINT,
name STRING,
age BIGINT,
birth DATE)
partitioned BY (gender STRING);
Insertar datos
Emplee 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.
Evite usar la instrucciónINSERT INTOpara insertar datos, ya que podría provocar duplicaciones inesperadas. Se recomienda utilizarINSERT OVERWRITEen su lugar. Para obtener más información, consulte Insert or overwrite data .
Vea el siguiente ejemplo de SQL:
-- Insert data
INSERT OVERWRITE students PARTITION(gender='boy') VALUES (1,'ZhangSan',15,DATE '2008-05-15') ;
La instrucción INSERT puede activar la función Compare DDL Columns, que permite comparar las columnas de la cláusula SELECT de una instrucción SQL con las columnas de la tabla de destino.
Esta función no es compatible cuando el proyecto de MaxCompute tiene habilitado el modelo de tres capas basado en esquemas a nivel de proyecto, pero no a nivel de inquilino.
-- Compare DDL columns
INSERT OVERWRITE TABLE dws_user_info_all_di PARTITION (dt='${workflow.var}')
SELECT COALESCE(a.uid, b.uid) AS uid
, b.gender
, b.age_range
, b.zodiac
, a.region
, a.device
, a.identity
, a.method
, a.url
, a.referer
, a.time
-- ...The FROM/JOIN and other clauses are omitted here. Complete them based on your actual business requirements.
;
Consultar datos
Use la instrucción SELECT para realizar consultas anidadas, consultas agrupadas, ordenamientos y otras operaciones. Para obtener más información, consulte SELECT syntax. A continuación se muestra un ejemplo de SQL:
-- (Optional) Enable full table scan at the project level. This operation requires elevated permissions.
-- SETPROJECT odps.sql.allow.fullscan=true;
-- Enable full table scan at the session level. This setting is effective only for the current session.
SET odps.sql.allow.fullscan=true;
-- Query information about all male students and sort the results by ID in ascending order.
SELECT * FROM students WHERE gender='boy' ORDER BY id;
De forma predeterminada, los usuarios de RAM no tienen permiso para consultar tablas de producción. Para solicitar permisos de consulta sobre tablas de producción, diríjase a Security Center. Para obtener más información sobre los ajustes preestablecidos de permisos de datos de MaxCompute y el control de acceso a datos en DataWorks, consulte MaxCompute data permission presets and access control. Para conocer más sobre la autorización basada en comandos de MaxCompute, vea MaxCompute authorization.
Usar funciones SQL
MaxCompute admite funciones integradas y funciones definidas por el usuario (UDF). Cree y utilice funciones SQL según sus necesidades de negocio. Para obtener más información sobre las funciones integradas, consulte Built-in functions overview. Para conocer más sobre las UDF, vea UDF overview. Los siguientes ejemplos muestran cómo usar funciones SQL.
-
Funciones integradas: Las funciones integradas vienen preinstaladas en MaxCompute y se pueden invocar directamente. Con base en los ejemplos anteriores de creación de tablas, inserción y consulta de datos, utilice la función
dateaddpara modificar la columnabirthcon una unidad y un desplazamiento específicos. Vea el siguiente ejemplo de comando:--Enable full table scan at session level. Only effective for this 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 utilizar una UDF, escriba el código de la función, cárguelo como recurso y registre la función. Para obtener más información, consulte Create a MaxCompute UDF.
Depurar un nodo SQL de MaxCompute
-
Configure los parámetros correspondientes en el panel Run Configuration, ubicado en el lado derecho de la página de edición del nodo.
Parámetro
Descripción
Compute resource
Seleccione el recurso de cómputo de MaxCompute que asoció al espacio de trabajo.
Compute quota
Seleccione la cuota de cómputo que proporciona los recursos necesarios (CPU y memoria) para los trabajos de cómputo. Se admiten las siguientes opciones:
Project default quota: Valor predeterminado. Utiliza la cuota de cómputo predeterminada a nivel de proyecto.
Specified quota: Permite seleccionar manualmente una cuota de cómputo específica.
Interactive mode routing rules: El sistema asigna automáticamente una cuota de cómputo según las reglas de enrutamiento de MaxCompute. No se requiere configuración adicional tras seleccionar esta opción. Para obtener más información sobre las reglas de enrutamiento, consulte Using quotas for computing resources.
Si no hay ninguna cuota de cómputo disponible, haga clic en Create Compute Quota en la lista desplegable y cree una cuota en la consola de MaxCompute. Para obtener más información, consulte Create a compute quota.
Resource group
Seleccione un resource group de programación que haya superado la prueba de conectividad con el recurso de cómputo. Para obtener más información, consulte Resource groups for scheduling.
En el cuadro de diálogo de parámetros de la barra de herramientas, seleccione el origen de datos de MaxCompute que creó previamente y, a continuación, haga clic en Run para ejecutar la tarea SQL de MaxCompute.
Ejecutar un nodo directamente en DataStudio corresponde al modo de depuración. En este modo, el nodo solo valida la lógica SQL y no depende de la configuración de programación. Si necesita ejecutar el nodo dentro de un flujo de trabajo (modo de programación), complete las siguientes configuraciones para que el flujo de trabajo pueda ejecutarlo:
En la configuración de ejecución, seleccione el Compute resource necesario.
Configure las propiedades de Scheduling del nodo.
Haga clic en Deploy para desplegar el nodo en el entorno de producción.
Consultar resultados
-
Los resultados se muestran 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.
NotaDebido a los cambios en la información de la zona horaria de China publicados por la Organización Internacional de Normalización (ISO), podrían presentarse discrepancias en la visualización de fechas para ciertos periodos al ejecutar instrucciones SQL relacionadas a través de DataWorks: una diferencia de 5 minutos y 52 segundos para fechas entre 1900 y 1928, y una diferencia de 9 segundos para fechas anteriores a 1900.
Registro de ejecución: En la pestaña
de los resultados, haga clic en el enlace Logview para consultar los registros. Para obtener más información, consulte LogView.Ordenar resultados: En la página de resultados, haga clic en el menú desplegable del encabezado de la columna correspondiente, seleccione el orden ascendente o descendente en la sección Sort y, a continuación, confirme para ordenar los resultados.
Consultar columnas BLOB: MaxCompute admite el tipo de datos BLOB para almacenar objetos binarios, como imágenes y archivos de audio. En los resultados, haga doble clic en una celda de este tipo de datos para previsualizar el contenido en el cuadro de diálogo Current Field Value (las imágenes se renderizan directamente y el texto se muestra en modo de solo lectura). Cambie entre Blob View, Text View y JSON View mediante los botones ubicados en la parte inferior del cuadro de diálogo.
Visualización en notación científica: En el entorno de desarrollo de datos de DataWorks, los valores numéricos de los resultados de las consultas podrían mostrarse en notación científica. Se trata de un problema de visualización del frontend que no afecta los valores reales de los datos. Para garantizar que los valores numéricos se muestren correctamente, utilice la función
CASTen su SQL y convierta el tipo de datos manualmente. Por ejemplo, apliqueCAST(column_name AS STRING)para convertir un valor numérico a cadena y mostrarlo. También puede comprobar la precisión de los datos en el módulo DataAnalysis.
Pasos siguientes
Configure schedule settings: Si los nodos del directorio del proyecto requieren programación periódica, configure la Scheduling Policy y las propiedades de programación relacionadas en el panel Scheduling Settings, situado en el lado derecho del nodo.
Deploy a node: Si necesita desplegar una tarea en el entorno de producción, haga clic en el ícono
de la página para iniciar el proceso de despliegue. Los nodos del directorio del proyecto se programarán periódicamente únicamente después de desplegarse en el entorno de producción.
Apéndice 1: Orden de ejecución de SQL en distintos entornos
Cuando ejecute instrucciones relacionadas con palabras clave (SET, USE) en distintos entornos de DataWorks para un nodo SQL de MaxCompute, the execution order varies.
- Running in Data Studio: All keyword statements (SET, USE) in the current task code are merged and prepended to all SQL statements.
Ejecución en el entorno de programación: Las instrucciones se ejecutan en el mismo orden en que están escritas.
Suponga que un nodo contiene el siguiente código definido.
SET a=b;
CREATE TABLE name1(id string);
SET c=d;
CREATE TABLE name2(id string);
El orden de ejecución varía según el entorno, tal como se detalla a continuación:
Instrucción SQL | Data Studio | Entorno de programación |
Primera instrucción SQL | | |
Segunda instrucción SQL | | |
Apéndice 2: Prácticas de lakehouse
Para leer y escribir en tablas de datos de DLF desde tareas SQL de MaxCompute, utilice proyectos externos de MaxCompute (External Project). Estos proyectos permiten acceder en tiempo real a los metadatos y a los datos mediante la asignación de catálogos de DLF. Delegan la gestión de permisos a DLF y admiten el acceso a metadatos, así como operaciones de lectura y escritura sobre datos administrados por DLF y almacenados en OSS. Para obtener más información, consulte MaxCompute external projects.
Preguntas frecuentes
P: ¿La tabla de destino de una tarea programada automáticamente debe ser una tabla particionada?
R: No. La tabla de destino de una tarea programada automáticamente no tiene que estar particionada. Si no especifica campos de partición al crear la tabla, cada ejecución de INSERT OVERWRITE sobrescribirá por completo la tabla no particionada.
P: ¿Cómo manejo el error ODPS-0429311 de MaxCompute?
R: Este error puede relacionarse tanto con los parámetros de entrada como con la forma en que está escrito el SQL del nodo. Una causa común es que varias tareas ejecuten simultáneamente operaciones DDL sobre la misma tabla, lo que genera un conflicto de metadatos. Intente ajustar la configuración correspondiente (por ejemplo, establezca el parámetro de concurrencia en false) y compruebe si el problema se resuelve.
Referencias
Para consultar más ejemplos de tareas SQL de MaxCompute, revise los siguientes temas: