All Products
Search
Document Center

Hologres:CREATE TABLE

Last Updated:Jun 03, 2026

Gunakan CREATE TABLE untuk menentukan tata letak penyimpanan tabel di Hologres. Menetapkan mode penyimpanan, kunci distribusi, dan indeks yang tepat saat pembuatan sangat penting—sebagian besar properti ini tidak dapat diubah setelah tabel dibuat.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Panduan cepat

Contoh ini membuat tabel detail transaksi menggunakan sintaks CREATE TABLE WITH (tersedia di Hologres V2.1 dan versi lebih baru). Contoh ini menggunakan konvensi penamaan hierarkis, mendefinisikan beberapa bidang, dan menyertakan komentar metadata.

BEGIN;

-- Buat tabel fakta detail transaksi.
-- Gunakan skema public dan ikuti konvensi penamaan hierarkis (dwd_xxx).
CREATE TABLE IF NOT EXISTS public.dwd_trade_orders (
    order_id      BIGINT NOT NULL,
    shop_id       INT NOT NULL,
    user_id       TEXT NOT NULL,
    order_amount  NUMERIC(12, 2) DEFAULT 0.00,
    payment       NUMERIC(12, 2) DEFAULT 0.00,
    payment_type  INT DEFAULT 0,              -- 0: Belum Dibayar, 1: Alipay, 2: WeChat Pay, 3: Kartu Kredit
    is_delivered  BOOLEAN DEFAULT false,
    dt            TEXT NOT NULL,              -- Waktu data, dalam format YYYYMMDD
    order_time    TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (order_id)
)
WITH (
    orientation                  = 'column',              -- Berorientasi kolom: terbaik untuk agregasi OLAP pada dataset besar
    distribution_key             = 'order_id',            -- Shard data berdasarkan order_id untuk distribusi merata
    clustering_key               = 'order_time:asc',      -- Urutkan data berdasarkan waktu dalam file untuk mempercepat kueri rentang
    event_time_column            = 'order_time',          -- Aktifkan pemotongan tingkat file untuk filter rentang waktu
    bitmap_columns               = 'shop_id,payment_type,is_delivered', -- Percepat filter kesetaraan pada kolom dengan kardinalitas rendah
    dictionary_encoding_columns  = 'user_id:auto'         -- Percepat GROUP BY dan FILTER pada kolom string
);

-- Tambahkan komentar metadata.
COMMENT ON TABLE  public.dwd_trade_orders           IS 'Tabel fakta dasar untuk detail pesanan transaksi.';
COMMENT ON COLUMN public.dwd_trade_orders.order_id  IS 'Pengidentifikasi unik pesanan.';
COMMENT ON COLUMN public.dwd_trade_orders.shop_id   IS 'ID unik toko.';
COMMENT ON COLUMN public.dwd_trade_orders.user_id   IS 'ID pembeli.';
COMMENT ON COLUMN public.dwd_trade_orders.dt        IS 'Waktu data, dalam format YYYYMMDD.';
COMMENT ON COLUMN public.dwd_trade_orders.order_time IS 'Waktu tepat saat pesanan dibuat.';

COMMIT;

Lihat skema tabel

Jalankan kueri berikut untuk mengambil pernyataan Data Definition Language (DDL) tabel:

SELECT hg_dump_script('public.dwd_trade_orders');

Masukkan data

Hologres kompatibel dengan sintaks standar Data Manipulation Language (DML). Pernyataan berikut memasukkan 10 baris data sampel:

INSERT INTO public.dwd_trade_orders
    (order_id, shop_id, user_id, order_amount, payment, payment_type, is_delivered, dt, order_time)
