Todos os produtos
Search
Central de documentação

Hologres:CREATE TABLE

Última atualização: Oct 21, 2026

Use CREATE TABLE para definir o layout de armazenamento de uma tabela no Hologres. É fundamental definir o modo de armazenamento, a chave de distribuição e os índices adequados no momento da criação, pois não é possível alterar a maioria dessas propriedades após a criação da tabela.

Pré-requisitos

Antes de começar, certifique-se de ter:

Início rápido

Este exemplo cria uma tabela de fatos de detalhes de transações com a sintaxe CREATE TABLE WITH (disponível no Hologres V2.1 ou superior). O exemplo utiliza uma convenção de nomenclatura hierárquica, define diversos campos e inclui comentários de metadados.

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Visualize o schema da tabela

Execute a consulta a seguir para obter a instrução de Data Definition Language (DDL) da tabela:

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Insira dados

O Hologres é compatível com a sintaxe padrão da Data Manipulation Language (DML). A instrução a seguir insere 10 linhas de dados de exemplo:

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Consulte os dados

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Resultado esperado:

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Sintaxe

Sintaxe do CREATE TABLE

O Hologres oferece suporte a duas sintaxes para definir propriedades e comentários de tabelas:

Sintaxe padrão (recomendada para o Hologres V2.1 e versões posteriores)

Use a palavra-chave WITH para definir propriedades inline. Esta sintaxe é mais compacta e oferece melhor desempenho.

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Sintaxe compatível (suporte em todas as versões)

Defina as propriedades com CALL set_table_property e adicione comentários com COMMENT. Todas as instruções devem estar no mesmo bloco de transação BEGIN...COMMIT do CREATE TABLE.

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Propriedades da tabela

As propriedades se dividem em três grupos com base em suas funções. As propriedades marcadas como não modificáveis não podem ser alteradas após a criação da tabela — é necessário recriar a tabela.

Organização de dados (não modificável após a criação)

Propriedade

Descrição

Orientada a colunas

Orientada a linhas

Híbrida de linhas e colunas

Padrão

orientation

Define o formato de armazenamento. Consulte Modos de armazenamento.

column

row

row,column

column

distribution_key

Define a política de fragmentação de dados. Consulte Chave de distribuição.

Chave primária por padrão; escolha uma coluna da chave primária para obter o melhor desempenho.

Chave primária por padrão.

Chave primária por padrão.

Chave primária

clustering_key

Ordena fisicamente os dados dentro dos arquivos para acelerar consultas de intervalo. Consulte Chave de clusterização.

Vazio por padrão. Use no máximo uma coluna; apenas a ordem crescente é suportada.

Chave primária por padrão.

Vazio por padrão.

—

event_time_column

Divide os dados em segmentos de arquivo por tempo, permitindo filtragem rápida de intervalos de tempo. Consulte Coluna de tempo do evento.

Primeiro campo de carimbo de data/hora não nulo por padrão.

Não suportado.

Primeiro campo de carimbo de data/hora não nulo por padrão.

Primeiro carimbo de data/hora não nulo

table_group

Controla a contagem de shards para distribuição de dados. Consulte Grupos de tabelas e contagens de shards.

Grupo de tabelas padrão.

Grupo de tabelas padrão.

Grupo de tabelas padrão.

Grupo de tabelas padrão

Importante

As propriedades orientation, distribution_key, clustering_key e event_time_column não podem ser modificadas após a criação da tabela. Planeje-as com cuidado antes de criar a tabela. A propriedade table_group também não pode ser alterada sem recriar a tabela ou refazer o sharding.

Aceleração de índice (modificável após a criação)

Propriedade

Descrição

Orientada a colunas

Orientada a linhas

Híbrida de linhas e colunas

bitmap_columns

Cria um índice de bitmap para filtragem rápida de igualdade em colunas de baixa cardinalidade. Consulte Índice de bitmap. Use para colunas em comparações de igualdade; não defina mais de 10 colunas.

Suportado

Não suportado

Suportado

dictionary_encoding_columns

Cria um mapa de dicionário que converte comparações de strings em comparações numéricas, acelerando as operações GROUP BY e FILTER. O sistema ativa todas as colunas TEXT em tabelas orientadas a colunas por padrão. Na V0.9 e versões posteriores, o Hologres determina automaticamente se deve aplicar a codificação de dicionário com base nas características dos dados.

Suportado

Não suportado

Suportado

