Todos os produtos
Search
Central de documentação

MaxCompute:Operações com colunas

Última atualização: Aug 21, 2026

O MaxCompute permite modificar colunas em tabelas existentes. Adicione ou exclua colunas e altere os tipos de dados para atender aos requisitos de negócios.

Comandos

A tabela a seguir descreve os comandos SQL do MaxCompute para operações com colunas.

Ações

Descrição

Função

Plataforma

Add columns or comments

Adiciona colunas ou comentários a uma tabela particionada ou não particionada existente.

Usuários com permissão Alter na tabela

Execute estes comandos nas seguintes plataformas:

Delete columns

Exclui colunas de uma tabela particionada ou não particionada existente.

Change column data types

Altera o tipo de dados de uma coluna existente.

Change the column order

Ajusta a ordem de uma coluna especificada na tabela.

Change a column name

Modifica o nome de uma coluna em uma tabela particionada ou não particionada existente.

Change a column comment

Atualiza o comentário de uma coluna em uma tabela particionada ou não particionada existente.

Change a column name and comment

Altera simultaneamente o nome e o comentário de uma coluna em uma tabela particionada ou não particionada existente.

Change the NOT NULL property of a column

Modifica a propriedade NOT NULL de uma coluna que não é chave de partição.

Observações de uso

A evolução de schema envolve operações como adicionar colunas com tipos de dados complexos, excluir colunas, reordenar colunas e alterar tipos de dados. Ao reordenar, adicionar e reordenar ou excluir colunas, o comportamento de leitura e gravação da tabela muda e as seguintes limitações se aplicam:

  • Se o tipo de job for MapReduce 1.0, as tarefas Graph não leem nem gravam dados na tabela modificada.

  • Para jobs CUPID, apenas as versões do Spark listadas abaixo leem dados da tabela. A gravação de dados na tabela não é suportada.

    • Spark-2.3.0-odps0.34.0

    • Spark-3.1.1-odps0.34.0

  • Jobs do PAI leem dados da tabela, mas não permitem gravação.

  • Em jobs do Hologres com versão anterior a 1,3, a leitura e a gravação na tabela modificada falham ao referenciá-la como tabela externa.

  • Após a evolução de schema, CLONE TABLE não é suportado.

  • O Streaming Tunnel retorna erro se houver evolução de schema.

Adicionar colunas ou comentários

Adicione colunas ou comentários a uma tabela particionada ou não particionada existente. Para mais informações sobre as restrições, consulte Usage notes. O MaxCompute suporta a adição de colunas do tipo STRUCT, como STRUCT<x: STRING, y: BIGINT> e MAP<STRING, STRUCT<x: DOUBLE, y: DOUBLE>>.

  • Pré-requisitos

    Execute o comando setproject odps.schema.evolution.enable=true; para ativar a evolução de schema.

    • Permissões: Esta é uma propriedade no nível do projeto. Para executar este comando, você deve ser o proprietário do projeto ou ter a função Super_Administrator ou Admin no nível do projeto. Para mais informações, consulte Assign a built-in management role to a user.

    • Tempo de efetivação: A alteração entra em vigor em aproximadamente 10 minutos.

  • Sintaxe

    ALTER TABLE <table_name> 
      ADD COLUMNS [IF NOT EXISTS]
      (<col_name1> <type1> COMMENT ['<col_comment>']
      [, <col_name2> <type2> COMMENT '<col_comment>'...]
      );
  • Parâmetros

    Parâmetro

    Obrigatório

    Descrição

    table_name

    Sim

    Nome da tabela a modificar. As novas colunas são adicionadas ao final da tabela.

    col_name

    Sim

    Nome da nova coluna.

    type

    Sim

    Tipo de dados da nova coluna.

    col_comment

    Não

    Comentário da nova coluna.

  • Exemplos

    • Exemplo 1: Adicionar duas colunas à tabela sale_detail.

      ALTER TABLE sale_detail ADD COLUMNS IF NOT EXISTS(customer_name STRING, education BIGINT);
    • Exemplo 2: Adicionar duas colunas com comentários à tabela sale_detail.

      ALTER TABLE sale_detail ADD COLUMNS (customer_name STRING COMMENT 'Customer', education BIGINT COMMENT 'Education' );
    • Exemplo 3: Adicionar uma coluna de tipo de dados complexo à tabela sale_detail.

      ALTER TABLE sale_detail ADD COLUMNS (region_info struct<province:string, area:string>);
    • Exemplo 4: Ao usar IF NOT EXISTS para adicionar uma coluna já existente, o comando retorna sucesso sem duplicar a coluna.

      -- The statement is successful, but the ID column is not repeatedly added.
      ALTER TABLE sale_detail ADD COLUMNS IF NOT EXISTS(id bigint);
    • Exemplo 5: Adicionar uma coluna a uma tabela Delta.

      CREATE TABLE delta_table_test (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT) 
        TBLPROPERTIES ("transactional"="true");
        
      ALTER TABLE delta_table_test ADD COLUMNS (val2 bigint);