VALUES
    (50001, 101, 'U678', 299.00, 280.00, 1, true,  '20231101', '2023-11-01 10:00:01+08'),
    (50002, 102, 'U992',  59.00,  59.00, 2, false, '20231101', '2023-11-01 10:05:12+08'),
    (50003, 101, 'U441', 150.00, 145.00, 1, true,  '20231101', '2023-11-01 10:10:45+08'),
    (50004, 105, 'U219', 888.00, 888.00, 3, true,  '20231101', '2023-11-01 10:20:11+08'),
    (50005, 102, 'U883',  35.00,  30.00, 1, false, '20231101', '2023-11-01 10:32:00+08'),
    (50006, 110, 'U007', 120.50, 120.50, 2, true,  '20231101', '2023-11-01 10:45:33+08'),
    (50007, 101, 'U321', 210.00, 210.00, 1, true,  '20231101', '2023-11-01 11:02:19+08'),
    (50008, 108, 'U556',  45.00,  45.00, 2, false, '20231101', '2023-11-01 11:15:04+08'),
    (50009, 101, 'U112', 300.00, 290.00, 3, true,  '20231101', '2023-11-01 11:25:55+08'),
    (50010, 105, 'U449',  99.90,  99.90, 1, true,  '20231101', '2023-11-01 11:40:22+08');

Kueri data

-- Hitung total jumlah transaksi per toko, diurutkan secara menurun.
SELECT
    shop_id,
    COUNT(1)     AS total_orders,
    SUM(payment) AS total_payment
FROM public.dwd_trade_orders
GROUP BY shop_id
ORDER BY total_payment DESC;

Output yang diharapkan:

shop_id  total_orders  total_payment
105      2             987.90
101      4             925.00
110      1             120.50
102      1              59.00
108      1              45.00

Sintaks

Sintaks CREATE TABLE

Hologres mendukung dua sintaks untuk mendefinisikan properti dan komentar tabel:

Sintaks standar (direkomendasikan untuk Hologres V2.1 dan versi lebih baru)

Gunakan kata kunci WITH untuk mendefinisikan properti secara inline. Sintaks ini lebih ringkas dan menawarkan kinerja lebih baik.

BEGIN;

CREATE TABLE [IF NOT EXISTS] [schema_name.]table_name (
    {
        column_name column_type [column_constraints, [...]]
        | table_constraints
        [,...]
    }
)
[WITH (
    property = 'value'
    [, ...]
)];

[COMMENT ON COLUMN <[schema_name.]tablename.column> IS '<value>';]
[COMMENT ON TABLE  <[schema_name.]tablename>        IS '<value>';]

COMMIT;

Sintaks kompatibel (didukung di semua versi)

Gunakan CALL set_table_property untuk mengatur properti dan COMMENT untuk menambahkan komentar. Semua pernyataan harus berada dalam blok transaksi BEGIN...COMMIT yang sama dengan CREATE TABLE.

BEGIN;

CREATE TABLE [IF NOT EXISTS] [schema_name.]table_name (
    {
        column_name column_type [column_constraints, [...]]
        | table_constraints
        [,...]
    }
);

CALL set_table_property('[schema_name.]<table_name>', '<property>', '<value>');
COMMENT ON COLUMN <[schema_name.]tablename.column> IS '<value>';
COMMENT ON TABLE  <[schema_name.]tablename>        IS '<value>';

COMMIT;

Properti tabel

Properti dikelompokkan menjadi tiga kategori berdasarkan fungsinya. Properti yang ditandai tidak dapat dimodifikasi tidak dapat diubah setelah tabel dibuat—Anda harus membuat ulang tabel tersebut.

Organisasi data (tidak dapat dimodifikasi setelah pembuatan)

