O PolarDB for PostgreSQL (Compatible with Oracle) oferece uma sintaxe simplificada para criar tabelas com particionamento hash, permitindo especificar diretamente o número de partições.
O particionamento hash distribui as linhas entre as partições ao calcular um valor de hash para a coluna da chave de partição e atribuir cada linha a uma partição com base nesse valor. Esse mecanismo gera partições com tamanhos aproximadamente iguais, sem exigir a definição de intervalos de valores explícitos.
Crie partições hash
CREATE TABLE ... PARTITION BY HASH (part_params) PARTITIONS number;
|
Parâmetro |
Descrição |
|
|
Coluna da chave de partição. |
|
|
Número de partições hash a criar. |
Exemplo: O comando a seguir cria uma tabela com quatro partições hash na coluna deptno.
CREATE TABLE part_hash (deptno NUMBER, deptname VARCHAR(32))
PARTITION BY HASH(deptno) PARTITIONS 4;
Crie subpartições hash
Use o subparticionamento hash para dividir ainda mais cada partição de uma tabela particionada por RANGE, LIST ou HASH.
CREATE TABLE ... PARTITION BY part_strategy (part_params)
SUBPARTITION BY HASH (part_params) SUBPARTITIONS number
(table_partitions_list);
|
Parâmetro |
Descrição |
|
|
Tipo de particionamento das partições de nível superior. Valores válidos: |
|
|
Coluna da chave de partição. |
|
|
Número de subpartições hash por partição. |
|
|
Lista de definições de partições. |
Particionamento RANGE com subpartições HASH
A instrução abaixo particiona uma tabela de vendas por trimestre (time_id) e cria quatro subpartições hash por trimestre com base em cust_id. A primeira partição (sales_q1_2006) define três subpartições nomeadas; as demais usam a contagem padrão de quatro.
CREATE TABLE part_test
(prod_id NUMBER(6),
cust_id NUMBER,
time_id DATE,
channel_id CHAR(1),
promo_id NUMBER(6),
quantity_sold NUMBER(3),
amount_sold NUMBER(10,2)
)
PARTITION BY RANGE (time_id) SUBPARTITION BY HASH (cust_id)
SUBPARTITIONS 4
(PARTITION sales_q1_2006 VALUES LESS THAN (TO_DATE('01-APR-2006','dd-MON-yyyy'))
(SUBPARTITION q1_europe,
SUBPARTITION q1_asia,
SUBPARTITION q1_americas
),
PARTITION sales_q2_2006 VALUES LESS THAN (TO_DATE('01-JUL-2006','dd-MON-yyyy')),
PARTITION sales_q3_2006 VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy')),
PARTITION sales_q4_2006 VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy'))
);
Particionamento HASH com subpartições HASH
O exemplo a seguir cria uma tabela com quatro partições hash em prod_id, subdivididas em quatro subpartições hash em cust_id.
CREATE TABLE part_test
(prod_id NUMBER(6),
cust_id NUMBER,
time_id DATE,
channel_id CHAR(1),
promo_id NUMBER(6),
quantity_sold NUMBER(3),
amount_sold NUMBER(10,2)
)
PARTITION BY HASH (prod_id) SUBPARTITION BY HASH (cust_id)
PARTITIONS 4 SUBPARTITIONS 4;