Anda dapat menjalankan pernyataan CREATE TABLE LIKE untuk membuat tabel yang memiliki skema yang sama dengan tabel hasil eksekusi pernyataan SELECT tertentu. Topik ini menjelaskan cara menjalankan pernyataan tersebut.
Batasan
Pada Hologres V0.9 dan versi sebelumnya, Anda hanya dapat menjalankan pernyataan
CREATE TABLE LIKEuntuk menyalin skema tabel, tanpa menyertakan properti tabel seperti primary key dan index. Versi instans Hologres dapat dilihat pada halaman detail instans di Konsol Hologres.Mulai Hologres V0.10 dan versi selanjutnya, Anda dapat menjalankan pernyataan
CREATE TABLE LIKEuntuk menyalin skema beserta properti tabel, seperti primary key dan index. Untuk menyalin properti tabel dari tabel lain saat membuat tabel baru, Anda harus terlebih dahulu mengatur parameter Grand Unified Configuration (GUC) terkait menjadi true, lalu menggunakan pernyataanSELECT * FROM <table_name>dalam pernyataanCREATE TABLE LIKE. Pernyataan SELECT lainnya, sepertiSELECT <column_1>, <column_2> FROM <table_name>, tidak didukung.set hg_experimental_enable_create_table_like_properties=true;Pernyataan
CREATE TABLE LIKEtidak dapat menyinkronkan data dari tabel sumber.Jika Anda menentukan kolom dalam pernyataan SELECT, setiap kolom harus diberi alias unik. Jika alias yang sama digunakan untuk kolom berbeda, pernyataan CREATE TABLE LIKE akan membuat beberapa kolom dengan nama yang sama pada tabel tersebut, sehingga menghasilkan pesan error. Contoh pernyataan:
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 EXECUTESaat menjalankan pernyataan
CREATE TABLE LIKE, Anda dapat menyalin komentar kolom dan properti log biner, tetapi tidak dapat menyalin komentar tabel atau properti partisi dinamis. Mulai dari versi V3.0.33, penyalinan komentar tabel telah didukung.
Membuat tabel standar
-
Syntax
Pernyataan
CREATE TABLE LIKEdigunakan dengan sintaks berikut untuk membuat tabel standar di Hologres:-- 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 tingkat sesi. CALL hg_create_table_like('new_table_name', 'select * from old_table_name');CatatanSetelah memanggil fungsi hg_create_table_like, Hologres akan membuat tabel dengan skema yang sama seperti tabel hasil eksekusi pernyataan SQL yang ditentukan oleh parameter select_query. Parameter new_table_name menentukan nama tabel yang akan dibuat. Tidak ada data yang dimasukkan ke dalam tabel tersebut.
-
Parameter Description
new_table_name: nama tabel yang akan dibuat. Parameter ini harus berupa string tetap, bukan string variabel atau fungsi yang menghasilkan nama tabel. Anda tidak dapat membuat tabel eksternal dengan pernyataan CREATE TABLE LIKE.
select_query: pernyataan SQL yang digunakan untuk mengambil data. Jika Anda mengatur parameter select_query menjadi
select * from tablename, pernyataanCREATE TABLE LIKEsecara otomatis akan menyalin semua properti dari tabel sumber, termasuk primary key dan index. Jika pernyataan SQL berisi banyak tanda kutip tunggal ('), disarankan untuk menentukan kueri dalam format$$query_sql$$guna menghindari masalah escape tanda kutip tunggal ('), sehingga menyederhanakan operasi. Contoh pernyataan:CALL HG_CREATE_TABLE_LIKE ('table_name', $$query_sql$$ [, 'partition_clause'])old_table_name: nama tabel yang akan disalin.
Example
Pada contoh ini, tabel sumber dibuat di Hologres dengan menjalankan pernyataan berikut:
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;Anda dapat menjalankan pernyataan
CREATE TABLE LIKEdengan salah satu metode berikut untuk membuat tabel di Hologres berdasarkan tabel sumber:Untuk membuat tabel dengan menyalin skema dan properti tabel sumber, jalankan pernyataan berikut:
-- Membuat tabel dengan menyalin skema dan properti tabel sumber. set hg_experimental_enable_create_table_like_properties=true; CALL hg_create_table_like('new_table', 'select * from src_table');Untuk membuat tabel dengan menambahkan kolom ke skema tabel sumber, jalankan pernyataan berikut:
-- Membuat tabel dengan menambahkan Kolom c ke skema tabel sumber. Kolom c memiliki properti yang sama dengan Kolom b. CALL hg_create_table_like('holo_table_1', $$select *, "b" as c from src_table$$);
Membuat tabel partisi
Syntax
Pernyataan
CREATE TABLE LIKEdigunakan dengan sintaks berikut untuk membuat tabel partisi di Hologres:-- Membuat tabel partisi dengan menyalin skema, tetapi tidak properti, dari tabel lain. CALL hg_create_table_like('new_table_name', 'select_query', 'partition_clause');-
Parameter Description
new_table_name: nama tabel yang akan dibuat. Parameter ini harus berupa string tetap, bukan string variabel atau fungsi yang menghasilkan nama tabel. Anda tidak dapat membuat tabel eksternal dengan pernyataan CREATE TABLE LIKE.
select_query: pernyataan SQL yang digunakan untuk mengambil data. Jika Anda mengatur parameter select_query menjadi
select * from tablename, pernyataanCREATE TABLE LIKEsecara otomatis akan menyalin semua properti dari tabel sumber, termasuk primary key dan index. Jika pernyataan SQL berisi banyak tanda kutip tunggal ('), disarankan untuk menentukan kueri dalam format$$query_sql$$guna menghindari masalah escape tanda kutip tunggal ('), sehingga menyederhanakan operasi. Contoh pernyataan:CALL HG_CREATE_TABLE_LIKE ('table_name', $$query_sql$$ [, 'partition_clause'])partition_clause: klausa yang digunakan untuk mempartisi tabel. Klausa ini menentukan kunci partisi. Hologres tidak secara otomatis membuat tabel partisi anak, sehingga Anda harus membuatnya secara manual.
Example
Pada contoh ini, tabel sumber dibuat di Hologres dengan menjalankan pernyataan berikut:
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;Anda dapat menjalankan pernyataan CREATE TABLE LIKE untuk membuat tabel partisi di Hologres berdasarkan tabel sumber, lalu menjalankan pernyataan
CREATE TABLEguna membuat tabel partisi anak:Untuk membuat tabel partisi, jalankan pernyataan berikut:
-- Membuat tabel partisi dengan menambahkan Kolom ds ke skema tabel sumber. Atur Kolom ds sebagai kunci partisi. CALL hg_create_table_like('new_table', $$select *, "b" as ds from src_table$$, 'partition by list(ds)');Untuk membuat tabel partisi anak untuk tabel partisi tersebut, jalankan pernyataan berikut:
create table new_table_child_20201213 partition of new_table for values in('20201213');-- Tentukan 20201213 sebagai nilai kunci partisi. create table new_table_child_20201214 partition of new_table for values in('20201214');-- Tentukan 20201214 sebagai nilai kunci partisi.
Menyalin tabel di Konsol HoloWeb
Anda dapat menggunakan HoloWeb untuk menyalin tabel secara visual tanpa menulis pernyataan SQL. Prosedurnya sebagai berikut:
-
Buka Konsol HoloWeb. Untuk informasi selengkapnya, lihat Menghubungkan ke HoloWeb dan menjalankan kueri SQL.
-
Pada bilah menu atas halaman HoloWeb, klik Metadata Management.
-
Dari daftar Instances Connected pada halaman Metadata Management, klik kanan tabel yang ingin direplikasi, lalu pilih Replicate Table Schema.
-
Pada tab Replicate Table Schema, konfigurasikan parameter berikut.
Bagian
Parameter
Deskripsi
Destination Location
Table name
Nama tabel tujuan. Anda dapat mengatur nama kustom. Nilai default: Nama tabel sumber_copy.
Description
Deskripsi tabel tujuan. Parameter ini opsional.
Schema
Nama skema tempat tabel tujuan berada. Nilai default: public.
Advanced Settings
Replicate Properties of Source Table
Menentukan apakah properti tabel sumber akan disalin ke tabel tujuan.
CatatanReplikasi properti tabel sumber hanya didukung pada instans Hologres yang menjalankan V0.10 atau versi setelahnya. Untuk versi sebelumnya, pilih No atau upgrade instans Anda.
-
Klik Submit di pojok kanan atas untuk membuat tabel hasil replikasi.