Properti Deskripsi Berorientasi kolom Berorientasi baris Hibrida baris-kolom Bawaan
orientation Menetapkan format penyimpanan. Lihat Mode penyimpanan. column row row,column column
distribution_key Menetapkan kebijakan sharding data. Lihat Kunci distribusi. Kunci primer secara bawaan; pilih satu kolom dari kunci primer untuk kinerja terbaik. Kunci primer secara bawaan. Kunci primer secara bawaan. Kunci primer
clustering_key Mengurutkan data secara fisik dalam file untuk mempercepat kueri rentang. Lihat Kunci pengelompokan. Kosong secara bawaan. Gunakan paling banyak satu kolom; hanya urutan ascending yang didukung. Kunci primer secara bawaan. Kosong secara bawaan.
event_time_column Membagi data menjadi segmen file berdasarkan waktu, memungkinkan filter rentang waktu cepat. Lihat Kolom waktu event. Bidang timestamp non-null pertama secara bawaan. Tidak didukung. Bidang timestamp non-null pertama secara bawaan. Timestamp non-null pertama
table_group Mengontrol jumlah shard untuk distribusi data. Lihat Kelompok tabel dan jumlah shard. Kelompok tabel bawaan. Kelompok tabel bawaan. Kelompok tabel bawaan. Kelompok tabel bawaan
Penting

orientation, distribution_key, clustering_key, dan event_time_column tidak dapat dimodifikasi setelah pembuatan tabel. Rencanakan dengan cermat sebelum membuat tabel. table_group juga tidak dapat diubah tanpa membuat ulang tabel atau melakukan resharding.

Akselerasi indeks (dapat dimodifikasi setelah pembuatan)

Properti Deskripsi Berorientasi kolom Berorientasi baris Hibrida baris-kolom
bitmap_columns Membuat indeks bitmap untuk mempercepat filter kesetaraan pada kolom dengan kardinalitas rendah. Lihat Indeks bitmap. Gunakan untuk kolom dalam perbandingan kesetaraan; hindari menetapkan lebih dari 10 kolom. Didukung Tidak didukung Didukung
dictionary_encoding_columns Membuat peta kamus yang mengonversi perbandingan string menjadi perbandingan numerik, mempercepat operasi GROUP BY dan FILTER. Semua kolom TEXT pada tabel berorientasi kolom diaktifkan secara bawaan. Di V0.9 dan versi lebih baru, Hologres secara otomatis menentukan apakah akan menerapkan encoding kamus berdasarkan karakteristik data. Didukung Tidak didukung Didukung

Kedua properti bitmap_columns dan dictionary_encoding_columns dapat dimodifikasi setelah pembuatan tabel melalui ALTER TABLE.

Sintaks `dictionary_encoding_columns`:

CALL set_table_property('table_name', 'dictionary_encoding_columns', '[columnName{:[on|off|auto]}[,...]]');

Siklus hidup data

Properti Deskripsi Berorientasi kolom Berorientasi baris Hibrida baris-kolom
time_to_live_in_seconds Menetapkan Time to Live (TTL) untuk data tabel dalam detik. TTL dimulai dari waktu penulisan, bukan waktu pembaruan. Di V1.3.24 dan versi lebih baru, nilai minimum yang diizinkan adalah 86.400 (satu hari). Didukung Tidak disarankan — gunakan nilai bawaan Tidak disarankan
storage_mode Menentukan apakah data disimpan di penyimpanan hot atau cold. Didukung di V1.3 dan versi lebih baru. Lihat Penyimpanan data bertingkat. Gunakan sesuai kebutuhan Gunakan sesuai kebutuhan

