Todos os produtos
Search
Central de documentação

DataWorks:Nó SQL do MaxCompute

Última atualização: Jul 20, 2026

O nó SQL do MaxCompute no DataWorks agenda periodicamente tarefas SQL do MaxCompute e se integra a outros tipos de nó em um fluxo de trabalho unificado. O SQL do MaxCompute utiliza uma sintaxe semelhante à SQL, adequada para o processamento distribuído de dados em grande escala (nível de TB) nos quais resultados em tempo real não são críticos.

Introdução

O SQL do MaxCompute processa e consulta dados no MaxCompute. Ele oferece suporte a operações SQL comuns, como SELECT, INSERT, UPDATE e DELETE, além de sintaxe e funções específicas do MaxCompute. Para obter mais informações sobre a sintaxe SQL, consulte SQL overview.

Pré-requisitos

  • Você possui bound a MaxCompute compute engine ao workspace do DataWorks.

  • (Opcional, para usuários RAM) O usuário RAM responsável pelo desenvolvimento da tarefa deve ser membro do workspace e ter a função Development ou Workspace Administrator. A função Workspace Administrator inclui permissões amplas e deve ser concedida com cautela. Para obter mais informações sobre como adicionar um membro a um workspace, consulte Add members to a workspace.

    Nota

    Se você estiver usando uma conta Alibaba Cloud, poderá pular esta etapa.

Limitações

As seguintes limitações se aplicam ao desenvolvimento SQL no nó SQL do MaxCompute:

Categoria

Descrição

Comentários

Apenas comentários de linha única que começam com -- são suportados. Comentários de múltiplas linhas (/ ... /) não são suportados.

Para obter mais informações, consulte MaxCompute SQL comments.

As seguintes limitações também se aplicam aos comentários:

  • Não é possível adicionar um comentário após uma instrução que contenha apenas uma palavra-chave, como SET ou USE.

  • Não utilize ponto e vírgula (;) em um comentário.

  • Não adicione um comentário após uma instrução que termine com ponto e vírgula (;), pois isso marca o fim da instrução.

Envio de SQL

O ODPS SQL não suporta instruções SET ou USE isoladas. Elas devem ser executadas juntamente com uma instrução SQL específica.

Desenvolvimento SQL

O tamanho do código SQL não pode exceder128 KB, e o número de instruções SQL não pode ultrapassar200.

Resultados de consulta

Apenas instruções SQL que começam com SELECT ou WITH podem gerar conjuntos de resultados formatados.

Os resultados de consulta possuem as seguintes limitações:

  • Se o resultado da consulta exceder 10.000 linhas, serão exibidas no máximo 10.000 linhas.

  • Caso o resultado da consulta ultrapasse 10 MB, o erro Result is too large, exceed the limit size: 10MB será retornado.

Nota

Se você encontrar limitações nos resultados de consulta, poderá baixar os resultados para sua máquina local utilizando os seguintes métodos:

Observações

  • Certifique-se de que a conta usada para executar tarefas SQL do MaxCompute tenha as permissões necessárias no projeto correspondente do MaxCompute. Para obter mais informações, consulte DataWorks On MaxCompute permission control e MaxCompute authorization.

  • A execução de tarefas SQL do MaxCompute depende de recursos de cota. Se sua tarefa demorar muito para ser executada, acesse o console do MaxCompute para verificar o consumo de recursos de cota e garantir que haja recursos suficientes disponíveis para a execução. Para obter mais informações, consulte View quota resource consumption.

  • Ao desenvolver tarefas de nó SQL do MaxCompute, parâmetros especiais, como caminhos do OSS, devem estar entre aspas duplas. A ausência de aspas pode causar exceções de análise da tarefa, resultando em falhas na execução.

  • Ao executar instruções relacionadas a palavras-chave (SET, USE) em diferentes ambientes no DataWorks, a ordem de execução varia. Para obter mais informações, consulte Appendix 1: SQL execution order in different environments.

  • Em alguns casos extremos, como falta de energia no servidor ou failover primário/secundário, o DataWorks pode não conseguir encerrar completamente as tarefas relacionadas do MaxCompute. Nessa situação, acesse o projeto correspondente do MaxCompute para terminate the job.

  • Quando o objetivo principal de uma tarefa é criar uma nova tabela (por exemplo, DROP TABLE seguido por CREATE TABLE AS SELECT), o mecanismo do MaxCompute realiza uma verificação prévia de metadados antes da execução. Se a tabela já existir, um erro é retornado diretamente. Para a criação inicial da tabela, use CREATE TABLE IF NOT EXISTS. Para gravações subsequentes de dados, utilize INSERT OVERWRITE TABLE ... SELECT ....

  • É possível controlar o modo de execução SQL definindo o parâmetro odps.task.sql.realtime. Defina o valor como true para ativar o modo Online para execução em tempo real, ou defina o valor como false para forçar o modo Offline. Coloque este parâmetro no início do seu código SQL, antes das instruções SQL de negócio. Exemplo:

    SET odps.task.sql.realtime=true; -- Your business SQL statements SELECT * FROM my_table;

  • A modificação direta de um tipo de dados de coluna de STRING para tipos complexos, como STRUCT, não é suportada. Se o erro ODPS-0130071 for retornado, verifique se a conversão de tipo de campo está em conformidade com as regras semânticas e evite operações de conversão de tipo não suportadas.

