Todos los productos
Search
Centro de documentos

Hologres:CREATE TABLE AS

Última actualización: Sep 18, 2026

CREATE TABLE AS crea una tabla nueva a partir de una tabla existente o del resultado de una consulta SELECT. De manera opcional, también copia los datos al mismo tiempo.

Se admiten dos variantes de sintaxis:

  • AS TABLE <src_table_name>: copia el esquema y, de forma opcional, los datos de una tabla o vista existente.

  • AS <select_query>: crea una tabla a partir del conjunto de resultados de una consulta SELECT.

CREATE TABLE AS copia los esquemas de las columnas y los tipos de datos, pero no las propiedades de la tabla, como las claves primarias, las restricciones de nulabilidad, los índices ni los valores predeterminados.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • Una instancia de Hologres que ejecute la versión 1.3.21 o posterior.

  • Una tabla o vista de origen existente desde la cual copiar.

Sintaxis

-- Variant 1: Copy from a source table or view
CREATE TABLE [ IF NOT EXISTS ] <new_table_name> AS TABLE <src_table_name> [ WITH [ NO ] DATA ]

-- Variant 2: Create from a SELECT query result
CREATE TABLE [ IF NOT EXISTS ] <new_table_name> AS <select_query> [ WITH [ NO ] DATA ]

Parámetros

Parámetro

Descripción

new_table_name

Nombre de la tabla nueva. Debe ser una cadena fija, no una variable ni una llamada a función. Esta instrucción no permite crear tablas externas.

IF NOT EXISTS

Si ya existe una tabla con el mismo nombre, se omite la creación sin generar errores.

src_table_name

Nombre de la tabla o vista de origen. Las vistas son compatibles con Hologres V2.1.21 y versiones posteriores.

select_query

Una instrucción SELECT. Para obtener detalles sobre la sintaxis, consulte SELECT.

WITH [ NO ] DATA

Controla si se copian los datos de origen. WITH DATA (valor predeterminado) copia los datos. WITH NO DATA crea una tabla vacía con el mismo esquema.

Qué se copia y qué no

CREATE TABLE AS copia los nombres de las columnas y los tipos de datos, pero no las propiedades de la tabla.

CREATE TABLE AS

CREATE TABLE LIKE

Esquemas de columnas y tipos de datos

Se copian

Se copian

Propiedades de la tabla (nulabilidad, valores predeterminados, índices, claves primarias, comentarios)

No se copian

Se copian parcialmente

Datos de la tabla de origen

Se copian (con WITH DATA)

No se copian

Configuración manual de propiedades (índices, claves de distribución)

Compatibilidad limitada. No es posible configurar las claves primarias de forma manual.

Compatibilidad limitada. No es posible configurar las claves primarias de forma manual.

Tabla no particionada a partir de una tabla particionada

Compatible

Compatible

Creación de tablas particionadas

No compatible

Parcialmente compatible (mediante partition_clause)

Para obtener más información sobre CREATE TABLE LIKE, consulte CREATE TABLE LIKE.

Límites

  • Solo Hologres V1.3.21 y versiones posteriores son compatibles con CREATE TABLE AS. Para actualizar una instancia anterior, hágalo manualmente en la consola de Hologres o únase a un grupo de DingTalk de Hologres para solicitar la actualización. Para obtener más información, consulte Instance upgrades o How to get online support?.

  • No se garantiza la atomicidad de la importación de datos cuando se usa WITH DATA.

  • En las columnas con tipos que requieren precisión (VARCHAR, BPCHAR, NUMERIC (DECIMAL), BIT o VARBIT), especifique la precisión de manera explícita en la instrucción CREATE TABLE AS. Omitir la precisión genera un error.

  • En las columnas de tipo INTERVAL, TIME, TIMETZ, TIMESTAMP o TIMESTAMPTZ, no especifique la precisión. Hacerlo para estos tipos genera un error.

  • CREATE TABLE AS no puede crear una tabla particionada, ya que siempre genera una tabla no particionada. Al copiar desde una tabla principal particionada, la instrucción incluye automáticamente los datos de todas las tablas secundarias.

  • A partir de Hologres V3.0.9, es posible usar recursos de cómputo serverless para ejecutar CREATE TABLE AS. Para obtener más información, consulte Work with serverless computing.

Comportamiento del registro de consultas

A partir de Hologres V3.0.9, CREATE TABLE AS genera dos registros en hologres.hg_query_log: uno para la propia instrucción CREATE TABLE AS y otro para la instrucción interna INSERT que se utiliza para copiar los datos. Ambos registros se vinculan mediante un identificador de transacción.