Catatan `time_to_live_in_seconds`:

  • TTL tidak diberlakukan pada waktu yang tepat. Setelah TTL berakhir, data dihapus dalam jendela waktu tertentu, bukan pada momen yang tepat.

  • Hanya data yang dihapus; tabel itu sendiri tetap ada.

  • TTL dapat menyebabkan kunci primer duplikat atau hasil kueri tidak konsisten setelah penghapusan.

  • Untuk manajemen siklus hidup data produksi, gunakan tabel partisi sebagai gantinya. Lihat CREATE PARTITION TABLE.

  • Mulai dari Hologres V4.2, untuk tabel dengan kunci primer, pengaturan TTL dibatasi oleh parameter GUC hg_time_to_live_in_days_min_value. Parameter ini diukur dalam hari, dengan nilai bawaan 36500 (100 tahun), dan hanya dapat dimodifikasi oleh Superuser. Saat Anda mengatur TTL tabel dengan kunci primer melalui CREATE TABLE, ALTER TABLE, SET_TABLE_PROPERTY, atau REBUILD, sistem memverifikasi bahwa nilai tersebut memenuhi persyaratan minimum (harus lebih besar dari atau sama dengan jumlah hari yang sesuai dengan hg_time_to_live_in_days_min_value). Tabel tanpa kunci primer tidak terpengaruh oleh batasan ini.

Jika tidak diatur, TTL bawaan adalah 100 tahun (efektif tidak kedaluwarsa).

Sintaks `time_to_live_in_seconds`:

CALL set_table_property('table_name', 'time_to_live_in_seconds', '<non_negative_literal>');

Sintaks `storage_mode`:

-- Atur mode penyimpanan saat pembuatan tabel:
CREATE TABLE <table_name> (...) WITH (storage_mode = 'hot');
CREATE TABLE <table_name> (...) WITH (storage_mode = 'cold');

-- Atur mode penyimpanan setelah pembuatan tabel:
CALL set_table_property('table_name', 'storage_mode', 'hot');
CALL set_table_property('table_name', 'storage_mode', 'cold');

Contoh

Contoh: Tabel partisi untuk data time-series berskala besar

Saat volume data meningkat, tabel flat tunggal menjadi mahal untuk dipelihara—membersihkan data historis memerlukan pemindaian semua baris, dan kueri berbasis waktu melakukan pemindaian tabel penuh. Tabel partisi secara fisik mengisolasi data berdasarkan hari, memungkinkan penghapusan partisi instan untuk pembersihan dan pemangkasan partisi otomatis selama kueri.

Contoh ini meningkatkan tabel dwd_trade_orders dari bagian Panduan cepat ke struktur partisi. Definisi bidang dan pengaturan indeks diwariskan, tetapi kunci primer harus mencakup kunci partisi dt.

BEGIN;

-- Buat tabel induk partisi.
-- Kunci primer mencakup kunci bisnis (order_id) dan kunci partisi (dt).
CREATE TABLE IF NOT EXISTS public.dwd_trade_orders_partitioned (
    order_id      BIGINT NOT NULL,
    shop_id       INT NOT NULL,
    user_id       TEXT NOT NULL,
    order_amount  NUMERIC(12, 2) DEFAULT 0.00,
    payment       NUMERIC(12, 2) DEFAULT 0.00,
    payment_type  INT DEFAULT 0,
    is_delivered  BOOLEAN DEFAULT false,
    dt            TEXT NOT NULL,
    order_time    TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (order_id, dt)
)
PARTITION BY LIST (dt)
WITH (
    orientation       = 'column',
    distribution_key  = 'order_id',
    event_time_column = 'order_time',
    clustering_key    = 'order_time:asc'
);

COMMIT;

-- Buat tabel anak untuk menyediakan penyimpanan fisik untuk tanggal tertentu.
CREATE TABLE IF NOT EXISTS public.dwd_trade_orders_20231101
    PARTITION OF public.dwd_trade_orders_partitioned FOR VALUES IN ('20231101');

-- Masukkan data. Logika aplikasi identik dengan tabel flat.
-- Data secara otomatis diarahkan ke tabel anak yang sesuai.
INSERT INTO public.dwd_trade_orders_partitioned
    (order_id, shop_id, user_id, order_amount, payment, payment_type, is_delivered, dt, order_time)