Excluir colunas

Exclua uma ou mais colunas de uma tabela particionada ou não particionada existente. Para mais informações sobre as restrições, consulte Usage notes.

  • Pré-requisitos

    Execute o comando setproject odps.schema.evolution.enable=true; para ativar a evolução de schema.

    • Permissões: Esta é uma propriedade no nível do projeto. Para executar este comando, você deve ser o proprietário do projeto ou ter a função Super_Administrator ou Admin no nível do projeto. Para mais informações, consulte Assign a built-in management role to a user.

    • Tempo de efetivação: A alteração entra em vigor em aproximadamente 10 minutos.

  • Sintaxe

    -- Delete a single column.
    ALTER TABLE <table_name> DROP COLUMN <col_name>;
    
    -- Delete multiple columns.
    ALTER TABLE <table_name> DROP COLUMNS <col_name1>[, <col_name2>...];
  • Parâmetros

    • table_name: Obrigatório. Nome da tabela a modificar.

    • col_name: Obrigatório. Nome da coluna a excluir.

  • Exemplos

    -- Example 1: Delete the customer_id column from the sale_detail table.
    ALTER TABLE sale_detail DROP COLUMNS customer_id;
    
    -- Example 2: Delete the shop_name and total_price columns from the sale_detail table.
    ALTER TABLE sale_detail DROP COLUMNS shop_name, total_price;

Alterar tipos de dados de colunas

Altere o tipo de dados de uma coluna existente. Para mais informações sobre as restrições, consulte Usage notes.

  • Pré-requisitos

    Execute o comando setproject odps.schema.evolution.enable=true; para ativar a evolução de schema.

    • Permissões: Esta é uma propriedade no nível do projeto. Para executar este comando, você deve ser o proprietário do projeto ou ter a função Super_Administrator ou Admin no nível do projeto. Para mais informações, consulte Assign a built-in management role to a user.

    • Tempo de efetivação: A alteração entra em vigor em aproximadamente 10 minutos.

  • Sintaxe

    ALTER TABLE <table_name> CHANGE [COLUMN] <old_column_name> <new_column_name> <new_data_type>;
  • Parâmetros

    Parâmetro

    Obrigatório

    Descrição

    table_name

    Sim

    Nome da tabela que contém a coluna.

    old_column_name

    Sim

    Nome da coluna a modificar.

    new_column_name

    Sim

    Novo nome da coluna.

    old_column_name pode ser igual a new_column_name, indicando que o nome da coluna não será modificado. No entanto, new_column_name não pode ser igual ao nome de nenhuma outra coluna além de old_column_name.

    new_data_type

    Sim

    Novo tipo de dados da coluna.

  • Exemplo

    -- Change the data type of the id field in the sale_detail table from BIGINT to STRING.
    ALTER TABLE sale_detail CHANGE COLUMN id id STRING;
  • Conversões de tipos de dados suportadas

    Nota

    Y indica que a conversão é suportada. N indica que a conversão não é suportada. - indica que a conversão não se aplica. Y() indica que a conversão é suportada se a condição entre parênteses for atendida.

    Data type conversion table

Alterar a ordem das colunas

Altere a ordem das colunas em uma tabela particionada ou não particionada existente. Para mais informações sobre as restrições, consulte Usage notes.

  • Pré-requisitos

    Execute o comando setproject odps.schema.evolution.enable=true; para ativar a evolução de schema.

    • Permissões: Esta é uma propriedade no nível do projeto. Para executar este comando, você deve ser o proprietário do projeto ou ter a função Super_Administrator ou Admin no nível do projeto. Para mais informações, consulte Assign a built-in management role to a user.

    • Tempo de efetivação: A alteração entra em vigor em aproximadamente 10 minutos.

  • Sintaxe

    ALTER TABLE <table_name> CHANGE <old_column_name> <new_column_name> <column_type> AFTER <column_name>;
  • Parâmetros

    Parâmetro

    Obrigatório

    Descrição

    table_name

    Sim

    Nome da tabela a modificar.

    old_column_name

    Sim

    Nome da coluna a mover.

    new_col_name

    Sim

    Novo nome da coluna.

    new_col_name pode ser igual a old_column_name, indicando que o nome da coluna não será modificado. No entanto, new_col_name não pode ser igual a nenhum outro nome de coluna além de old_column_name.

    column_type

    Sim

    Tipo de dados original da coluna. Não pode ser alterado.

    column_name

    Sim

    Move a coluna a reordenar para após column_name.

  • Exemplos

    -- Change the name of the customer column in the sale_detail table to customer_id and move it after the total_price column.
    ALTER TABLE sale_detail CHANGE customer customer_id STRING AFTER total_price;
    
    -- Move the customer_id column in the sale_detail table after the total_price column without changing the column name.
    ALTER TABLE sale_detail CHANGE customer_id customer_id STRING AFTER total_price;

Alterar o nome de uma coluna