Tanto bitmap_columns quanto dictionary_encoding_columns podem ser modificadas após a criação da tabela por meio do ALTER TABLE.

Sintaxe de dictionary_encoding_columns:

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Ciclo de vida dos dados

Propriedade Descrição Orientada a colunas Orientada a linhas Híbrida de linhas e colunas
time_to_live_in_seconds Define o Time to Live (TTL) para os dados da tabela em segundos. O TTL começa a contar a partir do momento da gravação, não da atualização. Na V1.3.24 e versões posteriores, o valor mínimo permitido é 86.400 (um dia). Suportado Não recomendado — use o valor padrão Não recomendado
storage_mode Especifica se os dados são armazenados em armazenamento quente ou frio. Suportado na V1.3 e versões posteriores. Consulte Armazenamento de dados em camadas. Use conforme necessário Use conforme necessário —

blob_columns

Ative o Blob Storage para colunas TEXT e BYTEA. Valores grandes são armazenados separadamente, e a coluna mantém apenas uma referência para cada valor. Isso reduz a E/S de consultas pontuais e a amplificação de gravação de compactação.

Defina com set_table_property no formato 'col1:on,col2:auto'. O valor on força o armazenamento separado de valores grandes na coluna, auto permite que o sistema decida com base em um limiar de tamanho e off desativa o Blob Storage. Desativado por padrão.

Suportado no Hologres V5.0.0 e versões posteriores. Consulte Blob Storage.

Ideal para colunas com valores grandes em cargas de trabalho com muitas gravações e consultas pontuais. Evite usar em colunas que passam por varreduras completas com frequência.

Modificável após a criação com CALL set_table_property. A alteração entra em vigor de forma assíncrona por meio da compactação em segundo plano.

Suportado

Não suportado

Suportado

Observações sobre time_to_live_in_seconds:

  • O TTL não é aplicado em um horário exato. Após a expiração do TTL, o sistema exclui os dados dentro de uma janela de tempo, não em um momento preciso.

  • O sistema exclui apenas os dados; a tabela em si permanece.

  • O TTL pode causar chaves primárias duplicadas ou resultados de consulta inconsistentes após a exclusão.

  • Gerencie o ciclo de vida dos dados de produção com tabelas particionadas. Consulte CREATE PARTITION TABLE.

  • A partir do Hologres V4.2, para tabelas com chave primária, a configuração do TTL é restrita pelo parâmetro GUC hg_time_to_live_in_days_min_value. Esse parâmetro é medido em dias, com valor padrão de 36500 (100 anos), e apenas um Superuser pode modificá-lo. Ao definir o TTL de uma tabela com chave primária via CREATE TABLE, ALTER TABLE, SET_TABLE_PROPERTY ou REBUILD, o sistema verifica se o valor atende ao requisito mínimo (deve ser maior ou igual ao número de dias correspondente a hg_time_to_live_in_days_min_value). Tabelas sem chave primária não sofrem impacto dessa restrição.

Se não for definido, o TTL padrão é de 100 anos (efetivamente sem expiração).

Sintaxe de time_to_live_in_seconds:

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Sintaxe de storage_mode:

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Exemplos

Exemplo: Tabela particionada para dados de séries temporais em grande escala

Conforme o volume de dados aumenta, manter uma única tabela não particionada torna-se custoso. A exclusão de dados históricos exige a varredura de todas as linhas, e as consultas baseadas em tempo realizam varreduras completas na tabela. Uma tabela particionada isola fisicamente os dados por dia, o que permite a exclusão instantânea de partições para limpeza e a eliminação automática de partições durante as consultas.

Este exemplo converte a tabela dwd_trade_orders da seção de Início rápido para uma estrutura particionada. As definições de campos e as configurações de índice são herdadas, mas a chave primária deve incluir a chave de partição dt.

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Exemplo: Análise em tempo real para grandes conjuntos de dados (tabela de fatos)

Cenário: Resumos de painéis em tempo real com grandes volumes de dados, em que o requisito principal é a agregação rápida (por exemplo, o cálculo do Volume Bruto de Mercadorias - GMV e a contagem de pedidos).

O armazenamento orientado a colunas destaca-se neste cenário: as altas taxas de compactação reduzem a E/S, e as varreduras de colunas leem apenas as colunas necessárias para a agregação.

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Exemplo: Consultas pontuais de alta concorrência (tabela de dimensões)

Cenário: Recuperar o perfil de um usuário por user_id em milissegundos, sob uma alta taxa de consultas por segundo (QPS).