VALUES
    (50001, 101, 'U678', 299.00, 280.00, 1, true,  '20231101', '2023-11-01 10:00:01+08'),
    (50002, 102, 'U992',  59.00,  59.00, 2, false, '20231101', '2023-11-01 10:05:12+08'),
    (50003, 101, 'U441', 150.00, 145.00, 1, true,  '20231101', '2023-11-01 10:10:45+08'),
    (50004, 105, 'U219', 888.00, 888.00, 3, true,  '20231101', '2023-11-01 10:20:11+08'),
    (50005, 102, 'U883',  35.00,  30.00, 1, false, '20231101', '2023-11-01 10:32:00+08'),
    (50006, 110, 'U007', 120.50, 120.50, 2, true,  '20231101', '2023-11-01 10:45:33+08'),
    (50007, 101, 'U321', 210.00, 210.00, 1, true,  '20231101', '2023-11-01 11:02:19+08'),
    (50008, 108, 'U556',  45.00,  45.00, 2, false, '20231101', '2023-11-01 11:15:04+08'),
    (50009, 101, 'U112', 300.00, 290.00, 3, true,  '20231101', '2023-11-01 11:25:55+08'),
    (50010, 105, 'U449',  99.90,  99.90, 1, true,  '20231101', '2023-11-01 11:40:22+08');

-- Kueri dengan filter partisi. Hologres hanya memindai tabel anak yang sesuai.
SELECT COUNT(*) FROM public.dwd_trade_orders_partitioned WHERE dt = '20231101';

-- Hapus tabel anak untuk mereklaim ruang dalam hitungan detik (jauh lebih cepat daripada DELETE).
-- DROP TABLE public.dwd_trade_orders_20231101;

Contoh: Analitik real-time untuk dataset besar (tabel fakta)

Skenario: Ringkasan dashboard real-time dengan volume data besar, di mana kebutuhan utamanya adalah agregasi cepat—misalnya, menghitung Gross Merchandise Volume (GMV) dan jumlah pesanan.

Penyimpanan berorientasi kolom unggul di sini: rasio kompresi tinggi mengurangi I/O, dan pemindaian kolom hanya membaca kolom yang diperlukan untuk agregasi.

BEGIN;

CREATE TABLE IF NOT EXISTS public.dwd_order_summary (
    order_id    BIGINT PRIMARY KEY,
    category_id INT NOT NULL,
    gmv         NUMERIC(15, 2),
    order_time  TIMESTAMPTZ NOT NULL
) WITH (
    orientation       = 'column',           -- Terbaik untuk agregasi skala besar; kompresi tinggi, pemindaian kolom efisien
    distribution_key  = 'order_id',         -- Distribusi merata; memungkinkan join lokal dengan tabel pesanan lain
    event_time_column = 'order_time',       -- Memungkinkan pemotongan segmen tingkat file untuk filter rentang waktu
    clustering_key    = 'order_time:asc'    -- Mengurangi I/O disk untuk kueri "jam terakhir" atau "hari tertentu"
);

COMMENT ON TABLE  public.dwd_order_summary            IS 'Tabel fakta untuk detail ringkasan pesanan.';
COMMENT ON COLUMN public.dwd_order_summary.order_id   IS 'ID pesanan unik.';
COMMENT ON COLUMN public.dwd_order_summary.category_id IS 'ID kategori.';
COMMENT ON COLUMN public.dwd_order_summary.gmv        IS 'Gross merchandise volume.';
COMMENT ON COLUMN public.dwd_order_summary.order_time IS 'Waktu saat pesanan dilakukan.';

COMMIT;

Contoh: Kueri titik konkurensi tinggi (tabel dimensi)

Skenario: Ambil profil pengguna berdasarkan user_id dalam milidetik, di bawah Queries Per Second (QPS) tinggi.

Penyimpanan berorientasi baris dioptimalkan untuk pencarian berbasis kunci primer. Semua data baris disimpan secara berurutan, sehingga kueri titik sangat cepat tanpa memindai kolom yang tidak relevan.

BEGIN;

