全部产品
Search
文档中心

Hologres:CREATE TABLE LIKE

更新时间:Feb 04, 2026

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 LIKE hanya 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 LIKE dapat 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 LIKE hanya mendukung penyalinan tabel saat menggunakan sintaksis SELECT * FROM <table_name>. Sintaksis lain, seperti SELECT <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 LIKE tidak 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 LIKE mendukung 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

  1. Syntax

    Di Hologres, sintaksis pernyataan CREATE TABLE LIKE untuk 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');
    Catatan

    Saat 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.

  2. 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.

  3. 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 LIKE di 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

  1. Syntax

    Di Hologres, sintaksis pernyataan CREATE TABLE LIKE untuk tabel partisi adalah sebagai berikut:

    -- Menyalin tabel partisi tanpa propertinya.
    CALL hg_create_table_like('new_table_name', 'select_query', 'partition_clause');
  2. 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.

  3. 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 LIKE di 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:

  1. Buka halaman HoloWeb. Untuk informasi selengkapnya, lihat Menghubungkan ke HoloWeb dan menjalankan kueri.

  2. Pada bilah menu atas halaman HoloWeb, klik Metadata Management.

  3. Pada daftar Logged-in Instances di panel navigasi kiri halaman Metadata Management, klik kanan tabel yang ingin Anda salin lalu pilih Replicate Table Schema.

  4. 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.

    Catatan

    Hanya 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.

  5. Di pojok kanan atas, klik Submit untuk menyalin tabel.