Todos os produtos
Search
Central de documentação

MaxCompute:Desenvolver uma tarefa ODPS SQL

Última atualização: Jul 05, 2026

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

Introdução

O ODPS SQL processa e consulta dados no MaxCompute. Ele 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 o ODPS SQL, você escreve instruções semelhantes a SQL para consultar e processar dados sem criar lógicas complexas de processamento. Para obter mais informações sobre a sintaxe SQL, consulte Visão geral da SQL.

Limitações

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

Categoria

Descrição

Uso de comentários

Há suporte apenas para 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 têm suporte.

Para obter mais informações, consulte Comentários do MaxCompute SQL.

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

Instruções SET ou USE não podem ser usadas isoladamente. Execute-as sempre acompanhadas de outras instruções SQL.

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

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

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

  • Se o resultado ultrapassar 10.000 linhas, serão exibidas no máximo 10.000 linhas.

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

Nota

Ao encontrar essas 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 obter mais informações, consulte Controle de permissões do DataWorks no MaxCompute e Permissões do MaxCompute.

  • 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. Para mais detalhes, consulte Recursos de computação - Gerenciamento de cotas.

  • Ao desenvolver uma tarefa em um nó ODPS SQL, envolva parâmetros especiais, como endereços OSS, entre aspas duplas ("). Caso contrário, ocorrerá um erro de análise e a tarefa falhará.

  • Em situações extremas, como falta de energia no servidor ou failover primário/secundário, o DataWorks pode não conseguir encerrar completamente as tarefas relacionadas no MaxCompute. Nesse cenário, acesse o projeto MaxCompute correspondente para encerrar o 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 descreve a ordem de execução nos diferentes ambientes.

    SQL executada

    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 oferecem suporte a instruções DDL, DML e DQL, além de sintaxes específicas do MaxCompute. Para mais informações sobre requisitos de sintaxe e exemplos de uso de cada comando SQL, consulte Visão geral da SQL. O exemplo simples a seguir demonstra como desenvolver e executar comandos SQL.

Nota
  • Ao usar novos tipos de dados com funções estendidas do MaxCompute 2.0, adicione SET odps.sql.type.system.odps2=true; antes da instrução SQL e envie-os juntos para habilitar os novos tipos de dados. Para obter mais informações, consulte Versão de tipos de dados 2.0.

  • O DataWorks disponibiliza parâmetros de agendamento para permitir a passagem dinâmica de parâmetros 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. Para saber mais sobre os formatos suportados para parâmetros de agendamento, consulte Formatos suportados para parâmetros de agendamento.

  • Criar uma tabela

    Use a instrução CREATE TABLE para criar tabelas não particionadas, particionadas, externas ou clusterizadas. Para mais detalhes, consulte CREATE TABLE. 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. Para mais informações, consulte Inserir ou sobrescrever dados (INSERT INTO | INSERT OVERWRITE). 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. Para mais informações, consulte Inserir ou sobrescrever dados.

  • Consultar dados

    A instrução SELECT permite realizar operações como consultas aninhadas, agrupamentos e ordenação. Para mais detalhes, consulte Sintaxe SELECT. 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ões de consulta em tabelas de produção. Para consultar tabelas de produção, envie uma solicitação no Security Center. Para informações sobre predefinições de permissões de dados do MaxCompute e controle de acesso no DataWorks, consulte Detalhes do controle de permissões de dados do MaxCompute. Para saber como conceder permissões via comandos no MaxCompute, consulte Gerenciar permissões de usuário por meio de comandos.

Funções SQL

O MaxCompute oferece suporte a funções integradas e funções definidas pelo usuário (UDFs) para desenvolvimento e análise de dados. Para mais informações sobre funções integradas, consulte Visão geral das funções integradas. Para detalhes sobre UDFs, consulte Visão geral das UDFs do MaxCompute. O exemplo a seguir mostra como usar funções SQL.

  • Funções integradas: Pré-instaladas no MaxCompute, essas funções podem ser chamadas diretamente. Com base no exemplo anterior, use a função dateadd para modificar a coluna birth por uma 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. Para mais informações, consulte Criar e usar uma UDF.

Execução e resultados

  • Os resultados da execução aparecem diretamente em formato de planilha. Realize operações no DataWorks, abra os resultados em uma planilha ou copie e cole o conteúdo em um arquivo Excel local. Para mais informações, consulte Depurar tarefas.

    Nota

    Devido a um ajuste nas informações de fuso horário da China divulgado pela Organização Internacional de Normalização (ISO), pode haver discrepância temporal 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. Para mais informações, consulte Visualizar informações de jobs usando Logview V2.0.

  • 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 por uma 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 os resultados. Para mais informações, consulte Processar resultados de consulta.

Editar código: Exemplos avançados

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

Perguntas frequentes

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

    R: Tarefas ODPS SQL requerem recursos de cota para execução. Se sua tarefa ficar aguardando por longo período, acesse o console do MaxCompute para verificar o consumo de cotas e assegurar que existam recursos suficientes disponíveis. Para mais informações, consulte Recursos de computação - Gerenciamento de cotas.

  • 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. Para mais detalhes, consulte Permissões do MaxCompute.