CREATE TABLE IF NOT EXISTS public.dim_user_persona (
    user_id       TEXT PRIMARY KEY,
    user_level    INT,
    persona_jsonb JSONB
) WITH (
    orientation = 'row'
    -- Untuk tabel berorientasi baris, kunci primer secara otomatis digunakan sebagai kunci distribusi
    -- dan kunci pengelompokan. Tidak diperlukan pengaturan tambahan.
);

COMMENT ON TABLE  public.dim_user_persona              IS 'Tabel dimensi untuk profil pengguna.';
COMMENT ON COLUMN public.dim_user_persona.user_id      IS 'ID pengguna unik.';
COMMENT ON COLUMN public.dim_user_persona.user_level   IS 'Level pengguna.';
COMMENT ON COLUMN public.dim_user_persona.persona_jsonb IS 'Fitur profil pengguna dalam format JSON.';

COMMIT;

Contoh: Beban kerja hibrida (penyimpanan hibrida baris-kolom)

Skenario: Sistem logistik dan purna jual yang membutuhkan analitik (merangkum status logistik) dan kueri titik (mengambil detail pesanan berdasarkan order_id).

Penyimpanan hibrida baris-kolom menggabungkan kinerja kueri titik tingkat milidetik dari penyimpanan berorientasi baris dengan agregasi efisien dari penyimpanan berorientasi kolom.

BEGIN;

CREATE TABLE IF NOT EXISTS public.ads_shipping_info (
    order_id         BIGINT PRIMARY KEY,
    shipping_status  INT,
    receiver_address TEXT,
    update_time      TIMESTAMPTZ
) WITH (
    orientation      = 'row,column',      -- Mendukung kueri titik dan agregasi
    distribution_key = 'order_id',        -- Mengontrol distribusi data di seluruh shard
    bitmap_columns   = 'shipping_status'  -- Mempercepat kueri filter "status = X" pada kolom dengan kardinalitas rendah
);

COMMENT ON TABLE  public.ads_shipping_info                  IS 'Tabel aplikasi untuk kueri status logistik.';
COMMENT ON COLUMN public.ads_shipping_info.order_id         IS 'ID pesanan.';
COMMENT ON COLUMN public.ads_shipping_info.shipping_status  IS 'Status logistik (1: Akan dikirim, 2: Dalam perjalanan, 3: Terkirim).';
COMMENT ON COLUMN public.ads_shipping_info.receiver_address IS 'Alamat pengiriman.';

COMMIT;

Batasan

Hologres mendukung maksimal 6.400 kolom per tabel.

Batasan kunci primer

  • Composite primary keys: Beberapa bidang dapat membentuk kunci primer. Semua bidang harus NOT NULL dan harus dideklarasikan dalam satu pernyataan.

    BEGIN;
    CREATE TABLE public.test (
        id TEXT NOT NULL,
        ds TEXT NOT NULL,
        PRIMARY KEY (id, ds)
    );
    CALL SET_TABLE_PROPERTY('public.test', 'orientation', 'column');
    COMMIT;
  • Tipe yang tidak didukung: FLOAT, DOUBLE, NUMERIC, ARRAY, JSON, DATE, dan tipe kompleks lainnya tidak dapat digunakan sebagai kolom kunci primer.

  • Tidak dapat dimodifikasi: Kunci primer tidak dapat diubah setelah pembuatan tabel. Buat ulang tabel jika Anda memerlukan kunci primer yang berbeda.

  • Persyaratan penyimpanan: Tabel berorientasi baris dan hibrida baris-kolom harus memiliki kunci primer. Kunci primer opsional untuk tabel berorientasi kolom.

Dukungan kendala

Kendala Tingkat kolom Tingkat tabel
primary key Didukung Didukung
not null Didukung
null Didukung
unique Tidak didukung Tidak didukung
check Tidak didukung Tidak didukung
default Didukung Tidak didukung

