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 |
|
|
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 |
|
|
Lista de colunas de particionamento. Não aceita expressões. |
|
|
Número de subpartições. |
|
|
Valor limite da partição. |
|
|
Lista de valores limite. Usado com |
|
|
Representa o maior valor possível e captura todas as linhas além do último limite explícito. |
|
|
Nome da partição. Deve ser exclusivo na mesma tabela. |
|
|
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
expraceita apenas INT. Ao usarRANGE (expr), a expressão de particionamento deve resultar em um número inteiro. Para particionar por uma coluna de data ou string, useRANGE 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.