Criar um nó SQL do MaxCompute

Para obter informações sobre como criar um nó, consulte Create a MaxCompute SQL node.

Desenvolver um nó SQL do MaxCompute

Na página de edição do nó SQL do MaxCompute, realize as seguintes operações.

Desenvolver código SQL

O DataWorks fornece parâmetros de agendamento para passar valores dinamicamente ao código em cenários de agendamento. Você pode definir variáveis em um nó SQL do MaxCompute usando o formato ${variable_name} e, em seguida, atribuir valores às variáveis na seção Scheduling Parameters das Scheduling Settings. Para obter mais informações sobre os formatos suportados, consulte Scheduling parameters. O SQL do MaxCompute usa uma sintaxe semelhante à SQL padrão e suporta instruções DDL, DML e DQL, além de sintaxe específica do MaxCompute. Para sintaxe detalhada e exemplos, consulte SQL overview.

Os três exemplos a seguir são fornecidos para diferentes cenários:

Nota
  • Quando as funções estendidas do MaxCompute 2.0 utilizam novos tipos de dados, você deve adicionar SET odps.sql.type.system.odps2=true; antes da instrução SQL que contém a função, além de enviá-la e executá-la junto com a instrução SQL para que os novos tipos de dados funcionem corretamente. Para obter mais informações sobre os tipos de dados 2.0, consulte MaxCompute 2.0 data types.

  • As instruções SQL do MaxCompute são executadas em uma ordem diferente nos ambientes Data Studio e Operation Center. Para obter mais informações, consulte Appendix 1: SQL execution order in different environments.

Criar uma tabela

Utilize a instrução CREATE TABLE para criar tabelas não particionadas, tabelas particionadas, tabelas externas e tabelas clusterizadas. Para obter mais informações, consulte CREATE TABLE. O seguinte exemplo de SQL é fornecido:

-- Create a partitioned table named students CREATE TABLE IF NOT EXISTS students ( id BIGINT, name STRING, age BIGINT, birth DATE) partitioned BY (gender STRING);

Inserir dados

Use a instrução INSERT INTO ou INSERT OVERWRITE para inserir ou atualizar dados em uma tabela de destino. Para obter mais informações, consulte Insert or overwrite data.

Evite usar a instrução INSERT INTO para inserir dados, pois isso pode causar duplicação inesperada de dados. Recomendamos o uso de INSERT OVERWRITE . Para obter mais informações, consulte Insert or overwrite data .

O seguinte exemplo de SQL é fornecido:

-- Insert data INSERT OVERWRITE students PARTITION(gender='boy') VALUES (1,'ZhangSan',15,DATE '2008-05-15') ;

A instrução INSERT pode acionar o recurso Compare DDL Columns, que permite comparar as colunas na cláusula SELECT de uma instrução SQL com as colunas da tabela de destino.

Este recurso não é suportado quando o projeto MaxCompute tem o modelo de três camadas baseado em esquema ativado no nível do projeto, mas não no nível do locatário.

-- 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 dados

Utilize a instrução SELECT para realizar consultas aninhadas, consultas agrupadas, ordenação e outras operações. Para obter mais informações, consulte SELECT syntax. O seguinte exemplo de SQL é fornecido:

