Todos os produtos
Search
Central de documentação

DataWorks:Desenvolver uma tarefa ODPS SQL

Última atualização: Oct 16, 2026

Uma tarefa MaxCompute SQL usa sintaxe semelhante à SQL para processar dados em grande escala (nível de TB) de forma distribuída quando não há necessidade de resultados em tempo real. Este tópico descreve como desenvolver uma tarefa SQL no DataWorks e apresenta notas importantes de uso.

Introdução

A ODPS SQL processa e consulta dados no MaxCompute. Ela oferece suporte a operações SQL comuns, como SELECT, INSERT, UPDATE e DELETE, além de sintaxes e funções específicas do MaxCompute. Com a ODPS SQL, você escreve instruções semelhantes a SQL para consultar e processar dados sem precisar criar lógicas complexas de processamento. Para obter mais informações sobre a sintaxe SQL, consulte SQL Overview.

Limitações

Os nós ODPS SQL no DataWorks apresentam as seguintes limitações:

Categoria

Descrição

Uso de comentários

O sistema aceita apenas comentários de linha única no formato -- conteúdo do comentário. Comentários de várias linhas no formato / conteúdo do comentário / não são suportados.

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

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

  • Não adicione comentários após instruções de palavra-chave, como SET ou USE.

  • Não use ponto e vírgula (;) dentro de comentários.

  • Não adicione comentários após uma instrução terminada com ponto e vírgula (;).

Envio de SQL

Não use instruções SET ou USE isoladamente; execute-as sempre acompanhadas de outras instruções SQL.

Ao usar a instrução USE para alternar para outro projeto do MaxCompute, as instruções SET presentes no código SQL não terão efeito.

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

Desenvolvimento SQL

O tamanho do código SQL não pode exceder 128 KB, e a quantidade de instruções SQL está limitada a 200.

Resultado da consulta

Somente instruções SQL iniciadas com SELECT ou WITH retornam um conjunto de resultados formatado.

Os resultados de consultas estão sujeitos às seguintes limitações:

  • Se o resultado ultrapassar 10.000 linhas, o sistema exibirá no máximo 10.000 linhas.

  • Se o tamanho do resultado for superior a 10 MB, o sistema retornará a mensagem de erro Result is too large, exceed the limit size: 10MB.

Nota

Diante dessas limitações, baixe o resultado da consulta para visualização local usando um dos métodos abaixo:

Notas de uso

  • Verifique se a conta usada para executar a tarefa ODPS SQL tem as permissões necessárias no projeto MaxCompute correspondente. Para mais detalhes, consulte DataWorks On MaxCompute permission control e MaxCompute permissions.

  • Tarefas MaxCompute SQL exigem recursos de cota para execução. Se uma tarefa demorar muito para rodar, acesse o console do MaxCompute para verificar o consumo de cotas e garantir que haja recursos suficientes disponíveis. Consulte Computing Resources - Quota Management para mais informações.

  • Ao desenvolver tarefas em um nó ODPS SQL, envolva parâmetros especiais, como endereços OSS, entre aspas duplas ("). A ausência das aspas causa erros de análise e falha na tarefa.

  • Em situações extremas, como quedas de energia ou failover entre primário e secundário, o DataWorks pode não conseguir encerrar completamente as tarefas relacionadas no MaxCompute. Nesse cenário, acesse o projeto MaxCompute correspondente para terminate the job.

  • A ordem de execução das instruções de palavra-chave (SET e USE) varia conforme o ambiente do DataWorks.

    • No DataStudio: Todas as instruções de palavra-chave (SET e USE) são agrupadas e executadas antes das demais instruções SQL.

    • No ambiente de agendamento: As instruções seguem a ordem em que foram escritas.

    Considere o seguinte código definido em um nó.

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

    A tabela a seguir detalha a ordem de execução nos diferentes ambientes.

    SQL executado

    DataStudio

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

Editar código: Exemplos simples

Comandos SQL

Os comandos MaxCompute SQL usam sintaxe similar à SQL padrão e aceitam instruções DDL, DML e DQL, além de sintaxes específicas do MaxCompute. Consulte SQL overview para ver requisitos de sintaxe e exemplos de uso de cada comando. O exemplo simples abaixo demonstra como desenvolver e executar comandos SQL.

Nota
  • Para usar novos tipos de dados com as funções estendidas do MaxCompute 2.0, adicione SET odps.sql.type.system.odps2=true; antes da instrução SQL e envie ambos juntos. Isso habilita o uso dos novos tipos de dados. Veja mais em 2.0 Data Types Version.

  • O DataWorks disponibiliza parâmetros de agendamento para permitir passagem dinâmica de valores em cenários agendados. Defina variáveis no código do seu nó ODPS SQL usando o formato ${variable_name} e atribua valores na seção Properties > Parameter. Consulte Supported formats for scheduling parameters para conhecer os formatos suportados.

  • Criar uma tabela

    Use a instrução CREATE TABLE para criar tabelas não particionadas, particionadas, externas ou clusterizadas. Consulte CREATE TABLE para mais detalhes. Exemplo de instrução 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); 
  • Inserir dados

    Use a instrução INSERT INTO ou INSERT OVERWRITE para inserir ou atualizar dados em uma tabela de destino. Veja Insert or overwrite data (INSERT INTO | INSERT OVERWRITE) para mais informações. Exemplos de instruções 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 a instrução INSERT INTO para inserir dados, pois isso pode causar duplicação acidental. Recomendamos o uso da instrução INSERT OVERWRITE como alternativa. Consulte Insert or overwrite data para saber mais.

  • Consultar dados

    A instrução SELECT permite realizar operações como consultas aninhadas, agrupamentos e ordenação. Para mais detalhes, veja SELECT syntax. Exemplos de instruções 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

    Por padrão, usuários RAM não têm permissão de consulta em tabelas de produção. Para consultar essas tabelas, envie uma solicitação no Security Center. Consulte MaxCompute data permission control details para entender as predefinições de permissões de dados do MaxCompute e o controle de acesso no DataWorks. Para conceder permissões via comandos no MaxCompute, veja Manage user permissions by using commands.

