L'instruction CREATE TABLE LIKE permet de créer une table dont le schéma est identique à celui obtenu par l'exécution d'une instruction SELECT spécifiée. Cette rubrique décrit comment exécuter l'instruction CREATE TABLE LIKE.
Limites
Dans Hologres V0.9 et versions antérieures, l'instruction
CREATE TABLE LIKEne copie que le schéma de la table, sans inclure les propriétés telles que la clé primaire et les index. Vous pouvez consulter la version de votre instance Hologres sur la page des détails de l'instance dans la console Hologres.-
À partir de Hologres V0.10, l'instruction
CREATE TABLE LIKEcopie à la fois le schéma et les propriétés de la table (clé primaire, index, etc.). Pour copier ces propriétés lors de la création d'une table, définissez le paramètre Grand Unified Configuration (GUC) correspondant surtrueen exécutant la commande suivante. Vous devez ensuite utiliser l'instructionSELECT * FROM <table_name>au sein de l'instructionCREATE TABLE LIKE. Les autres formes d'instructions SELECT, telles queSELECT <column_1>, <column_2> FROM <table_name>, ne sont pas prises en charge.set hg_experimental_enable_create_table_like_properties=true; L'instruction
CREATE TABLE LIKEne synchronise pas les données de la table source.-
Si vous spécifiez des colonnes dans l'instruction SELECT, chaque colonne doit disposer d'un alias unique. L'utilisation du même alias pour plusieurs colonnes entraîne la création de colonnes homonymes dans la nouvelle table, ce qui provoque une erreur. Exemple :
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 Lors de l'exécution de l'instruction
CREATE TABLE LIKE, vous pouvez copier les commentaires de colonne et les propriétés liées aux journaux binaires. En revanche, les commentaires de table et la propriété de partitionnement dynamique ne sont pas copiés. La copie des commentaires de table est prise en charge à partir de la version V3.0.33.
Créer une table standard
-
Syntax
La syntaxe suivante permet de créer une table standard dans Hologres à l'aide de l'instruction
CREATE TABLE LIKE:-- 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');RemarqueAprès l'appel de la fonction
hg_create_table_like, Hologres crée une table dont le schéma correspond à celui résultant de l'exécution de l'instruction SQL indiquée par le paramètreselect_query. Le paramètrenew_table_namedéfinit le nom de la table à créer. Aucune donnée n'est insérée dans cette table. -
Parameter Description
new_table_name: nom de la table à créer. Ce paramètre doit recevoir une chaîne fixe ; il n'accepte ni les variables ni les fonctions générant un nom de table. L'instructionCREATE TABLE LIKEne permet pas de créer une table externe.-
select_query: instruction SQL utilisée pour interroger les données. Si vous définissezselect_querysurselect * from tablename, l'instructionCREATE TABLE LIKEcopie automatiquement toutes les propriétés de la table source, y compris la clé primaire et les index. Si l'instruction SQL contient de nombreuses apostrophes ('), nous vous recommandons d'utiliser le format$$query_sql$$pour échapper ces caractères. Cette approche simplifie les opérations. Exemple :CALL HG_CREATE_TABLE_LIKE ('table_name', $$query_sql$$ [, 'partition_clause']) old_table_name: nom de la table à copier.
-
Example
Dans cet exemple, la table source est créée dans Hologres à l'aide des instructions suivantes :
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;Pour créer une table dans Hologres à partir de la table source, exécutez l'instruction
CREATE TABLE LIKEselon l'une des méthodes ci-dessous :-
Pour créer une table en copiant le schéma et les propriétés de la table source, exécutez les instructions suivantes :
-- 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'); -
Pour créer une table en ajoutant une colonne au schéma de la table source, exécutez l'instruction suivante :
-- 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$$);
-
Créer une table partitionnée
-
Syntax
La syntaxe suivante permet de créer une table partitionnée dans Hologres à l'aide de l'instruction
CREATE TABLE LIKE:-- 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: nom de la table à créer. Ce paramètre doit recevoir une chaîne fixe ; il n'accepte ni les variables ni les fonctions générant un nom de table. L'instructionCREATE TABLE LIKEne permet pas de créer une table externe.-
select_query: instruction SQL utilisée pour interroger les données. Si vous définissezselect_querysurselect * from tablename, l'instructionCREATE TABLE LIKEcopie automatiquement toutes les propriétés de la table source, y compris la clé primaire et les index. Si l'instruction SQL contient de nombreuses apostrophes ('), nous vous recommandons d'utiliser le format$$query_sql$$pour échapper ces caractères. Cette approche simplifie les opérations. Exemple :CALL HG_CREATE_TABLE_LIKE ('table_name', $$query_sql$$ [, 'partition_clause']) partition_clause: clause de partitionnement de la table. Elle spécifie la clé de partition. Hologres ne crée pas automatiquement les tables de partition enfants ; vous devez les créer manuellement.
-
Example
Dans cet exemple, la table source est créée dans Hologres à l'aide des instructions suivantes :
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;Pour créer une table partitionnée dans Hologres à partir de la table source, exécutez l'instruction
CREATE TABLE LIKE, puis utilisez des instructionsCREATE TABLEpour créer les tables de partition enfants :-
Pour créer la table partitionnée, exécutez l'instruction suivante :
-- 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)'); -
Pour créer les tables de partition enfants associées à la table partitionnée, exécutez les instructions suivantes :
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.
-
Copier une table dans la console HoloWeb
HoloWeb vous permet de copier une table via une interface visuelle, sans écrire d'instructions SQL. Procédure :
Accédez à la console HoloWeb. Pour plus d'informations, consultez la rubrique Se connecter à HoloWeb et exécuter des requêtes SQL.
Dans la barre de menu supérieure de la page HoloWeb, cliquez sur Metadata Management.
Dans la liste Instances Connected de la page Metadata Management, effectuez un clic droit sur la table à répliquer, puis sélectionnez Replicate Table Schema.
-
Dans l'onglet Replicate Table Schema, configurez les paramètres suivants.
Section
Parameter
Description
Destination Location
Table name
Nom de la table de destination. Vous pouvez personnaliser ce nom. Valeur par défaut : Nom_de_la_table_source_copy.
Description
Description de la table de destination. Ce paramètre est facultatif.
Schema
Nom du schéma contenant la table de destination. Valeur par défaut : public.
Advanced Settings
Replicate Properties of Source Table
Indique si les propriétés de la table source doivent être copiées vers la table de destination.
RemarqueLa réplication des propriétés de la table source n'est prise en charge que sur les instances Hologres exécutant la version V0.10 ou ultérieure. Pour les versions antérieures, sélectionnez No ou mettez à niveau votre instance.
Cliquez sur Submit dans le coin supérieur droit pour créer la table répliquée.