Modifique o nome de uma coluna em uma tabela particionada ou não particionada existente.

  • Sintaxe

    ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> RENAME TO <new_col_name>;
  • Parâmetros

    Parâmetro

    Obrigatório

    Descrição

    table_name

    Sim

    Nome da tabela a modificar.

    old_col_name

    Sim

    Nome atual da coluna. A coluna deve existir.

    new_col_name

    Sim

    Novo nome da coluna. O nome da coluna deve ser único dentro da tabela.

  • Exemplo

    -- Rename the customer_name column in the sale_detail table to customer.
    ALTER TABLE sale_detail CHANGE COLUMN customer_name RENAME TO customer;

Alterar o comentário de uma coluna

Modifique o comentário de uma coluna em uma tabela particionada ou não particionada existente.

  • Sintaxe

    ALTER TABLE <table_name> CHANGE COLUMN <col_name> COMMENT '<col_comment>';
  • Parâmetros

    Parâmetro

    Obrigatório

    Descrição

    table_name

    Sim

    Nome da tabela a modificar.

    col_name

    Sim

    Nome da coluna cujo comentário será alterado. A coluna deve existir.

    col_comment

    Sim

    Novo comentário, que deve ser uma string válida. O comprimento máximo é de 1.024 bytes.

  • Exemplo

    -- Change the comment of the customer column in the sale_detail0113 table.
    ALTER TABLE sale_detail0113 CHANGE COLUMN customer COMMENT 'customer';

Alterar o nome e o comentário de uma coluna

Altere o nome e o comentário de uma coluna em uma tabela particionada ou não particionada.

  • Sintaxe

    ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> <new_col_name> <column_type> COMMENT '<col_comment>';
  • Parâmetros

    Parâmetro

    Obrigatório

    Descrição

    table_name

    Sim

    Nome da tabela a modificar.

    old_col_name

    Sim

    Nome atual da coluna a modificar. A coluna deve existir.

    new_col_name

    Sim

    Novo nome da coluna. O nome da coluna deve ser único dentro da tabela.

    column_type

    Sim

    Tipo de dados da coluna.

    col_comment

    Opcional

    Novo comentário. O comprimento máximo é de 1.024 bytes.

  • Exemplo

    -- Change the name of the customer column in the sale_detail table to customer_newname and change its comment to 'customer'.
    ALTER TABLE sale_detail CHANGE COLUMN customer customer_newname STRING COMMENT 'customer';

Alterar a propriedade NOT NULL de uma coluna

Modifique a propriedade NOT NULL de uma coluna que não é chave de partição. Por exemplo, se uma coluna que não é chave de partição estiver definida para não permitir valores NULL, use este comando para permitir valores NULL.

Esta operação é irreversível: após permitir valores NULL, não é possível reverter a coluna para não permiti-los.

  • Execute o comando DESC EXTENDED table_name; para visualizar a propriedade Nullable e determinar se a coluna permite valores NULL:

    • Se Nullable for true, valores NULL são permitidos.

    • Se Nullable for false, valores NULL não são permitidos.

  • Sintaxe

    ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> NULL;
  • Parâmetros

    Parâmetro

    Obrigatório

    Descrição

    table_name

    Sim

    Nome da tabela a modificar.

    old_col_name

    Sim

    Nome da coluna que não é chave de partição a modificar. A coluna deve existir.

  • Exemplo

    -- Create a partitioned table in which the id column cannot be NULL.
    CREATE TABLE null_test(id INT NOT NULL, name STRING) PARTITIONED BY (ds string);
    
    -- View table properties.
    DESC EXTENDED null_test;
    -- The following result is returned:
    +------------------------------------------------------------------------------------+
    | Native Columns:                                                                    |
    +------------------------------------------------------------------------------------+
    | Field    | Type   | Label | ExtendedLabel | Nullable | DefaultValue | Comment      |
    +------------------------------------------------------------------------------------+
    | id       | int    |       |               | false    | NULL         |              |
    | name     | string |       |               | true     | NULL         |              |
    +------------------------------------------------------------------------------------+
    | Partition Columns:                                                                 |
    +------------------------------------------------------------------------------------+
    | ds              | string     |                                                     |
    +------------------------------------------------------------------------------------+
    
    -- Allow the id column to be NULL.
    ALTER TABLE null_test CHANGE COLUMN id NULL;
    -- View table properties.
    DESC EXTENDED null_test;
    -- The following result is returned:
    +------------------------------------------------------------------------------------+
    | Native Columns:                                                                    |
    +------------------------------------------------------------------------------------+
    | Field    | Type   | Label | ExtendedLabel | Nullable | DefaultValue | Comment      |
    +------------------------------------------------------------------------------------+
    | id       | int    |       |               | true     | NULL         |              |
    | name     | string |       |               | true     | NULL         |              |
    +------------------------------------------------------------------------------------+
    | Partition Columns:                                                                 |
    +------------------------------------------------------------------------------------+
    | ds              | string     |                                                     |
    +------------------------------------------------------------------------------------+

Referências

Para mais informações sobre operações com tabelas, consulte os seguintes tópicos: