Todos os produtos
Search
Central de documentação

Hologres:CREATE TABLE LIKE

Última atualização: Jun 28, 2026

O comando CREATE TABLE LIKE cria uma nova tabela com o mesmo schema do resultado de uma consulta SELECT, sem copiar dados. Use esse recurso para duplicar a estrutura de uma tabela em cenários de teste, staging ou reutilização de schema.

Funcionamento

No Hologres, o CREATE TABLE LIKE é implementado como um stored procedure:

CALL hg_create_table_like('new_table_name', 'select_query');

Esse procedimento cria uma tabela chamada new_table_name com base no schema do resultado da select_query. Nenhum dado é inserido.

Para copiar também as propriedades da tabela (chave primária, índices, entre outros), além do schema, use SELECT * FROM <source_table> como consulta e ative a cópia de propriedades no nível da sessão:

-- Enable property copying for this session (Hologres V0.10 and later)
SET hg_experimental_enable_create_table_like_properties = true;
CALL hg_create_table_like('new_table_name', 'select * from source_table_name');

O que é copiado

A tabela a seguir resume quais propriedades o CREATE TABLE LIKE copia, conforme a sintaxe da consulta e a versão do Hologres.

Propriedade

**SELECT * + GUC ativado (V0.10+)**

**Outra sintaxe de SELECT**

Observações

Schema das colunas (nomes, tipos)

Sim

Sim

Sempre copiado

Chave primária

Sim

Não

Requer SELECT * + parâmetro GUC

Índices (bitmap, etc.)

Sim

Não

Requer SELECT * + parâmetro GUC

Chave de distribuição

Sim

Não

Requer SELECT * + parâmetro GUC

Comentários de coluna

Sim

Sim

Sempre copiados

Propriedades de binary logging (Binlog)

Sim

Sim

Sempre copiadas

Comentários de tabela

Sim (V3.0.33+)

Sim (V3.0.33+)

Não suportado antes da V3.0.33

Propriedades de partição dinâmica

Não

Não

Nunca copiadas

Dados

Não

Não

Nunca copiados

Nota

No Hologres V0.9 e versões anteriores, o CREATE TABLE LIKE copia apenas o schema das colunas. Propriedades da tabela, como chaves primárias e índices, não são copiadas, independentemente da sintaxe.

Sintaxe

Tabelas padrão

-- Copy schema only (all versions)
CALL hg_create_table_like('new_table_name', 'select_query');

-- Copy schema and properties (V0.10 and later)
SET hg_experimental_enable_create_table_like_properties = true;
CALL hg_create_table_like('new_table_name', 'select * from source_table_name');

Se a consulta contiver aspas simples, use os delimitadores $$ para evitar caracteres de escape:

CALL hg_create_table_like('table_name', $$query_sql$$ [, 'partition_clause']);

Tabelas particionadas

-- Copy schema and create a partitioned table (all versions)
CALL hg_create_table_like('new_table_name', 'select_query', 'partition_clause');

As tabelas de partição filha não são criadas automaticamente. Crie-as manualmente após criar a tabela pai.

Parâmetros

Parâmetro

Descrição

new_table_name

Nome da tabela a ser criada. Deve ser uma string fixa — concatenação de strings e nomes gerados por funções não são suportados. Não pode ser uma foreign table.

select_query

String de consulta SQL. Se a consulta for exatamente SELECT * FROM <table_name> e o parâmetro GUC estiver ativado, todas as propriedades da tabela serão copiadas. Use os delimitadores $$...$$ para evitar o escape de aspas simples na consulta.

partition_clause

(Apenas tabelas particionadas) Cláusula que define a estrutura de partição, como partition by list(col). As partições filhas devem ser criadas manualmente.

Exemplos

Os exemplos a seguir usam esta tabela de origem:

