Todos os produtos
Search
Central de documentação

PolarDB:Converter tabelas particionadas

Última atualização: Jun 28, 2026

Use ALTER TABLE para converter uma tabela entre três estratégias de particionamento: comum (não particionada), particionada por intervalo e particionada por intervalo com incremento automático.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Um cluster PolarDB for MySQL 8.0 com versão de revisão 8.0.2.2.0 ou posterior

Para verificar a versão de revisão, consulte Consultar a versão do mecanismo.

Como funciona

Uma tabela particionada por intervalo com incremento automático usa um ponto de transição para separar as partições de intervalo definidas explicitamente das partições gerenciadas automaticamente. Todos os dados até o ponto de transição pertencem às partições de intervalo nomeadas. Dados além desse ponto acionam a criação automática de partições no intervalo especificado, sem necessidade de executar ADD PARTITION manualmente.

Ao remover a definição de intervalo de uma tabela, todas as partições de intervalo existentes tornam-se partições de intervalo padrão.

Regras de conversão

Conversão

Suporte

Método

Tabela comum → tabela particionada por intervalo com incremento automático

Sim

ALTER TABLE ... PARTITION BY

Tabela particionada por intervalo com incremento automático → tabela comum

Não

—

Tabela particionada por intervalo → tabela particionada por intervalo com incremento automático

Sim

ALTER TABLE ... PARTITION BY (8.0.2.2.0+) ou SET INTERVAL (8.0.2.2.1+)

Tabela particionada por intervalo com incremento automático → tabela particionada por intervalo

Sim

ALTER TABLE ... PARTITION BY (8.0.2.2.0+) ou SET INTERVAL() (8.0.2.2.1+)

Após converter para uma tabela particionada por intervalo com incremento automático, o banco de dados cria novas partições automaticamente quando dados são inseridos além do ponto de transição. Não é possível adicionar partições explicitamente a esse tipo de tabela.

Sintaxe

Sintaxe 1 — redefinir todo o esquema de particionamento:

ALTER TABLE table_name partition_options;

Em que partition_options é:

PARTITION BY
    { RANGE{(expr) | COLUMNS(column_list)} }
    { INTERVAL(type, expr) | INTERVAL(expr) }
    [(partition_definition [, partition_definition] ...)]

Em que partition_definition é:

PARTITION partition_name
        [VALUES LESS THAN {expr | MAXVALUE}]
        [[STORAGE] ENGINE [=] engine_name]
        [COMMENT [=] 'string' ]
        [DATA DIRECTORY [=] 'data_dir']
        [INDEX DIRECTORY [=] 'index_dir']
        [MAX_ROWS [=] max_number_of_rows]
        [MIN_ROWS [=] min_number_of_rows]
        [TABLESPACE [=] tablespace_name]

Sintaxe 2 — alternar o intervalo em uma tabela particionada por intervalo existente (requer 8.0.2.2.1 ou posterior):

ALTER TABLE table_name SET { INTERVAL(type, expr) | INTERVAL(expr) };

Para desativar o particionamento por intervalo e reverter para uma tabela particionada por intervalo, execute SET INTERVAL() sem argumentos.

Parâmetros

Parâmetro

Descrição

table_name

Nome da tabela

RANGE(expr)

Expressão de particionamento. Deve resultar em um valor INT; tipos de string não são suportados

column_list

Lista de colunas para RANGE COLUMNS(); expressões não são suportadas

INTERVAL(type)

Tipo de tempo do intervalo. Valores suportados: YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND. Se omitido, o tipo numérico será usado

INTERVAL(expr)

Valor do intervalo. Quando type for SECOND, o valor deve ser 60 ou superior

MAXVALUE

Valor máximo da partição

engine_name

Nome do mecanismo de armazenamento

Converter uma tabela comum em uma tabela particionada por intervalo com incremento automático

