O particionamento hash distribui linhas entre partições ao aplicar uma operação de módulo a uma expressão derivada da chave de partição. Use esse tipo de particionamento para distribuir dados uniformemente por um número fixo de partições, sem condições de intervalo ou lista.
Sintaxe
CREATE TABLE ... PARTITION BY [LINEAR] HASH(expr) [PARTITIONS number]
( PARTITION partition_name1,
PARTITION partition_name2, ...);
Parâmetros
|
Parâmetro |
Descrição |
|
|
Expressão de partição. Deve retornar um valor INT. Não há suporte para tipos de string. |
|
|
Número de partições hash. |
|
|
Nome da partição. Deve ser único na tabela. |
Funcionamento
Para determinar a qual partição uma linha pertence, o PolarDB avalia a expressão de partição e aplica a seguinte fórmula:
MOD(partition_expression, number_of_partitions)
Por exemplo, com 7 partições e valor de expressão de partição igual a 15, a linha é atribuída à partição MOD(15, 7) = 1.
HASH vs LINEAR HASH
O PolarDB oferece suporte a duas variantes de particionamento hash:
|
HASH |
LINEAR HASH |
|
|
Algoritmo |
Módulo do valor da função hash |
Algoritmo linear, quadrático ou exponencial |
A única diferença sintática é a palavra-chave LINEAR na cláusula PARTITION BY.
Exemplos
Crie uma tabela com particionamento hash
CREATE TABLE sales_hash
(
s_id INT,
dept_no INT,
part_no INT,
country varchar(20),
date DATE,
amount INT,
PRIMARY KEY(s_id)
) PARTITION BY HASH (s_id)
PARTITIONS 7;
Esse comando cria a tabela sales_hash com 7 partições. Cada linha é atribuída a uma partição com base em MOD(s_id, 7).
Crie uma tabela com particionamento LINEAR HASH
CREATE TABLE sales_linear_hash
(
s_id INT,
part_no INT,
country varchar(20),
date DATE,
amount INT,
PRIMARY KEY(s_id)
) PARTITION BY LINEAR HASH (s_id)
PARTITIONS 7;
Esse comando cria a tabela sales_linear_hash com 7 partições e usa um algoritmo linear, quadrático ou exponencial para acelerar a manutenção das partições.