Todos os produtos
Search
Central de documentação

MaxCompute:Operações de partição

Última atualização: Oct 22, 2026

Adicione, exclua, mescle, renomeie, inspecione e trunque partições em tabelas do MaxCompute.

Visão geral das operações

Operation

Description

Role

Platforms

Add a partition

Adiciona uma ou mais partições a uma tabela particionada.

Requer permissão Alter.

As plataformas a seguir suportam estes comandos:

Modify partition update time

Redefine o LastModifiedTime de uma partição para a hora atual e recalcula seu ciclo de vida.

Modify a partition value

Renomeia valores de partição.

Merge partitions

Combina várias partições em uma única partição de destino.

List all partitions

Lista todas as partições de uma tabela.

View partition information

Exibe metadados de uma partição específica.

Delete a partition

Remove uma ou mais partições de uma tabela.

Truncate a partition

Remove dados das partições sem excluí-las.

Limitações

Restrição

Limite

Tipos de dados compatíveis com colunas de chave de partição

TINYINT, SMALLINT, INT, BIGINT, CHAR, VARCHAR, STRING

Níveis máximos de partição por tabela

6

Máximo de partições por tabela

60.000

Máximo de partições consultadas simultaneamente

10.000

Mesclagem de partições em tabelas transacionais

Não compatível

Adicionar uma partição

Adicione uma ou mais partições a uma tabela particionada existente.

Notas de uso

  • Em tabelas com partição multinível, especifique valores para todas as colunas de chave de partição ao adicionar uma partição.

  • Esta operação adiciona apenas valores de partição, não colunas de chave de partição.

Sintaxe

ALTER TABLE <table_name> ADD [IF NOT EXISTS] PARTITION <pt_spec> [PARTITION <pt_spec> PARTITION <pt_spec>...];

Parâmetros

Parâmetro

Obrigatório

Descrição

table_name

Sim

Nome da tabela particionada.

IF NOT EXISTS

Não

Suprime o erro caso a partição já exista.

pt_spec

Sim

Partição a adicionar, no formato (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col é uma coluna de chave de partição e partition_col_value é seu valor. Os nomes das colunas de chave de partição não diferenciam maiúsculas de minúsculas. Os valores de partição diferenciam maiúsculas de minúsculas.

Exemplos

Os exemplos a seguir utilizam uma tabela particionada chamada sale_detail. Para criar esta tabela, consulte Create and delete tables.

CREATE TABLE IF NOT EXISTS sale_detail(
  shop_name     STRING,
  customer_id   STRING,
  total_price   DOUBLE)
PARTITIONED BY (sale_date STRING, region STRING);
  • Adicionar uma única partição

    Adicione uma partição para a região de Hangzhou em dezembro de 2025.

    ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date='202512', region='hangzhou');
  • Adicionar várias partições simultaneamente

    Adicione duas partições para as regiões de Pequim e Xangai em dezembro de 2025.

    ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date='202512', region='beijing') PARTITION (sale_date='202512', region='shanghai');
  • Especificação de partição incompleta (erro)

    Especificar apenas parte de uma chave de partição multinível retorna um erro. Tanto sale_date quanto region são obrigatórios.

    ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date='20260111');
    
    -- Error returned:
    -- FAILED: ODPS-0130071:[1,58] Semantic analysis exception - provided partition spec does not match table partition spec
  • Adicionar uma partição a uma Delta Table

    -- Create a Delta Table.
    CREATE TABLE delta_table_test_par (
      pk BIGINT NOT NULL PRIMARY KEY,
      val BIGINT NOT NULL)
      PARTITIONED BY (dd STRING, hh STRING)
      TBLPROPERTIES ("transactional"="true");
    
    -- Add a partition.
    ALTER TABLE delta_table_test_par ADD PARTITION (dd='01', hh='01');
    
    CREATE TABLE delta_table_test_nonpar (
      pk BIGINT NOT NULL PRIMARY KEY,
      val BIGINT NOT NULL)
      TBLPROPERTIES ("transactional"="true");
  • Modificar propriedades de uma Delta Table com PK

    -- Update the number of buckets for a partitioned PK Delta Table.
    ALTER TABLE delta_table_test_par SET TBLPROPERTIES("write.bucket.num"="64");
    
    -- Update the number of buckets for a non-partitioned PK Delta Table.
    -- After the update, historical data is redistributed based on the new bucket count.
    ALTER TABLE delta_table_test_nonpar REWRITE TBLPROPERTIES("write.bucket.num"="128");
    
    -- Update the retain property. This property specifies the number of hours
    -- for querying historical data states via Time Travel.
    ALTER TABLE delta_table_test_par SET TBLPROPERTIES("acid.data.retain.hours"="60");