Defina uma partição de intervalo inicial para estabelecer o ponto de transição. A inserção de dados além desse limite cria automaticamente novas partições mensais (ou de qualquer outro intervalo configurado).

CREATE TABLE orders(
  orderkey BIGINT NOT NULL,
  custkey  BIGINT NOT NULL,
  orderdate DATE NOT NULL
);

-- Convert to an interval range partitioned table.
-- Partition p0 holds data before 2021-10-01 (the transition point).
-- Data from 2021-10-01 onward creates monthly partitions automatically.
ALTER TABLE orders
PARTITION BY RANGE COLUMNS(orderdate) INTERVAL(MONTH, 1) (
  PARTITION p0 VALUES LESS THAN('2021-10-01')
);

Converter uma tabela particionada por intervalo em uma tabela particionada por intervalo com incremento automático

Dois métodos estão disponíveis. Ambos adicionam um intervalo a uma tabela já particionada por intervalo.

Método 1: Redefinir o esquema de particionamento (requer 8.0.2.2.0 ou posterior)

Use este método para alterar tanto a chave de particionamento quanto o intervalo em uma única instrução.

CREATE TABLE orders(
  orderkey BIGINT NOT NULL,
  custkey  BIGINT NOT NULL,
  orderdate DATE NOT NULL
)
PARTITION BY RANGE(orderkey) (
  PARTITION p0 VALUES LESS THAN(10000000)
);

-- Redefine the partition scheme: switch the key to orderdate and add a monthly interval.
ALTER TABLE orders
PARTITION BY RANGE COLUMNS(orderdate) INTERVAL(MONTH, 1) (
  PARTITION p0 VALUES LESS THAN('2021-10-01')
);

Método 2: Definir o intervalo em uma tabela particionada por intervalo existente (requer 8.0.2.2.1 ou posterior)

Use este método quando a tabela já estiver particionada pela chave correta e você precisar apenas ativar o particionamento por intervalo com incremento automático.

CREATE TABLE orders(
  orderkey BIGINT NOT NULL,
  custkey  BIGINT NOT NULL,
  orderdate DATE NOT NULL
)
PARTITION BY RANGE COLUMNS(orderdate) (
  PARTITION p0 VALUES LESS THAN('2021-10-01')
);

-- Activate interval partitioning with a monthly interval.
ALTER TABLE orders SET INTERVAL(MONTH, 1);

Converter uma tabela particionada por intervalo com incremento automático em uma tabela particionada por intervalo

Remover a definição de intervalo converte todas as partições de intervalo existentes em partições de intervalo nomeadas.

Método 1: Redefinir o esquema de particionamento (requer 8.0.2.2.0 ou posterior)

CREATE TABLE orders(
  orderkey BIGINT NOT NULL,
  custkey  BIGINT NOT NULL,
  orderdate DATE NOT NULL
)
PARTITION BY RANGE(orderkey) INTERVAL(100000) (
  PARTITION p0 VALUES LESS THAN(10000000)
);

-- Redefine without the INTERVAL clause to convert to a range partitioned table.
ALTER TABLE orders
PARTITION BY RANGE COLUMNS(orderdate) (
  PARTITION p0 VALUES LESS THAN('2021-10-01')
);

Método 2: Limpar o intervalo (requer 8.0.2.2.1 ou posterior)

Execute SET INTERVAL() sem argumentos para desativar o particionamento por intervalo com incremento automático. As partições de intervalo existentes tornam-se partições de intervalo comuns.

CREATE TABLE orders(
  orderkey BIGINT NOT NULL,
  custkey  BIGINT NOT NULL,
  orderdate DATE NOT NULL
)
PARTITION BY RANGE(orderkey) INTERVAL(100000) (
  PARTITION p0 VALUES LESS THAN(10000000)
);

-- Disable interval partitioning. Existing interval partitions are retained as range partitions.
ALTER TABLE orders SET INTERVAL(); /* Switch an interval range partitioned table to a range partitioned table without specifying the interval type and value. */