Todos os produtos
Search
Central de documentação

Hologres:CREATE TABLE LIKE

Última atualização: Oct 14, 2026

Execute a instrução CREATE TABLE LIKE para criar uma tabela com o mesmo schema da tabela obtida ao executar a instrução SELECT especificada. Este tópico descreve como executar a instrução CREATE TABLE LIKE.

Limites

  • No Hologres V0.9 e versões anteriores, a instrução CREATE TABLE LIKE copia apenas os schemas das tabelas, e não as propriedades da tabela, como chave primária e índice. Na página de detalhes da instância no console do Hologres, visualize a versão de uma instância do Hologres.

  • No Hologres V0.10 e versões posteriores, a instrução CREATE TABLE LIKE copia tanto os schemas quanto as propriedades da tabela, como chave primária e índice. Para copiar as propriedades de outra tabela durante a criação, execute o comando a seguir e defina o parâmetro Grand Unified Configuration (GUC) relacionado como true. Em seguida, use a instrução SELECT * FROM <table_name> na instrução CREATE TABLE LIKE. Não há suporte para outras instruções SELECT, como SELECT <column_1>, <column_2> FROM <table_name>.

    set hg_experimental_enable_create_table_like_properties=true;
  • A instrução CREATE TABLE LIKE não sincroniza dados da tabela source.

  • Ao especificar colunas na instrução SELECT, especifique um alias exclusivo para cada coluna. Caso atribua o mesmo alias a colunas diferentes, a instrução CREATE TABLE LIKE criará várias colunas com o mesmo nome na tabela, o que resulta em uma mensagem de erro. Exemplos de instruções:

    CALL hg_create_table_like('new_table', 'select *, 1 as c, ''a'' as c from src_table');
    ERROR:  column "c" specified more than once
    CONTEXT:  SQL statement "create table new_table (
    "a"     integer,
    "b"     text,
    "c"     integer,
    "c"     text
    );"
    PL/pgSQL function hg_create_table_like(text,text) line 22 at EXECUTE
  • Ao executar a instrução CREATE TABLE LIKE, é possível copiar comentários de colunas e propriedades de log binário. Não é possível copiar comentários de tabela nem a propriedade de particionamento dinâmico. A partir da V3.0.33, há suporte para a cópia de comentários de tabela.

Sintaxe

A instrução CREATE TABLE LIKE utiliza a seguinte sintaxe no Hologres:

-- Copy a standard table without its properties. This method does not copy the partition properties of a logical partitioned table.
CALL hg_create_table_like('new_table_name', 'select_query');

-- Copy a physical partitioned table. Other table properties are not copied.
CALL hg_create_table_like('new_table_name', 'select_query', 'partition_clause');

-- Copy a table and its properties. Use this method to copy the partition properties of a logical partitioned table.
set hg_experimental_enable_create_table_like_properties=true; -- Session-level parameter.
CALL hg_create_table_like('new_table_name', 'select * from old_table_name');
Nota

Ao chamar hg_create_table_like, o Hologres cria uma tabela chamada new_table_name cujo schema corresponde ao resultado de select_query. A nova tabela não recebe dados.

Parameter Description

  • new_table_name: o nome da tabela a ser criada. O valor deve ser uma string literal. Não há suporte a variáveis, concatenação de strings e funções. Não é possível criar uma tabela externa com CREATE TABLE LIKE.

  • select_query: a instrução de consulta. Se a instrução for exatamente select * from tablename, o CREATE TABLE LIKE também copiará todas as propriedades da tabela source, incluindo a chave primária e os índices. Caso a instrução contenha muitas aspas simples ('), recomenda-se delimitá-la como $$query_sql$$ para que as aspas simples sejam escapadas automaticamente. Exemplo:

    CALL HG_CREATE_TABLE_LIKE ('table_name', $$query_sql$$ [, 'partition_clause'])
  • partition_clause: a cláusula de particionamento que especifica a chave de partição. As partições filhas não são criadas automaticamente. Crie-as manualmente.

  • old_table_name: o nome da tabela source a ser copiada.

Exemplos

Os exemplos a seguir utilizam esta tabela source:

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;

Use CREATE TABLE LIKE para criar tabelas com base na tabela source:

  • Para isso, crie uma tabela com o mesmo schema e as mesmas propriedades da tabela source:

    -- Copy the table schema and properties.
    set hg_experimental_enable_create_table_like_properties=true;
    CALL hg_create_table_like('new_table', 'select * from src_table');
  • Em seguida, crie uma tabela que adicione uma coluna ao schema da tabela source:

    -- Add column c, which has the same definition as column b.
    CALL hg_create_table_like('holo_table_1', $$select *, "b" as c from src_table$$);
  • Agora, crie uma tabela particionada fisicamente e, em seguida, crie suas partições filhas manualmente:

    -- Add column ds and use it as the partition key of a physical partitioned table.
    CALL hg_create_table_like('new_table', $$select *, "b" as ds from src_table$$, 'partition by list(ds)');
    
    -- Create child partitions.
    create table new_table_child_20201213 partition of new_table for values in('20201213'); -- Partition value: 20201213
    create table new_table_child_20201214 partition of new_table for values in('20201214'); -- Partition value: 20201214
  • Por fim, crie tabelas temporárias a partir de uma tabela particionada e anexe-as como partições filhas:

    -- Create a partitioned parent table.
    BEGIN;
    CREATE TABLE public.src_parent_table (
     "a" int NOT NULL,
     "b" text NOT NULL,
    PRIMARY KEY (a,b)
    ) PARTITION BY LIST(a);
    CALL SET_TABLE_PROPERTY('public.src_parent_table', 'orientation', 'column');
    CALL SET_TABLE_PROPERTY('public.src_parent_table', 'bitmap_columns', 'b');
    CALL SET_TABLE_PROPERTY('public.src_parent_table', 'dictionary_encoding_columns', 'b:auto');
    CALL SET_TABLE_PROPERTY('public.src_parent_table', 'time_to_live_in_seconds', '3153600000');
    CALL SET_TABLE_PROPERTY('public.src_parent_table', 'distribution_key', 'a');
    CALL SET_TABLE_PROPERTY('public.src_parent_table', 'storage_format', 'segment');
    COMMIT;
    
    -- Create a child partition.
    CREATE TABLE public.src_child_table PARTITION OF public.src_parent_table FOR VALUES IN (20220101);
    
    -- Create tables that inherit properties from the parent table and from the child partition.
    set hg_experimental_enable_create_table_like_properties=true;
    CALL hg_create_table_like('like_parent_table', 'select * from src_parent_table');
    CALL hg_create_table_like('like_child_table', 'select * from src_child_table');
    
    -- Attach the new tables to the parent table as child partitions.
    ALTER TABLE src_parent_table ATTACH PARTITION like_parent_table FOR VALUES IN (20220102);
    ALTER TABLE src_parent_table ATTACH PARTITION like_child_table FOR VALUES IN (20220103);

Copiar uma tabela no console do HoloWeb

Use o HoloWeb para copiar uma tabela visualmente, sem a necessidade de escrever instruções SQL. Procedimento:

  1. Para começar, acesse o console do HoloWeb. Para mais informações, consulte Connect to HoloWeb and execute SQL queries.

  2. Na barra de menu superior da página do HoloWeb, clique em Metadata Management.

  3. Na lista Instances Connected na página Metadata Management, clique com o botão direito na tabela a ser replicada e selecione a opção Replicate Table Schema.

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

    Seção

    Parâmetro

    Descrição

    Destination Location

    Table name

    O nome da tabela de destino. Configure um nome personalizado. Valor padrão: nome_da_tabela_source_copy.

    Description

    A descrição da tabela de destino. Este parâmetro é opcional.

    Schema

    O nome do schema em que a tabela de destino está localizada. Valor padrão: public.

    Advanced Settings

    Replicate Properties of source Table

    Especifica se as propriedades da tabela source serão copiadas para a tabela de destino.

    Nota

    A replicação de propriedades da tabela source é compatível apenas com instâncias do Hologres V0.10 ou posteriores. Para versões anteriores, selecione No ou atualize sua instância.

  5. Clique em envie e envie a solicitação no canto superior direito para criar a tabela replicada.

Propriedades herdadas

No Hologres V2.0 e versões posteriores, o CREATE TABLE LIKE trata as propriedades da tabela da seguinte forma.

Propriedade

Herdada

Descrição

binlog.level

Sim

Especifica se o log binário está ativado.

binlog.ttl

Sim

O tempo de vida (TTL) dos logs binários, em segundos. Os logs binários expirados são excluídos assincronamente.

clustering_key

Sim

As colunas usadas para classificar os dados no armazenamento.

distribution_key

Sim

As colunas usadas para distribuir os dados para consultas paralelas.

encryption_options

Sim

As configurações de criptografia no nível da tabela.

online_config_*

Sim

Propriedades da tabela que entram em vigor sem a necessidade de reinicialização. Use-as para otimizar o armazenamento ou acelerar consultas.

orientation

Sim

O formato de armazenamento: orientado a linhas ou a colunas.

primary_key

Sim

A chave primária.

proxima_vectors

Sim

O índice vetorial.

Colunas Serial

Sim

O sistema não cria uma nova sequência. A nova tabela utiliza a sequência da tabela source.

segment_key (event_time_column)

Sim

As colunas usadas para filtrar arquivos de armazenamento.

storage_format

Sim

O formato do arquivo de armazenamento: sst ou orc.

table_group

Sim

O grupo de tabelas da tabela.

table_storage_mode

Sim

O modo de armazenamento quente ou frio.

time_to_live_in_seconds

Sim

O TTL dos dados da tabela, em segundos. Os dados expirados são excluídos assincronamente.

mutate_type

Não

Uma tabela na qual uma visão materializada de tabela única é criada deve ter o mutate_type definido como appendonly.

shared_readonly

Não

Especifica se a tabela é somente leitura.

readonly

Não

Especifica se há bloqueio de modificações no schema e nos dados da tabela.

matview

Não

As visões materializadas de tabela única não são herdadas.