BEGIN;
CREATE TABLE public.src_table (
  "a" int8 NOT NULL,
  "b" text NOT NULL,
  PRIMARY KEY (a)
);
CALL SET_TABLE_PROPERTY('public.src_table', 'orientation', 'column');
CALL SET_TABLE_PROPERTY('public.src_table', 'bitmap_columns', 'b');
CALL SET_TABLE_PROPERTY('public.src_table', 'dictionary_encoding_columns', 'b:auto');
CALL SET_TABLE_PROPERTY('public.src_table', 'time_to_live_in_seconds', '3153600000');
CALL SET_TABLE_PROPERTY('public.src_table', 'distribution_key', 'a');
CALL SET_TABLE_PROPERTY('public.src_table', 'storage_format', 'segment');
COMMIT;

Copiar uma tabela com suas propriedades

-- Enable property copying for this session
SET hg_experimental_enable_create_table_like_properties = true;
CALL hg_create_table_like('new_table', 'select * from src_table');

A tabela resultante tem o mesmo schema, chave primária, índices e outras propriedades da src_table.

Adicionar uma coluna com base na tabela de origem

-- Create a table with an extra column "c" derived from column "b"
CALL hg_create_table_like('holo_table_1', $$select *, "b" as c from src_table$$);
Nota

Cada coluna na consulta deve ter um alias exclusivo. Se duas colunas compartilharem o mesmo alias, a instrução falhará com um erro semelhante a column "c" specified more than once.

Criar uma tabela particionada

-- Add a column "ds" and partition the table by it
CALL hg_create_table_like('new_table', $$select *, "b" as ds from src_table$$, 'partition by list(ds)');

Após criar a tabela pai, crie as partições filhas manualmente:

CREATE TABLE new_table_child_20201213 PARTITION OF new_table FOR VALUES IN ('20201213');
CREATE TABLE new_table_child_20201214 PARTITION OF new_table FOR VALUES IN ('20201214');

Copiar uma tabela pelo console HoloWeb

O HoloWeb oferece uma interface para copiar tabelas sem escrever SQL.

  1. Acesse a página do HoloWeb. Para mais informações, consulte Conectar ao HoloWeb e executar uma consulta.

  2. Na barra de menu superior, clique em Metadata Management.

  3. Na lista Logged-in Instances, clique com o botão direito na tabela que deseja copiar e selecione Replicate Table Schema.

  4. Na aba Replicate Table Schema, configure os seguintes parâmetros.

    Categoria

    Parâmetro

    Descrição

    Local de destino

    Nome da tabela

    Nome da tabela de destino. O padrão é <source_table_name>_copy.

    Local de destino

    Descrição

    Descrição opcional para a tabela de destino.

    Local de destino

    Schema

    Schema da tabela de destino. O padrão é public.

    Opções avançadas

    Sincronizar propriedades da tabela de origem

    Define se as propriedades da tabela serão copiadas para a tabela de destino. Requer Hologres V0.10 ou posterior. Se sua versão for anterior à V0.10, selecione No ou atualize sua instância.

    Copy table schema

  5. Clique em Submit.

Limitações

  • V0.9 e anteriores: Apenas o schema das colunas é copiado. Propriedades da tabela, como chaves primárias e índices, não são copiadas. Verifique a versão da sua instância na página do produto no console do Hologres.

  • Restrição de sintaxe para cópia de propriedades: Quando o parâmetro hg_experimental_enable_create_table_like_properties está ativado, a cópia de propriedades funciona apenas com SELECT * FROM <table_name>. Seleções parciais de colunas, como SELECT col1, col2 FROM <table_name>, não copiam as propriedades.

  • new_table_name deve ser uma string fixa: Concatenação de strings e nomes gerados por funções não são suportados.

  • Foreign tables não permitidas: A tabela de destino não pode ser uma foreign table.

  • Partições filhas não são automáticas: As tabelas de partição filha devem ser criadas manualmente.

  • Propriedades de partição dinâmica nunca são copiadas, independentemente da versão ou das configurações de GUC.