Após adicionar partições, verifique-as com SHOW PARTITIONS. Consulte List all partitions.

Modificar horário de atualização da partição

A operação touch redefine o LastModifiedTime de uma partição para a hora atual e aciona o recálculo do ciclo de vida.

Notas de uso

Para tabelas com partição multinível, especifique valores para todas as colunas de chave de partição.

Sintaxe

ALTER TABLE <table_name> TOUCH PARTITION (<pt_spec>);

Parâmetros

Parâmetro

Obrigatório

Descrição

table_name

Sim

Nome da tabela particionada. Retorna um erro se a tabela não existir.

pt_spec

Sim

Partição a atualizar, no formato (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col é uma coluna de chave de partição e partition_col_value é seu valor. Retorna um erro se a partição não existir.

Exemplos

-- Update the LastModifiedTime of a specific partition in the sale_detail table.
ALTER TABLE sale_detail TOUCH PARTITION (sale_date='202512', region='shanghai');

Modificar um valor de partição

O comando RENAME altera os valores de uma partição existente.

Notas de uso

  • Esta operação altera apenas valores de partição, não renomeia colunas de chave de partição.

  • Em tabelas com partição multinível, especifique valores para todas as colunas de chave de partição.

Sintaxe

ALTER TABLE <table_name> PARTITION (<pt_spec>) RENAME TO PARTITION (<new_pt_spec>);

Parâmetros

Parâmetro

Obrigatório

Descrição

table_name

Sim

Nome da tabela particionada.

pt_spec

Sim

Especificação atual da partição, no formato (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col é uma coluna de chave de partição e partition_col_value é seu valor. Retorna um erro se a partição não existir.

new_pt_spec

Sim

Nova especificação da partição, no formato (partition_col1 = new_partition_col_value1, partition_col2 = new_partition_col_value2, ...). partition_col é uma coluna de chave de partição e new_partition_col_value é o novo valor.

Exemplos

-- Rename a partition in the sale_detail table.
ALTER TABLE sale_detail PARTITION (sale_date = '201312', region = 'hangzhou') RENAME TO PARTITION (sale_date = '201310', region = 'beijing');

Mesclar partições

O comando MERGE PARTITION combina várias partições em uma única partição de destino. Os dados são movidos para o destino e as partições de origem são excluídas.

Notas de uso

  • Não há suporte para tabelas externas.

  • Mesclar partições de uma tabela clusterizada remove o clustering da partição resultante.

  • É possível mesclar no máximo 4.000 partições por vez.

Sintaxe

ALTER TABLE <table_name> MERGE [IF EXISTS] PARTITION (<predicate>) [, PARTITION(<predicate2>) ...] OVERWRITE PARTITION (<fullpartitionSpec>) [PURGE];

Parâmetros

Parâmetro

Obrigatório

Descrição

table_name

Sim

Nome da tabela particionada.

IF EXISTS

Não

Suprime o erro se nenhuma partição corresponder à condição. Caso nenhuma partição se qualifique, nenhuma nova partição será criada. Operações concorrentes de INSERT, RENAME ou DROP durante a mesclagem ainda causam erro.

predicate

Sim

Condição que as partições de origem devem atender.

fullpartitionSpec

Sim

Especificação da partição de destino.

PURGE

Não

Limpa o diretório de sessão. Por padrão, logs dos últimos três dias são limpos. Para mais informações, consulte Purge.

Exemplos

Mesclar partições por condição

-- View current partitions.
SHOW PARTITIONS sale_detail;

-- Sample result:
-- sale_date=202512/region=beijing
-- sale_date=202512/region=shanghai
-- sale_date=202602/region=beijing

-- Merge all partitions where sale_date='202512' into a single destination partition.
ALTER TABLE sale_detail MERGE PARTITION(sale_date='202512') OVERWRITE PARTITION(sale_date='202601', region='hangzhou');

-- View partitions after the merge.
SHOW PARTITIONS sale_detail;

-- Sample result:
-- sale_date=202601/region=hangzhou
-- sale_date=202602/region=beijing

Mesclar partições específicas com PURGE

-- Merge two named partitions into a new destination partition.
ALTER TABLE sale_detail MERGE IF EXISTS
  PARTITION(sale_date='202601', region='hangzhou'),
  PARTITION(sale_date='202602', region='beijing')
  OVERWRITE PARTITION(sale_date='202603', region='shanghai') PURGE;

-- View partitions after the merge.
SHOW PARTITIONS sale_detail;

-- Sample result:
-- sale_date=202603/region=shanghai

Listar todas as partições

Liste todas as partições de uma tabela. Retorna um erro se a tabela não existir ou não for particionada.

Sintaxe

SHOW PARTITIONS <table_name>;

Parâmetros

Parâmetro

Obrigatório

Descrição

table_name

Sim

Nome da tabela particionada.

Exemplos

-- List all partitions in the sale_detail table.
SHOW PARTITIONS sale_detail;

-- Sample result:
-- sale_date=202603/region=shanghai

Visualizar informações da partição

Exiba metadados de uma partição específica, incluindo tamanho, horário de criação e última modificação.

Sintaxe

DESC <table_name> PARTITION (<pt_spec>);

Parâmetros

Parâmetro

Obrigatório

Descrição

table_name

Sim

Nome da tabela particionada.

pt_spec

Sim

Partição a inspecionar, no formato partition_col1=col1_value1, partition_col2=col2_value1.... Para tabelas com partição multinível, especifique todos os valores de partição.

Exemplos

-- View information for a specific partition.
DESC sale_detail PARTITION (sale_date='202603',region='shanghai');

-- Sample result:
+------------------------------------------------------------------------------------+
| PartitionSize: 0                                                                   |
+------------------------------------------------------------------------------------+
| CreateTime:               2026-01-13 11:35:49                                      |
| LastDDLTime:              2026-01-13 11:35:49                                      |
| LastModifiedTime:         2026-01-13 11:35:49                                      |
+------------------------------------------------------------------------------------+

OK

Excluir uma partição

Remova uma ou mais partições de uma tabela. É possível excluir partições específicas pelo nome ou usar condições de filtro para exclusão em massa.

Excluir partições reduz o uso de armazenamento. Para automatizar a exclusão de partições antigas, utilize o recurso Lifecycle.

Notas de uso

  • Cada cláusula de filtro de partição pode referenciar apenas uma coluna de chave de partição.

  • Funções usadas em expressões de filtro devem ser funções escalares integradas.

Sintaxe

Excluir partições específicas

-- Delete one partition.
ALTER TABLE <table_name> DROP [IF EXISTS] PARTITION <pt_spec>;

-- Delete multiple partitions.
ALTER TABLE <table_name> DROP [IF EXISTS] PARTITION <pt_spec>,PARTITION <pt_spec>[,PARTITION <pt_spec>....];

Excluir partições por condição de filtro

ALTER TABLE <table_name> DROP [IF EXISTS] PARTITION <partition_filtercondition>;

Parâmetros

Parâmetro

Obrigatório

Descrição

table_name

Sim

Nome da tabela particionada.

IF EXISTS

Não

Suprime o erro caso a partição não exista.

pt_spec

Sim

Partição a excluir, no formato (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col é uma coluna de chave de partição e partition_col_value é seu valor. Os nomes das colunas de chave de partição não diferenciam maiúsculas de minúsculas. Os valores de partição diferenciam maiúsculas de minúsculas.

partition_filtercondition

Não

Obrigatório ao usar exclusão baseada em filtro. Consulte Partition filter condition syntax.

Sintaxe da condição de filtro de partição

As operações de exclusão e truncamento suportam a mesma sintaxe de filtro de partição:

partition_filtercondition
    : PARTITION (<partition_col> <relational_operators> <partition_col_value>)
    | PARTITION (scalar(<partition_col>) <relational_operators> <partition_col_value>)
    | PARTITION (<partition_filtercondition1> AND|OR <partition_filtercondition2>)
    | PARTITION (NOT <partition_filtercondition>)
    | PARTITION (<partition_filtercondition1>)[,PARTITION (<partition_filtercondition2>), ...]

Elemento

Descrição

partition_col

Nome da coluna de chave de partição.

relational_operators

Operador relacional. Para detalhes, consulte Operators.

partition_col_value

Valor ou expressão regular para comparação com o valor da coluna de chave de partição. O tipo de dados deve corresponder ao tipo da coluna de chave de partição.

scalar()

Função escalar integrada. Processa o valor da coluna de chave de partição antes da comparação.

NOT, AND, OR

Operadores lógicos compatíveis dentro de uma única cláusula de filtro.

Cláusulas separadas por vírgula

Várias cláusulas de filtro separadas por vírgulas são combinadas com o operador OR.

Exemplos

Excluir partições específicas

-- Delete one partition.
ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date='202603',region='shanghai');

-- Delete two partitions at once.
ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date='202412',region='hangzhou'),PARTITION(sale_date='202412',region='shanghai');

Excluir partições por condição de filtro (tabela de nível único)

-- Create a single-level partitioned table with sample partitions.
CREATE TABLE IF NOT EXISTS sale_detail_del(
shop_name     STRING,
customer_id   STRING,
total_price   DOUBLE)
PARTITIONED BY (sale_date STRING);

-- Add partitions.
ALTER TABLE sale_detail_del ADD IF NOT EXISTS
PARTITION (sale_date= '201910') PARTITION (sale_date= '201911') PARTITION (sale_date= '201912')
PARTITION (sale_date= '202001') PARTITION (sale_date= '202002') PARTITION (sale_date= '202003')
PARTITION (sale_date= '202004') PARTITION (sale_date= '202005') PARTITION (sale_date= '202006')
PARTITION (sale_date= '202007');

-- Delete by comparison.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date < '201911');
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date >= '202007');

