Todos os produtos
Search
Central de documentação

PolarDB:CREATE TABLE ... PARTITION BY HASH

Última atualização: Jun 28, 2026

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

part_params

Coluna da chave de partição.

number

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

part_strategy

Tipo de particionamento das partições de nível superior. Valores válidos: RANGE, LIST, HASH.

part_params

Coluna da chave de partição.

number

Número de subpartições hash por partição.

table_partitions_list

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;

Tópicos relacionados