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 LIKEcopia 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 LIKEcopia 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çãoSELECT * FROM <table_name>na instruçãoCREATE TABLE LIKE. Não há suporte para outras instruções SELECT, comoSELECT <column_1>, <column_2> FROM <table_name>.set hg_experimental_enable_create_table_like_properties=true; A instrução
CREATE TABLE LIKEnã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');
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, oCREATE TABLE LIKEtambé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:
Para começar, acesse o console do HoloWeb. Para mais informações, consulte Connect to HoloWeb and execute SQL queries.
Na barra de menu superior da página do HoloWeb, clique em Metadata Management.
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.
-
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.
NotaA 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.
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. |