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:
-
Koneksi ke database target—HoloWeb adalah tool yang direkomendasikan untuk menjalankan kueri
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 |
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 melaluiCREATE TABLE ,ALTER TABLE ,SET_TABLE_PROPERTY , atauREBUILD , sistem memverifikasi bahwa nilai tersebut memenuhi persyaratan minimum (harus lebih besar dari atau sama dengan jumlah hari yang sesuai denganhg_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 NULLdan 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_, ataupg_. -
Nama tabel tidak boleh melebihi 127 byte.
-
Apit nama dengan tanda kutip ganda (
"") ketika nama tersebut merupakan kata kunci SQL, kata tercadang, bidang sistem (sepertictid), 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_columnsdandictionary_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