Ejecute la instrucción CREATE TABLE LIKE para crear una tabla con el mismo esquema que la tabla obtenida al ejecutar la instrucción SELECT especificada. En este tema se describe cómo ejecutar la instrucción CREATE TABLE LIKE.
Límites
En Hologres V0.9 y versiones anteriores, la instrucción
CREATE TABLE LIKEsolo copia esquemas de tablas. No copia propiedades como la clave primaria o el índice. Consulte la versión de una instancia de Hologres en la página de detalles de la instancia dentro de la consola de Hologres.-
A partir de Hologres V0.10, la instrucción
CREATE TABLE LIKEcopia tanto los esquemas como las propiedades de las tablas, incluyendo la clave primaria y el índice. Para copiar las propiedades de otra tabla durante la creación, ejecute el siguiente comando y establezca el parámetro Grand Unified Configuration (GUC) correspondiente en true. Después, utilice la instrucciónSELECT * FROM <table_name>dentro deCREATE TABLE LIKE. Otras instrucciones SELECT, comoSELECT <column_1>, <column_2> FROM <table_name>, no son compatibles.set hg_experimental_enable_create_table_like_properties=true; La instrucción
CREATE TABLE LIKEno sincroniza datos desde la tabla de origen.-
Si especifica columnas en la instrucción SELECT, asigne un alias único a cada una. Cuando distintas columnas comparten el mismo alias, la instrucción CREATE TABLE LIKE genera varias columnas con el mismo nombre en la tabla. Esto provoca que se devuelva un mensaje de error. A continuación se muestran algunas instrucciones de ejemplo:
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 Al ejecutar la instrucción
CREATE TABLE LIKE, se copian los comentarios de columna y las propiedades del registro binario. No es posible copiar los comentarios de tabla ni la propiedad de particionamiento dinámico. A partir de la versión V3.0.33, la copia de comentarios de tabla ya es compatible.
Crear una tabla estándar
-
Syntax
Para crear una tabla estándar en Hologres, utilice la instrucción
CREATE TABLE LIKEcon la siguiente sintaxis:-- Copy a standard table without its properties. CALL hg_create_table_like('new_table_name', 'select_query'); -- Copy a table and its properties. 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');NotaDespués de llamar a la función hg_create_table_like, Hologres crea una tabla con el mismo esquema que la tabla obtenida al ejecutar la instrucción SQL indicada en el parámetro select_query. El parámetro new_table_name define el nombre de la tabla por crear. No se insertan datos en la tabla.
-
Parameter Description
new_table_name: el nombre de la tabla por crear. Establezca este parámetro como una cadena fija. No utilice una cadena de variables ni una función que genere nombres de tablas. La instrucción CREATE TABLE LIKE no permite crear tablas externas.
-
select_query: la instrucción SQL que consulta los datos. Si establece el parámetro select_query como
select * from tablename, la instrucciónCREATE TABLE LIKEcopia automáticamente todas las propiedades de la tabla de origen, incluida la clave primaria y el índice. Si la instrucción SQL contiene muchas comillas simples ('), especifique la consulta con el formato$$query_sql$$para escapar dichas comillas. Este método simplifica la operación. Instrucción de ejemplo:CALL HG_CREATE_TABLE_LIKE ('table_name', $$query_sql$$ [, 'partition_clause']) old_table_name: el nombre de la tabla que se va a copiar.
-
Example
En este ejemplo, la tabla de origen se crea en Hologres mediante las siguientes instrucciones:
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;Ejecute la instrucción
CREATE TABLE LIKEcon alguno de los siguientes métodos para crear una tabla en Hologres a partir de la tabla de origen:-
Para crear una tabla que copie el esquema y las propiedades de la tabla de origen, ejecute las siguientes instrucciones:
-- Create a table by copying both the schema and properties of the source table. set hg_experimental_enable_create_table_like_properties=true; CALL hg_create_table_like('new_table', 'select * from src_table'); -
Para crear una tabla y agregar una columna al esquema de la tabla de origen, ejecute la siguiente instrucción:
-- Create a table by adding Column c to the schema of the source table. Column c has the same properties as Column b. CALL hg_create_table_like('holo_table_1', $$select *, "b" as c from src_table$$);
-
Crear una tabla particionada
-
Syntax
Para crear una tabla particionada en Hologres, utilice la instrucción
CREATE TABLE LIKEcon la siguiente sintaxis:-- Create a partitioned table by copying the schema, but not the properties, of another table. CALL hg_create_table_like('new_table_name', 'select_query', 'partition_clause'); -
Parameter Description
new_table_name: el nombre de la tabla por crear. Establezca este parámetro como una cadena fija. No utilice una cadena de variables ni una función que genere nombres de tablas. La instrucción CREATE TABLE LIKE no permite crear tablas externas.
-
select_query: la instrucción SQL que consulta los datos. Si establece el parámetro select_query como
select * from tablename, la instrucciónCREATE TABLE LIKEcopia automáticamente todas las propiedades de la tabla de origen, incluida la clave primaria y el índice. Si la instrucción SQL contiene muchas comillas simples ('), especifique la consulta con el formato$$query_sql$$para escapar dichas comillas. Este método simplifica la operación. Instrucción de ejemplo:CALL HG_CREATE_TABLE_LIKE ('table_name', $$query_sql$$ [, 'partition_clause']) partition_clause: la cláusula que particiona la tabla y define la clave de partición. Hologres no crea automáticamente las tablas particionadas secundarias, por lo que debe crearlas de forma manual.
-
Example
En este ejemplo, la tabla de origen se crea en Hologres mediante las siguientes instrucciones:
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;Ejecute la instrucción
CREATE TABLE LIKEpara crear una tabla particionada en Hologres a partir de la tabla de origen. Luego, ejecute instrucciones CREATE TABLE para generar las tablas particionadas secundarias:-
Para crear la tabla particionada, ejecute la siguiente instrucción:
-- Create a partitioned table by adding Column ds to the schema of the source table. Configure Column ds as the partition key. CALL hg_create_table_like('new_table', $$select *, "b" as ds from src_table$$, 'partition by list(ds)'); -
Para crear las tablas particionadas secundarias de la tabla particionada, ejecute las siguientes instrucciones:
create table new_table_child_20201213 partition of new_table for values in('20201213');-- Specify 20201213 as a partition key value. create table new_table_child_20201214 partition of new_table for values in('20201214');-- Specify 20201214 as a partition key value.
-
Copiar una tabla en la consola de HoloWeb
HoloWeb le permite copiar una tabla de manera visual sin necesidad de escribir instrucciones SQL. Procedimiento:
Vaya a la consola de HoloWeb. Para obtener más información, consulte Connect to HoloWeb and run SQL queries.
En la barra de menú superior de la página de HoloWeb, haga clic en Metadata Management.
En la lista Instances Connected de la página Metadata Management, haga clic con el botón derecho en la tabla que desea replicar y seleccione Replicate Table Schema.
-
En la pestaña Replicate Table Schema, configure los siguientes parámetros.
Sección
Parámetro
Descripción
Destination Location
Table name
El nombre de la tabla de destino. Configure un nombre personalizado. Valor predeterminado: Source table name_copy.
Description
La descripción de la tabla de destino. Este parámetro es opcional.
Schema
El nombre del esquema donde reside la tabla de destino. Valor predeterminado: public.
Advanced Settings
Replicate Properties of Source Table
Indica si se copian las propiedades de la tabla de origen a la tabla de destino.
NotaLa replicación de propiedades de la tabla de origen solo es compatible con instancias de Hologres que ejecutan la versión V0.10 o posterior. Para versiones anteriores, seleccione No o actualice su instancia.
Haga clic en Submit en la esquina superior derecha para crear la tabla replicada.