Todos os produtos
Search
Central de documentação

PolarDB:RANGE-HASH

Última atualização: Jun 28, 2026

O particionamento RANGE-HASH combina a facilidade de gerenciamento do particionamento RANGE com a distribuição uniforme de dados do particionamento HASH. A partição de primeiro nível RANGE ou RANGE COLUMNS organiza os dados em intervalos baseados em valores, ideal para séries temporais, ciclos de faturamento ou arquivamento por período. A subpartição de segundo nível HASH ou KEY distribui as linhas uniformemente dentro de cada intervalo e evita hotspots em uma única partição.

Use RANGE-HASH quando sua carga de trabalho apresentar ambas as características a seguir:

  • As consultas filtram ou aplicam pruning com base em uma dimensão de intervalo (como data ou valor da transação).

  • Os dados dentro de cada intervalo não se distribuem uniformemente entre os nós, o que causa hotspots.

Sintaxe

CREATE TABLE [schema.]table_name
  table_definition
  PARTITION BY RANGE {(expr) | COLUMNS(column_list)}
  SUBPARTITION BY {[LINEAR] HASH(expr) [SUBPARTITIONS number]
                  | [LINEAR] KEY [ALGORITHM={1|2}] (column_list)}
  (partition_definition [, partition_definition] ...);

Em que partition_definition é:

PARTITION partition_name
  VALUES LESS THAN {(expr | value_list) | MAXVALUE}
  (subpartition_definition [, subpartition_definition] ...)

E subpartition_definition é:

SUBPARTITION subpartition_name

Parâmetros

Parâmetro

Descrição

expr

Expressão de particionamento. Aceita apenas o tipo INT. Não há suporte para tipos string. Para particionar por uma coluna de data ou string, use RANGE COLUMNS(column_list).

column_list

Lista de colunas de particionamento. Não aceita expressões.

number

Número de subpartições.

value

Valor limite da partição.

value_list

Lista de valores limite. Usado com RANGE COLUMNS().

MAXVALUE

Representa o maior valor possível e captura todas as linhas além do último limite explícito.

partition_name

Nome da partição. Deve ser exclusivo na mesma tabela.

subpartition_name

Nome da subpartição. Deve ser exclusivo na mesma tabela.

Exemplos

Particionamento por expressão inteira

Use RANGE (expr) quando a chave de particionamento for uma coluna inteira ou uma expressão inteira.

CREATE TABLE sales_range_hash_1
(
  s_id        varchar(20),
  dept_no     INT,
  part_no     INT,
  country     varchar(20),
  date        DATE,
  amount      INT,
  primary key (s_id, amount)
)
PARTITION BY RANGE (amount)
SUBPARTITION BY KEY(s_id) SUBPARTITIONS 3
(
  PARTITION p1 VALUES LESS THAN (1000),
  PARTITION p2 VALUES LESS THAN (2000),
  PARTITION p3 VALUES LESS THAN (3000),
  PARTITION p4 VALUES LESS THAN (4000)
);

Esse comando crie 12 partições físicas (4 × 3): 4 partições RANGE por amount, cada uma dividida em 3 subpartições KEY por s_id.

Particionamento por lista de colunas

Use RANGE COLUMNS(column_list) quando a chave de particionamento for uma data, uma string ou uma combinação de várias colunas. Diferentemente de RANGE (expr), o RANGE COLUMNS aceita colunas não inteiras diretamente.

CREATE TABLE sales_range_hash_2
(
  s_id        varchar(20),
  dept_no     INT,
  part_no     INT,
  country     varchar(20),
  date        DATE,
  amount      INT,
  primary key (s_id, date)
)
PARTITION BY RANGE COLUMNS(date)
SUBPARTITION BY KEY(s_id) SUBPARTITIONS 3
(
  PARTITION p1 VALUES LESS THAN('2023-01-01'),
  PARTITION p2 VALUES LESS THAN('2023-02-01'),
  PARTITION p3 VALUES LESS THAN('2023-03-01'),
  PARTITION p4 VALUES LESS THAN('2023-04-01')
);

Esse comando crie 12 partições físicas (4 × 3): 4 partições RANGE COLUMNS por date, cada uma dividida em 3 subpartições KEY por s_id.

Observações de uso

  • expr aceita apenas INT. Ao usar RANGE (expr), a expressão de particionamento deve resultar em um número inteiro. Para particionar por uma coluna de data ou string, use RANGE COLUMNS(column_list).

  • Os nomes das subpartições devem ser exclusivos na mesma tabela. Não é permitido reutilizar o nome de uma subpartição em partições diferentes.