-- Delete by pattern matching.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date LIKE '20191%');

-- Delete by value list.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date IN ('202002','202004','202006'));

-- Delete by range.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date BETWEEN '202001' AND '202007');

-- Delete using a scalar function.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(substr(sale_date, 1, 4) = '2020');

-- Delete with OR condition.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date < '201912' OR sale_date >= '202006');

-- Delete with AND condition.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date > '201912' AND sale_date <= '202004');

-- Delete with NOT condition.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(NOT sale_date > '202004');

-- Multiple filter clauses separated by commas are combined with OR.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date < '201911'), PARTITION(sale_date >= '202007');

-- Delete by regular expression.
ALTER TABLE sale_detail_del ADD IF NOT EXISTS
PARTITION (sale_date= '2019-10-05')
PARTITION (sale_date= '2019-10-06')
PARTITION (sale_date= '2019-10-07');

ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date RLIKE '2019-\\d+-\\d+');

Excluir partições de uma tabela com partição multinível

-- Create a multi-level partitioned table with sample partitions.
CREATE TABLE IF NOT EXISTS region_sale_detail(
shop_name     STRING,
customer_id   STRING,
total_price   DOUBLE)
PARTITIONED BY (sale_date STRING , region STRING );

-- Add partitions.
ALTER TABLE region_sale_detail ADD IF NOT EXISTS
PARTITION (sale_date= '201910',region = 'shanghai') PARTITION (sale_date= '201911',region = 'shanghai')
PARTITION (sale_date= '201912',region = 'shanghai') PARTITION (sale_date= '202001',region = 'shanghai')
PARTITION (sale_date= '202002',region = 'shanghai') PARTITION (sale_date= '201910',region = 'beijing')
PARTITION (sale_date= '201911',region = 'beijing') PARTITION (sale_date= '201912',region = 'beijing')
PARTITION (sale_date= '202001',region = 'beijing') PARTITION (sale_date= '202002',region = 'beijing');