Aturan penamaan dan escaping

  • Nama kolom tidak boleh diawali dengan hg_.

  • Nama skema tidak boleh diawali dengan holo_, hg_, atau pg_.

  • Nama tabel tidak boleh melebihi 127 byte.

  • Apit nama dengan tanda kutip ganda ("") ketika nama tersebut merupakan kata kunci SQL, kata tercadang, bidang sistem (seperti ctid), pengidentifikasi case-sensitive, nama dengan karakter khusus, atau nama yang diawali angka.

Sintaks untuk nama kolom escaped di Hologres V2.0 dan versi lebih baru:

-- Kolom escaped tunggal
BEGIN;
CREATE TABLE tbl (c1 INT NOT NULL);
CALL set_table_property('tbl', 'clustering_key', '"c1":asc');
COMMIT;

-- Beberapa kolom, termasuk yang huruf kapital (V2.1 dan versi lebih baru)
BEGIN;
CREATE TABLE tbl ("C1" INT NOT NULL, c2 TEXT NOT NULL) WITH (clustering_key = '"C1",c2');
COMMIT;

-- Beberapa kolom, termasuk yang huruf kapital (V2.0 dan versi lebih baru)
BEGIN;
CREATE TABLE tbl ("C1" INT NOT NULL, c2 TEXT NOT NULL);
CALL set_table_property('tbl', 'clustering_key', '"C1",c2');
COMMIT;

Sintaks untuk nama kolom escaped di versi sebelum Hologres V2.0:

BEGIN;
CREATE TABLE tbl (c1 INT NOT NULL);
CALL set_table_property('tbl', 'clustering_key', '"c1:asc"');
COMMIT;

-- Beberapa kolom, termasuk yang huruf kapital
BEGIN;
CREATE TABLE tbl ("C1" INT NOT NULL, c2 TEXT NOT NULL);
CALL set_table_property('tbl', 'clustering_key', '"C1,c2"');
COMMIT;

Untuk beralih ke sintaks parser lama di Hologres V2.0 saat diperlukan:

-- Aktifkan sintaks lama di tingkat session.
SET hg_disable_parse_holo_property = on;

-- Aktifkan sintaks lama di tingkat database.
ALTER DATABASE <db_name> SET hg_disable_parse_holo_property = on;

Perilaku IF NOT EXISTS

Kondisi IF NOT EXISTS ditentukan IF NOT EXISTS tidak ditentukan
Tabel dengan nama yang sama sudah ada Mengembalikan NOTICE, melewati pembuatan, operasi berhasil Mengembalikan ERROR
Tidak ada tabel dengan nama yang sama Operasi berhasil Operasi berhasil

Batasan modifikasi

Setelah tabel dibuat, hal-hal berikut tidak dapat diubah:

  • Tipe data (sebelum Hologres V3.0)

  • Urutan kolom

  • Kendala nullability (NOT NULL ↔ nullable)

  • Properti tata letak penyimpanan: orientation, distribution_key, clustering_key, event_time_column

Hal-hal berikut dapat diubah setelah pembuatan tabel:

  • bitmap_columns dan dictionary_encoding_columns — melalui ALTER TABLE

  • Tipe data: beberapa tipe di V3.0 dan versi lebih baru; semua tipe melalui REBUILD di V3.1 dan versi lebih baru — lihat Ubah tipe data dan REBUILD

Langkah selanjutnya

  • CREATE PARTITION TABLE — kelola siklus hidup data dalam skala besar menggunakan tabel partisi

  • ALTER TABLE — modifikasi properti yang dapat diubah setelah pembuatan tabel

  • Distribution key — pelajari cara memilih kunci distribusi yang tepat

  • Clustering key — pahami bagaimana kunci pengelompokan meningkatkan kinerja kueri

  • Storage modes — bandingkan penyimpanan berorientasi kolom, berorientasi baris, dan hibrida baris-kolom secara mendalam