Para recuperar los dos registros de una ejecución específica, ejecute lo siguiente:

SELECT
    query_id,
    query,
    extended_info
FROM
    hologres.hg_query_log
WHERE
    extended_info ->> 'source_trx' = '<transaction_id>'
ORDER BY
    query_start;

Reemplace <transaction_id> por el valor del campo trans_id del registro de CREATE TABLE AS.

En versiones anteriores a la V3.0.9, solo se genera un registro correspondiente a la instrucción CREATE TABLE AS.

Ejemplos

Copiar una tabla no particionada

A continuación se muestran ejemplos basados en esta tabla de origen:

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;

INSERT INTO public.src_table VALUES (1, 'qaz'), (2, 'wsx');

Copiar con datos (comportamiento predeterminado)

CREATE TABLE public.new_table AS TABLE public.src_table;

Consulte la tabla nueva:

SELECT * FROM public.new_table;
 a |  b
---+-----
 1 | qaz
 2 | wsx

La tabla nueva contiene los mismos datos, pero no hereda la clave primaria ni la restricción NOT NULL de la tabla de origen:

SELECT hg_dump_script('public.new_table');
BEGIN;
CREATE TABLE public.new_table (
    a int,   -- int8 NOT NULL in source; inherited as int (nullable) here
    b text   -- text NOT NULL in source; inherited as text (nullable) here
);
CALL set_table_property('public.new_table', 'orientation', 'column');
CALL set_table_property('public.new_table', 'storage_format', 'orc');
CALL set_table_property('public.new_table', 'bitmap_columns', 'b');
CALL set_table_property('public.new_table', 'dictionary_encoding_columns', 'b:auto');
CALL set_table_property('public.new_table', 'time_to_live_in_seconds', '3153600000');
COMMENT ON TABLE public.new_table IS NULL;
END;

Copiar solo el esquema (sin datos)

CREATE TABLE public.new_table AS TABLE public.src_table WITH NO DATA;

Omitir la operación si la tabla ya existe

CREATE TABLE IF NOT EXISTS public.new_table AS TABLE public.src_table;

Si new_table ya existe, la instrucción no realiza ninguna acción y devuelve lo siguiente:

NOTICE: relation "new_table" already exists, skipping

Copiar desde el resultado de una consulta SELECT

CREATE TABLE public.new_table_2 AS SELECT * FROM public.src_table WHERE a = 1;

Copiar una tabla particionada

Los siguientes ejemplos utilizan esta tabla particionada de origen:

BEGIN;
CREATE TABLE public.src_table_partitioned (
    "a" int NOT NULL,
    "b" text,
    PRIMARY KEY (a)
) PARTITION BY LIST(a);

CREATE TABLE public.src_table_child1 PARTITION OF public.src_table_partitioned FOR VALUES IN (1);
CREATE TABLE public.src_table_child2 PARTITION OF public.src_table_partitioned FOR VALUES IN (2);
CREATE TABLE public.src_table_child3 PARTITION OF public.src_table_partitioned FOR VALUES IN (3);
COMMIT;

INSERT INTO src_table_child1 VALUES (1, 'aaa');
INSERT INTO src_table_child2 VALUES (2, 'bbb');
INSERT INTO src_table_child3 VALUES (3, 'ccc');

CREATE TABLE AS siempre crea una tabla no particionada. No replica las restricciones de la clave de partición ni las relaciones de herencia.

Copiar desde la tabla principal (incluye los datos de todas las particiones)

CREATE TABLE public.new_table_2 AS TABLE public.src_table_partitioned;
SELECT * FROM public.new_table_2;
 a |  b
---+-----
 2 | bbb
 1 | aaa
 3 | ccc

Copiar desde una sola partición

CREATE TABLE public.new_table_3 AS TABLE public.src_table_child1;

Solo se copian los datos de src_table_child1.

Copiar desde una consulta SELECT y configurar las propiedades de la tabla

Cree una tabla a partir del resultado de una consulta SELECT y configure sus propiedades en la misma transacción:

-- Create the source table
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');
COMMIT;

-- Create a new table from the SELECT result and configure properties
BEGIN;
CREATE TABLE public.new_table AS SELECT * FROM public.src_table;
CALL SET_TABLE_PROPERTY('public.new_table', 'bitmap_columns', 'b');
CALL SET_TABLE_PROPERTY('public.new_table', 'dictionary_encoding_columns', 'b:auto');
CALL SET_TABLE_PROPERTY('public.new_table', 'time_to_live_in_seconds', '3153600');
CALL SET_TABLE_PROPERTY('public.new_table', 'distribution_key', 'a');
COMMIT;

Pasos siguientes