-- Comma-separated filter clauses are combined with OR.
-- This deletes all partitions where sale_date < '201911' OR region = 'beijing'.
ALTER TABLE region_sale_detail DROP IF EXISTS PARTITION(sale_date < '201911'),PARTITION(region = 'beijing');

-- To combine conditions with AND, place both conditions in a single clause.
-- This deletes only partitions where sale_date < '201911' AND region = 'beijing'.
ALTER TABLE region_sale_detail DROP IF EXISTS PARTITION(sale_date < '201911', region = 'beijing');
Cada cláusula de filtro pode referenciar apenas uma coluna de chave de partição. Usar AND para combinar várias colunas de chave de partição em uma única cláusula de filtro retorna um erro.
-- The following statement fails because it references two partition key columns
-- (sale_date and region) with AND in a single filter clause.
ALTER TABLE region_sale_detail DROP IF EXISTS PARTITION(sale_date < '201911' AND region = 'beijing');

-- Error returned:
-- FAILED: ODPS-0130071:[1,82] Semantic analysis exception - invalid column reference region,
-- partition expression must have one and only one column reference

Truncar uma partição

Remova todos os dados das partições especificadas sem excluir as próprias partições.

Trunque pelo nome exato da partição ou por condição de filtro.

Sintaxe

Truncar partições específicas

