Todos os produtos
Search
Central de documentação

Hologres:CREATE PARTITION TABLE

Última atualização: Jun 28, 2026

Use a instrução CREATE PARTITION TABLE para dividir uma tabela em tabelas filhas com base em uma coluna de chave de partição. O sistema particiona a tabela pai em diferentes tabelas filhas conforme os valores da chave de partição. Os dados nas tabelas filhas ficam acessíveis publicamente. Cada tabela filha armazena linhas referentes a um valor específico de partição. Para consultar dados em uma tabela particionada, especifique a partição desejada. Assim, o sistema ignora as partições não correspondentes e reduz o volume de dados verificados.

Neste tópico, "tabela pai" refere-se a uma tabela particionada pai e "tabela filha" refere-se a uma tabela particionada filha.

Quando usar tabelas particionadas

Adote tabelas particionadas quando os benefícios da eliminação de partições ou das operações de dados em massa superarem claramente a sobrecarga de gerenciar múltiplas tabelas filhas.

Use tabelas particionadas quando:

  • O volume diário de dados de uma única partição ultrapassar 100 milhões de linhas (para particionamento baseado em data).

  • Você precisar substituir ou excluir em massa todos os dados de uma partição inteira usando TRUNCATE ou DROP. Ambas as operações são concluídas instantaneamente em uma tabela filha e evitam varreduras completas.

Evite tabelas particionadas quando:

  • A source de dados for um sistema de banco de dados. Partições excessivas desperdiçam recursos de I/O. Nesse caso, defina as colunas de filtro mais utilizadas como chave de segmento para ative a aceleração de consultas baseada em índice.

  • O volume diário de dados for inferior a 100 milhões de linhas por partição. Partições pequenas oferecem aceleração de consulta insignificante. Prefira uma granularidade maior.

Lembre-se: cada tabela filha é armazenada como um conjunto separado de arquivos e equivale a uma tabela não particionada no armazenamento de metadados. Um grande número de tabelas filhas aumenta o volume de metadados e gera muitos arquivos pequenos e fragmentos.

Limitações

  • Grave os dados em uma tabela filha, e não diretamente na tabela pai.

    O Realtime Compute for Apache Flink pode gravar dados em uma tabela pai em tempo real. Para obter detalhes, consulte Gravar dados em uma tabela sink particionada do Hologres em tempo real .
  • O Hologres suporta apenas particionamento por lista (PARTITION BY LIST).

  • A chave de partição deve ser uma única coluna.

  • Cada regra de particionamento permite criar apenas uma tabela particionada.

  • Se a tabela pai possuir uma chave primária, a coluna da chave de partição deverá fazer parte dessa chave primária.

Criar uma tabela particionada

Uma tabela particionada consiste em uma tabela pai (que define o esquema e a regra de partição) e uma ou mais tabelas filhas (cada uma abrangendo valores específicos de partição). Crie as tabelas filhas antes de gravar os dados.

Como alternativa, ative o particionamento dinâmico para permitir que o Hologres crie tabelas filhas automaticamente com base nas regras configuradas.

Sintaxe

-- Create the parent table
CREATE TABLE [IF NOT EXISTS] [<schema_name>.]<table_name> (
  {
    <column_name> <column_type> [<column_constraints> [, ...]]
    | <table_constraints>
    [, ...]
  }
)
PARTITION BY LIST (<column_name>);

-- Create a child table
CREATE TABLE [IF NOT EXISTS] [<schema_name>.]<table_name>
  PARTITION OF <parent_table>
  FOR VALUES IN (<string_literal>);

Parâmetros

Parâmetro

Descrição

IF NOT EXISTS

Suprime o erro caso já exista uma tabela com o mesmo nome.

schema_name

O esquema que contém a tabela. Omita se as tabelas pai e filha estiverem no mesmo esquema; obrigatório para criação entre esquemas diferentes.

table_name

O nome da tabela pai ou filha a ser criada.

column_name

O nome da coluna.

column_type

O tipo de dados da coluna.

column_constraints

Restrições no nível da coluna (por exemplo, NOT NULL).

table_constraints

Restrições no nível da tabela (por exemplo, PRIMARY KEY).

parent_table

O nome da tabela pai à qual a tabela filha pertence.

string_literal

O valor da chave de partição para a tabela filha.

Tipos de dados suportados para colunas de chave de partição:

Tipo de dado

Versões suportadas

TEXT

Todas as versões

VARCHAR

Todas as versões

INT

Todas as versões

DATE

Hologres V1.3.22 e posteriores

Exemplos

Os exemplos a seguir criam uma tabela de fatos particionada em que cada tabela filha armazena os dados de um dia. Esse é um padrão comum para truncar ou substituir eficientemente um dia inteiro de dados.

Exemplo 1: Tabela pai sem chave primária

As duas variantes de sintaxe são equivalentes. Use a sintaxe V2.1+ se a sua versão do Hologres oferecer suporte.

Hologres V2.1 e posteriores:

