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:
Uma conexão com o banco de dados de destino — o HoloWeb é a ferramenta recomendada para executar consultas
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 |
|
|
Define o formato de armazenamento. Consulte Modos de armazenamento. |
|
|
|
|
|
|
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 |
|
|
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. |
— |
|
|
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 |
|
|
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 |
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 |
|
|
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 |
|
|
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 | — |
|
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 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 |
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 ahg_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 NULLe 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 |
|
|
Suportado |
Suportado |
|
|
Suportado |
— |
|
|
Suportado |
— |
|
|
Não suportado |
Não suportado |
|
|
Não suportado |
Não suportado |
|
|
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_oupg_.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 (comoctid), 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 |
** |
** |
|
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_columnseblob_columns— por meio de ALTER TABLETipos 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