O armazenamento orientado a linhas é otimizado para buscas baseadas em chave primária. Todos os dados da linha são armazenados de forma contígua, o que torna as consultas pontuais extremamente rápidas, sem a necessidade de varrer colunas não relacionadas.

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Exemplo: Carga de trabalho híbrida (armazenamento híbrido de linhas e colunas)

Cenário: Um sistema de logística e pós-venda que precisa de análises (para resumir o status de logística) e consultas pontuais (para recuperar detalhes do pedido por order_id).

O armazenamento híbrido de linhas e colunas combina o desempenho de consultas pontuais em nível de milissegundos do armazenamento orientado a linhas com a agregação eficiente do armazenamento orientado a colunas.

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Limitações

O Hologres aceita no máximo 6.400 colunas por tabela.

Limites de chave primária

  • Composite primary keys: Vários campos podem formar a chave primária. Todos os campos devem ser NOT NULL e declarados em uma única instrução.

    -- Enable the old syntax at the session level.
    SET hg_disable_parse_holo_property = on;
    
    -- Enable the old syntax at the database level.
    ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;
  • Tipos não suportados: FLOAT, DOUBLE, NUMERIC, ARRAY, JSON, DATE e outros tipos complexos não podem ser usados como colunas de chave primária.

  • Não modificável: A chave primária não pode ser alterada após a criação da tabela. Crie a tabela novamente caso precise de uma chave primária diferente.

  • Requisitos de armazenamento: Tabelas orientadas a linha e tabelas híbridas de linha e coluna devem ter uma chave primária. As chaves primárias são opcionais para tabelas orientadas a coluna.

Suporte a restrições

Restrição

Nível de coluna

Nível de tabela

primary key

Suportado

Suportado

not null

Suportado

—

null

Suportado

—

unique

Não suportado

Não suportado

check

Não suportado

Não suportado

default

Suportado

Não suportado

Regras de nomenclatura e escape

  • Os nomes das colunas não podem começar com hg_.

  • Os nomes dos schemas não podem começar com holo_, hg_ ou pg_.

  • Os nomes das tabelas não podem exceder 127 bytes.

  • Coloque os nomes entre aspas duplas ("") quando forem palavras-chave SQL, palavras reservadas, campos do sistema (como ctid), identificadores que diferenciam maiúsculas de minúsculas, nomes com caracteres especiais ou nomes que começam com um dígito.

Sintaxe para nomes de colunas com escape no Hologres V2.0 e versões posteriores:

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Sintaxe para nomes de colunas com escape em versões anteriores ao Hologres V2.0:

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Para mudar para a sintaxe antiga do parser no Hologres V2.0 quando necessário:

-- Enable the old syntax at the session level.
SET hg_disable_parse_holo_property = on;

-- Enable the old syntax at the database level.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Comportamento do IF NOT EXISTS

Condição

**IF NOT EXISTS especificado**

**IF NOT EXISTS não especificado**

Existe uma tabela com o mesmo nome

Retorna um NOTICE, ignora a criação, a operação é bem-sucedida

Retorna um ERROR

Não existe nenhuma tabela com o mesmo nome

A operação é bem-sucedida

A operação é bem-sucedida

Limites de modificação

Após criar uma tabela, não é possível alterar os seguintes itens:

  • Tipos de dados (antes do Hologres V3.0)

  • Ordem das colunas

  • Restrição de nulidade (NOT NULL ↔ anulável)

  • Propriedades de layout de armazenamento: orientation, distribution_key, clustering_key, event_time_column

É possível alterar os seguintes itens após a criação da tabela:

  • bitmap_columns, dictionary_encoding_columns e blob_columns — por meio de ALTER TABLE

  • Tipos de dados: alguns tipos na V3.0 e versões posteriores; todos os tipos por meio de REBUILD na V3.1 e versões posteriores — consulte Modificar tipos de dados e REBUILD

Próximos passos

  • CREATE PARTITION TABLE — gerencie o ciclo de vida dos dados em escala usando tabelas particionadas

  • ALTER TABLE — modifique as propriedades modificáveis após a criação da tabela

  • Chave de distribuição — escolha a chave de distribuição adequada

  • Chave de clustering — entenda como as chaves de clustering melhoram o desempenho das consultas

  • Modos de armazenamento — compare em detalhes os armazenamentos orientados a coluna, orientados a linha e híbridos de linha e coluna