BEGIN;
CREATE TABLE public.hologres_parent (
    a TEXT,
    b INT,
    c TIMESTAMP,
    d TEXT
)
PARTITION BY LIST (a)
WITH (orientation = 'column');
CREATE TABLE public.hologres_child1 PARTITION OF public.hologres_parent FOR VALUES IN ('v1');
CREATE TABLE public.hologres_child2 PARTITION OF public.hologres_parent FOR VALUES IN ('v2');
CREATE TABLE public.hologres_child3 PARTITION OF public.hologres_parent FOR VALUES IN ('v3');
COMMIT;

Todas as versões do Hologres:

BEGIN;
CREATE TABLE public.hologres_parent(
  a TEXT,
  b INT,
  c TIMESTAMP,
  d TEXT
)
PARTITION BY LIST(a);
CALL set_table_property('public.hologres_parent', 'orientation', 'column');
CREATE TABLE public.hologres_child1 PARTITION OF public.hologres_parent FOR VALUES IN('v1');
CREATE TABLE public.hologres_child2 PARTITION OF public.hologres_parent FOR VALUES IN('v2');
CREATE TABLE public.hologres_child3 PARTITION OF public.hologres_parent FOR VALUES IN('v3');
COMMIT;

Exemplo 2: Tabela pai com chave primária

Ao definir uma chave primária, inclua a coluna da chave de partição (ds neste exemplo) nessa chave.

Hologres V2.1 e posteriores:

BEGIN;
CREATE TABLE public.hologres_parent_2 (
    a TEXT,
    b INT,
    c TIMESTAMP,
    d TEXT,
    ds TEXT,
    PRIMARY KEY (ds, b)
)
PARTITION BY LIST (ds)
WITH (orientation = 'column');
CREATE TABLE public.holo_child_1 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201215');
CREATE TABLE public.holo_child_2 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201216');
CREATE TABLE public.holo_child_3 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201217');
COMMIT;

Todas as versões do Hologres:

BEGIN;
CREATE TABLE public.hologres_parent_2(
  a TEXT,
  b INT,
  c TIMESTAMP,
  d TEXT,
  ds TEXT,
  PRIMARY KEY (ds, b)
)
PARTITION BY LIST(ds);
CALL set_table_property('public.hologres_parent_2', 'orientation', 'column');
CREATE TABLE public.holo_child_1 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201215');
CREATE TABLE public.holo_child_2 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201216');
CREATE TABLE public.holo_child_3 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201217');
COMMIT;

Listar tabelas filhas

Liste todas as tabelas filhas de uma tabela pai usando o HoloWeb ou a seguinte instrução SQL. Substitua parent_table_name pelo nome real da tabela pai.

SELECT
    nmsp_parent.nspname AS parent_schema,
    parent.relname      AS parent,
    nmsp_child.nspname  AS child_schema,
    child.relname       AS child
FROM pg_inherits
    JOIN pg_class parent          ON pg_inherits.inhparent = parent.oid
    JOIN pg_class child           ON pg_inherits.inhrelid  = child.oid
    JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace
    JOIN pg_namespace nmsp_child  ON nmsp_child.oid  = child.relnamespace
WHERE parent.relname = 'parent_table_name';

Regras de herança de propriedades

Ao criar uma tabela filha usando CREATE TABLE ... PARTITION OF, ela herda a maioria das propriedades da tabela pai. A tabela abaixo mostra quais propriedades devem corresponder e quais podem diferir.

  • Devem corresponder: Anexar uma tabela filha com um valor diferente para essas propriedades resulta em erro. Para evitar isso, crie tabelas filhas usando CREATE TABLE LIKE, que copia as configurações de propriedade da tabela pai.

  • Podem diferir: Se não forem definidas explicitamente na tabela filha, ela herdará o valor da tabela pai. Caso sejam definidas explicitamente, o valor da tabela filha terá efeito.

  • Devem incluir as colunas indexadas da tabela pai: As colunas indexadas da tabela filha devem ser um superconjunto das colunas da tabela pai. É possível adicionar colunas indexadas adicionais na tabela filha.

Categoria

Propriedade

Herdada da tabela pai

Regra ao anexar

Propriedade da tabela

orientation

Sim

Deve corresponder

Propriedade da tabela

table_group

Sim

Deve corresponder

Propriedade da tabela

time_to_live_in_seconds

Sim

Pode diferir

Índice

Chave primária

Sim

Deve corresponder

Índice

distribution_key

Sim

Deve corresponder

Índice

clustering_key

Sim

Deve corresponder

Índice

event_time_column

Sim

Deve corresponder

Índice

bitmap_columns

Sim

Pode diferir

Índice

dictionary_encoding_columns

Sim

Pode diferir

Índice

binlog_level

Sim

Deve corresponder

Índice

proxima_vectors

Sim

Deve corresponder

Restrição de coluna

nullable (NOT NULL)

Sim

Deve corresponder

Restrição de coluna

Valor padrão

Sim

Deve corresponder

Próximos passos