Pernyataan CREATE TABLE LIKE membuat tabel dengan skema yang identik dengan hasil kueri SELECT. Topik ini menjelaskan cara menggunakan pernyataan tersebut.
Batasan
-
Pada Hologres V0.9 dan versi sebelumnya, pernyataan
CREATE TABLE LIKEhanya menyalin skema tabel, tidak termasuk properti seperti primary key atau indeks. Anda dapat memeriksa versi instans di halaman produk instans pada Konsol Hologres. -
Pada Hologres V0.10 dan versi setelahnya, pernyataan
CREATE TABLE LIKEdapat menyalin baik skema maupun properti tabel, seperti primary key dan indeks, asalkan Anda mengaktifkan parameter Grand Unified Configuration (GUC) terlebih dahulu dengan menjalankan perintah berikut. Setelah diaktifkan,CREATE TABLE LIKEhanya mendukung penyalinan tabel saat menggunakan sintaksisSELECT * FROM <table_name>. Sintaksis lain, sepertiSELECT <column_1>, <column_2> FROM <table_name>, tidak didukung.set hg_experimental_enable_create_table_like_properties=true; -
Tabel yang dibuat menggunakan pernyataan
CREATE TABLE LIKEtidak secara otomatis menyinkronkan data dari tabel sumber. -
Setiap kolom target dalam pernyataan kueri harus memiliki alias yang unik. Jika tidak, pernyataan pembuatan tabel akan menghasilkan kolom dengan nama yang sama dan menyebabkan error saat dieksekusi. Contohnya:
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 -
Pernyataan
CREATE TABLE LIKEmendukung penyalinan komentar kolom dan properti binary logging (Binlog), tetapi tidak mendukung penyalinan komentar tabel atau properti partisi dinamis. Kemampuan menyalin komentar tabel tersedia mulai Hologres V3.0.33.
Tabel Standar
-
Syntax
Di Hologres, sintaksis pernyataan
CREATE TABLE LIKEuntuk tabel standar adalah sebagai berikut:-- Menyalin tabel standar tanpa propertinya. CALL hg_create_table_like('new_table_name', 'select_query'); -- Menyalin tabel beserta propertinya. set hg_experimental_enable_create_table_like_properties=true;-- Parameter switch pada tingkat session. CALL hg_create_table_like('new_table_name', 'select * from old_table_name');CatatanSaat Anda memanggil fungsi hg_create_table_like, sistem akan membuat tabel bernama new_table_name berdasarkan skema hasil select_query. Tidak ada data yang dimasukkan.
-
Parameter Description
-
new_table_name: Nama tabel yang akan dibuat. Pembuatan foreign table tidak didukung. Parameter ini hanya menerima string tetap; penggabungan string atau string yang dihasilkan oleh fungsi tidak didukung.
-
select_query: Pernyataan SQL kueri dalam bentuk string. Jika pernyataan SQL persis berupa
select * from tablename, CREATE TABLE LIKE secara otomatis menyalin semua properti tabel sumber, termasuk primary key dan indeks. Jika pernyataan SQL mengandung beberapa tanda kutip tunggal, Anda dapat membungkusnya dengan simbol$$, sehingga menjadi$$query_sql$$untuk menghindari konflik tanda kutip. Metode ini direkomendasikan karena lebih mudah digunakan. Sintaksisnya adalah sebagai berikut:CALL HG_CREATE_TABLE_LIKE ('table_name', $$query_sql$$ [, 'partition_clause']) -
old_table_name: Nama tabel sumber yang akan disalin.
-
-
Examples
Asumsikan tabel sumber berikut ada di Hologres:
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;Contoh berikut menunjukkan cara menggunakan
CREATE TABLE LIKEdi Hologres:-
Membuat tabel dengan skema dan properti yang sama seperti tabel sumber.
-- Menyalin tabel beserta propertinya. set hg_experimental_enable_create_table_like_properties=true; CALL hg_create_table_like('new_table', 'select * from src_table'); -
Membuat tabel dengan menambahkan bidang berdasarkan tabel sumber.
-- Menambahkan bidang c yang sama dengan bidang b. CALL hg_create_table_like('holo_table_1', $$select *, "b" as c from src_table$$);
-
Tabel Partisi
-
Syntax
Di Hologres, sintaksis pernyataan
CREATE TABLE LIKEuntuk tabel partisi adalah sebagai berikut:-- Menyalin tabel partisi tanpa propertinya. CALL hg_create_table_like('new_table_name', 'select_query', 'partition_clause'); -
Parameter Description
-
new_table_name: Nama tabel yang akan dibuat. Pembuatan foreign table tidak didukung. Parameter ini hanya menerima string tetap; penggabungan string atau string yang dihasilkan oleh fungsi tidak didukung.
-
select_query: Pernyataan SQL kueri dalam bentuk string. Jika pernyataan SQL persis berupa
select * from tablename, CREATE TABLE LIKE secara otomatis menyalin semua properti tabel sumber, termasuk primary key dan indeks. Jika pernyataan SQL mengandung beberapa tanda kutip tunggal, Anda dapat membungkusnya dengan simbol$$, sehingga menjadi$$query_sql$$untuk menghindari konflik tanda kutip. Metode ini direkomendasikan karena lebih mudah digunakan. Sintaksisnya adalah sebagai berikut:CALL HG_CREATE_TABLE_LIKE ('table_name', $$query_sql$$ [, 'partition_clause']) -
partition_clause: Klausul yang mendefinisikan partisi. Anda dapat menggunakan parameter ini untuk menentukan kunci partisi. Tabel partisi anak tidak dibuat secara otomatis dan harus dibuat secara manual.
-
-
Examples
Asumsikan tabel sumber berikut ada di Hologres:
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;Contoh berikut menunjukkan cara membuat tabel partisi menggunakan
CREATE TABLE LIKEdi Hologres:-
Membuat tabel partisi.
-- Menambahkan bidang bernama ds dan mengatur tabel sebagai tabel partisi yang dipartisi berdasarkan ds. CALL hg_create_table_like('new_table', $$select *, "b" as ds from src_table$$, 'partition by list(ds)'); -
Membuat tabel partisi anak untuk tabel partisi tersebut.
create table new_table_child_20201213 partition of new_table for values in('20201213');-- Menggunakan 20201213 sebagai nilai partisi. create table new_table_child_20201214 partition of new_table for values in('20201214');-- Menggunakan 20201214 sebagai nilai partisi.
-
Menyalin tabel menggunakan antarmuka HoloWeb
HoloWeb menyediakan antarmuka pengguna (UI) yang memungkinkan Anda menyalin tabel tanpa menulis perintah SQL. Ikuti langkah-langkah berikut:
-
Buka halaman HoloWeb. Untuk informasi selengkapnya, lihat Menghubungkan ke HoloWeb dan menjalankan kueri.
-
Pada bilah menu atas halaman HoloWeb, klik Metadata Management.
-
Pada daftar Logged-in Instances di panel navigasi kiri halaman Metadata Management, klik kanan tabel yang ingin Anda salin lalu pilih Replicate Table Schema.
-
Pada tab Replicate Table Schema, konfigurasikan parameter berikut.

Kategori
Parameter
Deskripsi
Lokasi Target
Table Name
Nama tabel target. Anda dapat menentukan nama kustom. Nama default-nya adalah <source_table_name>_copy.
Description
Deskripsi tabel target. Parameter ini bersifat opsional.
Schema
Skema tempat tabel target berada. Nilai default-nya adalah public.
Opsi Lanjutan
Synchronize source table properties
Menentukan apakah properti tabel sumber akan disinkronkan ke tabel target.
CatatanHanya instans Hologres V0.10 dan versi setelahnya yang mendukung sinkronisasi properti tabel sumber. Jika instans Anda lebih lama dari V0.10, pilih No atau upgrade instans Anda.
-
Di pojok kanan atas, klik Submit untuk menyalin tabel.