Funções SQL

O MaxCompute oferece funções integradas e funções definidas pelo usuário (UDFs) para desenvolvimento e análise de dados. Consulte Overview of built-in functions para saber mais sobre funções integradas e MaxCompute UDF overview para UDFs. O exemplo abaixo ilustra o uso de funções SQL.

  • Funções integradas: Já vêm pré-instaladas no MaxCompute e podem ser chamadas diretamente. Seguindo o exemplo anterior, use a função dateadd para modificar a coluna birth conforme unidade e intervalo especificados. Exemplo de comando:

    -- 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;
  • Funções definidas pelo usuário (UDFs): Para usar uma UDF, escreva o código da função, faça upload dele como resource e registre a função. Consulte Create and use a UDF para mais detalhes.

Execução e resultados

  • Os resultados da execução aparecem diretamente em formato de planilha. É possível interagir com os dados no DataWorks, abri-los como planilha ou copiar e colar o conteúdo em um arquivo Excel local. Consulte Debug tasks para mais informações.

    Nota

    Devido a um ajuste nas informações de fuso horário da china publicado pela Organização Internacional de Normalização (ISO), pode haver discrepância na exibição de datas ao executar consultas SQL relevantes no DataWorks. A diferença é de 5 minutos e 52 segundos para datas entre 1900 e 1928, e de 9 segundos para datas anteriores a 1900.

  • Log de execução: Clique em na aba Operational Logs para visualizar o Logview. Consulte View job information by using Logview V2.0 para mais detalhes.

  • Resultados retornados:

    • Consulte as informações de todos os meninos e ordene os resultados por ID em ordem crescente.

      +------------+------------+------------+------------+------------+
      | 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 a coluna birth conforme unidade e intervalo especificados.

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

    Na página de resultados da consulta, ordene os dados por um campo específico e baixe o resultado. Consulte Process query results para mais informações.

Editar código: Exemplos avançados

Para exemplos mais avançados de tarefas ODPS SQL, consulte os tópicos a seguir:

Perguntas frequentes

  • P: Por que minha tarefa ODPS SQL fica muito tempo no estado de espera?

    R: Tarefas ODPS SQL precisam de recursos de cota para serem executadas. Se a tarefa permanecer em espera por muito tempo, acesse o console do MaxCompute para verificar o consumo de cotas e assegurar que existem recursos suficientes disponíveis. Consulte Computing Resources - Quota Management para mais detalhes.

  • P: Por que a mensagem de erro "You have No privilege 'odps:xxxx' on xxxx" aparece ao executar uma tarefa ODPS SQL?

    R: A conta usada para rodar a tarefa ODPS SQL precisa ter as permissões adequadas no projeto MaxCompute correspondente. Consulte MaxCompute permissions para mais informações.