TRUNCATE TABLE <table_name> PARTITION <pt_spec>[, PARTITION <pt_spec>....];

Truncar partições por condição de filtro

TRUNCATE TABLE <table_name> PARTITION <partition_filtercondition>;

Parâmetros

Parameter

Required

Description

table_name

Sim

Nome da tabela particionada.

pt_spec

Sim

Partição a truncar, no formato (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col é uma coluna de chave de partição e partition_col_value é seu valor. Os nomes das colunas de chave de partição não diferenciam maiúsculas de minúsculas. Os valores de partição diferenciam maiúsculas de minúsculas.

partition_filtercondition

Não

Obrigatório ao usar truncamento baseado em filtro. A condição de filtro não diferencia maiúsculas de minúsculas.

Sintaxe:

partition_filtercondition
    : PARTITION (<partition_col> <relational_operators> <partition_col_value>)
    | PARTITION (scalar(<partition_col>) <relational_operators> <partition_col_value>)
    | PARTITION (<partition_filtercondition1> AND|OR <partition_filtercondition2>)
    | PARTITION (NOT <partition_filtercondition>)
    | PARTITION (<partition_filtercondition1>)[,PARTITION (<partition_filtercondition2>), ...]

Parâmetros:

  • partition_col: Nome da coluna de partição.

  • relational_operators: Operador relacional. Para mais informações, consulte Operators.

  • partition_col_value: Valor de comparação ou expressão regular para a coluna de partição. O tipo de dados deve corresponder ao da coluna de partição.

  • scalar(): Função escalar que transforma o valor da coluna de partição antes de compará-lo com partition_col_value usando o operador relacional especificado.

  • A condição de filtro suporta os seguintes operadores lógicos:

    • NOT: Retorna o complemento da condição de filtro.

    • AND / OR: Combina várias condições de filtro em uma regra geral de correspondência de partição.

  • Vírgula (,): Separa várias cláusulas PARTITION. Cláusulas separadas por vírgula são avaliadas com lógica OR.

Exemplos

Truncar partições específicas

-- Truncate one partition.
TRUNCATE TABLE sale_detail PARTITION(sale_date='202601',region='hangzhou');

-- Truncate two partitions at once.
TRUNCATE TABLE sale_detail PARTITION(sale_date='202512',region='hangzhou'),  PARTITION(sale_date='202512',region='shanghai');

Truncar partições por condição de filtro

-- Truncate all partitions where sale_date starts with '2025' and region is 'hangzhou'.
TRUNCATE TABLE sale_detail PARTITION(sale_date LIKE '2025%' AND region='hangzhou');

Truncar uma Delta Table não particionada

-- For non-partitioned tables only. Using this on a partitioned table returns an error.
TRUNCATE TABLE non_par_table;

Referências