-- (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;

Nota

Por padrão, os usuários RAM não têm permissão para consultar tabelas de produção. Para solicitar permissões de consulta de tabelas de produção, acesse o Security Center. Para obter mais informações sobre predefinições de permissão de dados do MaxCompute e controle de acesso a dados no DataWorks, consulte MaxCompute data permission presets and access control. Para obter mais informações sobre autorização baseada em comandos do MaxCompute, consulte MaxCompute authorization.

Usar funções SQL

O MaxCompute suporta funções integradas e funções definidas pelo usuário (UDFs). Você pode criar e usar funções SQL conforme suas necessidades de negócio. Para obter mais informações sobre funções integradas, consulte Built-in functions overview. Para obter mais informações sobre UDFs, consulte UDF overview. Os exemplos a seguir mostram como usar funções SQL.

  • Funções integradas: As funções integradas são pré-instaladas no MaxCompute e podem ser chamadas diretamente. Com base nos exemplos anteriores de criação de tabela, inserção de dados e consulta de dados, você pode usar a função dateadd para modificar a coluna birth por uma unidade e deslocamento especificados. O seguinte exemplo de comando é fornecido:

    --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;
  • Funções definidas pelo usuário (UDFs): Para usar uma UDF, você deve escrever o código da função, fazer upload dele como source e registrar a função. Para obter mais informações, consulte Create a MaxCompute UDF.

Depurar um nó SQL do MaxCompute

  1. Configure os parâmetros relevantes no painel Run Configuration no lado direito da página de edição do nó.

    Parâmetro

    Descrição

    Compute resource

    Selecione o recurso de computação do MaxCompute que você associou ao workspace.

    Compute quota

    Selecione a cota de computação para fornecer os recursos de computação necessários (CPU e memória) para jobs de computação.

    Se nenhuma cota de computação estiver disponível, clique em Create Compute Quota na lista suspensa e crie uma cota no console do MaxCompute. Para obter mais informações, consulte Create a compute quota.

    Resource group

    Selecione um grupo de recursos de agendamento que tenha passado no teste de conectividade com o recurso de computação. Para obter mais informações, consulte Resource groups for scheduling.

  2. Na caixa de diálogo de parâmetros na barra de ferramentas, selecione a fonte de dados do MaxCompute que você criou e, em seguida, clique em Run para executar a tarefa SQL do MaxCompute.

Nota

Executar um nó diretamente no DataStudio corresponde ao modo de depuração. Nesse modo, o nó valida apenas a lógica SQL e não depende da configuração de agendamento. Se você precisar executar o nó em um fluxo de trabalho (modo de agendamento), deverá concluir as seguintes configurações antes que o fluxo de trabalho possa executar o nó:

  1. Na configuração de execução, selecione o Compute resource necessário.

  2. Configure as propriedades de Scheduling do nó.

  3. Faça o Deploy do nó para o ambiente de produção.

Os nós For-each não suportam execução direta no DataStudio. Você deve primeiro implantar a tarefa e depois testá-la usando o recurso Smoke Test no Operation Center.

Visualizar resultados

  • Os resultados são exibidos em formato de planilha. Você pode realizar operações no DataWorks, abrir os resultados em uma planilha ou copiar e colar o conteúdo em um arquivo Excel local.

    Nota

    Devido a alterações nas informações de fuso horário da china divulgadas pela Organização Internacional para Padronização (ISO), podem ocorrer discrepâncias na exibição de datas para determinados períodos ao executar instruções SQL relacionadas por meio do DataWorks: uma diferença de 5 minutos e 52 segundos para datas entre 1900 e 1928, e uma diferença de 9 segundos para datas anteriores a 1900.

  • Log de execução: Na aba image dos resultados, clique em Logview para visualizar os logs. Para obter mais informações, consulte LogView.

  • Ordenar resultados: Na página de resultados, clique em menu suspenso no cabeçalho da coluna correspondente, selecione a ordem crescente ou decrescente na seção Sort e, em seguida, confirme para ordenar os resultados.

  • Visualizar colunas BLOB: O MaxCompute suporta o tipo de dados BLOB para armazenar objetos binários, como imagens e arquivos de áudio. Nos resultados, clique em duas vezes em uma célula desse tipo de dados para visualizar o conteúdo na caixa de diálogo Current Field Value (imagens são renderizadas diretamente; texto é exibido em modo somente leitura). Você pode alternar entre Blob View, Text View e JSON View usando os botões na parte inferior da caixa de diálogo.

  • Exibição em notação científica: No ambiente de desenvolvimento de dados do DataWorks, valores numéricos nos resultados de consulta podem ser exibidos em notação científica. Trata-se de uma questão de exibição do frontend e não afeta os valores reais dos dados. Para garantir que os valores numéricos sejam exibidos conforme esperado, use a função CAST em seu SQL para converter manualmente o tipo de dados. Por exemplo, use CAST(column_name AS STRING) para converter um valor numérico em string para exibição. Você também pode verificar a precisão dos dados no módulo DataAnalysis.

Próximas etapas

  • Configure schedule settings: Se os nós no diretório do projeto precisarem ser agendados periodicamente, configure a Scheduling Policy e as propriedades de agendamento relacionadas no painel Scheduling Settings no lado direito do nó.

  • Deploy a node: Se uma tarefa precisar ser implantada no ambiente de produção, clique em ícone image na página para iniciar o processo de implantação. Os nós no diretório do projeto são agendados periodicamente somente após serem implantados no ambiente de produção.

Apêndice 1: Ordem de execução SQL em diferentes ambientes

Ao executar instruções relacionadas a palavras-chave (SET, USE) em diferentes ambientes do DataWorks para um nó SQL do MaxCompute, a ordem de execução varia.

  • Execução no Data Studio: Todas as instruções de palavra-chave (SET, USE) no código da tarefa atual são mescladas e prefixadas a todas as instruções SQL.

  • Execução no ambiente de agendamento: As instruções são executadas na ordem em que foram escritas.

Suponha que o seguinte código esteja definido em um nó.

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

A ordem de execução varia por ambiente da seguinte forma:

Instrução SQL

Data Studio

Ambiente de agendamento

Primeira instrução SQL

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

Segunda instrução SQL

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

Apêndice 2: Práticas de Lakehouse

Para ler e gravar em tabelas de dados DLF em tarefas SQL do MaxCompute, utilize projetos externos do MaxCompute (External Project). Projetos externos permitem acesso em tempo real a metadados e dados mapeando catálogos DLF. Eles delegam o gerenciamento de permissões ao DLF e suportam acesso a metadados e operações de leitura/gravação em dados gerenciados pelo DLF armazenados no OSS. Para obter mais informações, consulte MaxCompute external projects.

FAQ

Por que um nó SQL do MaxCompute é executado com sucesso diretamente no DataStudio, mas falha ao executar em um fluxo de trabalho?

Executar um nó diretamente no DataStudio corresponde ao modo de depuração, que valida apenas a lógica SQL e não depende da configuração de agendamento. Para executar um nó em um fluxo de trabalho (modo de agendamento), você deve garantir que as seguintes condições sejam atendidas:

  1. Na configuração de execução, selecione o Compute resource necessário.

  2. Configure as propriedades de Scheduling do nó.

  3. Faça o Deploy do nó para o ambiente de produção.

Após a conclusão dessas configurações, o nó SQL do MaxCompute será executado normalmente no fluxo de trabalho.

O que devo fazer se o MERGE INTO demorar muito ou tiver desempenho inferior ao INSERT OVERWRITE?

Análise da causa

A instrução MERGE INTO requer uma leitura completa da tabela alvo e um JOIN completo para determinar o status de cada linha (se deve inserir, atualizar ou excluir). Em comparação com o INSERT OVERWRITE, essa abordagem introduz uma sobrecarga significativa de Shuffle, mesmo quando ambas as operações envolvem varreduras completas de tabela.

Soluções de otimização

  • Reduza a simultaneidade do Mapper aumentando o tamanho do split para minimizar a contenção de recursos.

  • Particione a tabela alvo e use pruning de partição para varrer apenas as partições afetadas.

  • Reescreva a operação MERGE INTO como um INSERT OVERWRITE em duas etapas que utilize partições dinâmicas para regravar apenas as partições afetadas.

  • Use INSERT OVERWRITE com uma dica MapJoin para substituir o MERGE INTO. Isso permite que o Mapper carregue uma parte dos dados da tabela alvo na memória para correspondência, reduzindo a sobrecarga de Shuffle.

Cenários aplicáveis

Embora o MERGE INTO possa reduzir o tempo de computação em cenários de atualização de tabelas transacionais ao consolidar operações de inserção e exclusão, e atualmente não seja cobrado separadamente, tenha cautela ao avaliar o desempenho do MERGE INTO em cenários de varredura completa de tabela em grande escala.

Os resultados da consulta estão normais, mas os dados ficam anormais após o INSERT. Os valores dos campos tornam-se 0 ou NULL. Como solucionar isso?

Realize as seguintes verificações:

  1. Verifique se dados duplicados em sua lógica SQL fazem com que funções de janela, como ROW_NUMBER, retornem resultados instáveis. Recomendamos deduplicar os dados antes de aplicar ORDER BY.

  2. Confirme se o escopo de dados das operações de consulta e gravação é exatamente o mesmo, incluindo intervalos de tempo e condições WHERE. Diferenças nas condições de filtro podem causar discrepâncias nos resultados.

  3. Se suspeitar de problemas de estabilidade de dados, crie uma tabela temporária e grave nela os dados intermediários filtrados pela condição WHERE. Verifique a precisão dos dados na tabela temporária antes de realizar a operação final de gravação.

Como otimizar o armazenamento ao usar SQL para limpar logs do SLS, o que causa o armazenamento duplo dos dados?

Aplique as seguintes otimizações:

  1. Defina um ciclo de vida curto (como 3 dias) para a tabela intermediária que armazena Raw Logs, evitando o consumo de armazenamento a longo prazo.

  2. Após a conclusão da análise dos dados, exclua prontamente os dados da partição na tabela intermediária para liberar recursos de armazenamento.

Referências

Para obter mais exemplos de tarefas SQL do MaxCompute, consulte os seguintes tópicos: