全部产品
Search
文档中心

Hologres:CREATE TABLE

更新时间:Jan 28, 2026

Tabel merupakan unit dasar untuk menyimpan dan mengorganisasi data di Hologres. Anda dapat mengonfigurasi format penyimpanan, indeks tabel, dan properti guna mendukung pemrosesan data real-time yang efisien serta analitik data skala besar.

Panduan cepat

Buat tabel

Kami menyarankan penggunaan sintaks CREATE TABLE WITH, yang tersedia mulai Hologres V2.1 dan versi selanjutnya. Contoh berikut membuat tabel detail transaksi yang mengikuti konvensi penamaan hierarkis, mencakup berbagai bidang, dan dilengkapi komentar lengkap.

BEGIN;

-- Buat tabel fakta detail transaksi (tabel non-partisi standar)
-- Secara eksplisit tentukan skema public dan gunakan penamaan hierarkis (dwd_xxx) dalam nama tabel
CREATE TABLE IF NOT EXISTS public.dwd_trade_orders (
    order_id BIGINT NOT NULL,           -- ID pesanan unik
    shop_id INT NOT NULL,              -- ID toko
    user_id TEXT NOT NULL,             -- ID pengguna
    order_amount NUMERIC(12, 2) DEFAULT 0.00,       -- Jumlah pesanan
    payment NUMERIC(12, 2) DEFAULT 0.00,         -- Jumlah yang dibayar
    payment_type INT DEFAULT 0,                     -- Jenis pembayaran (0: belum dibayar, 1: Alipay, 2: WeChat, 3: kartu kredit)
    is_delivered BOOLEAN DEFAULT false,             -- Apakah sudah dikirim
    dt TEXT NOT NULL,                               -- Waktu data
    order_time TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Waktu pesanan
    PRIMARY KEY (order_id)                          -- Tetapkan primary key untuk memastikan keunikan data
)
WITH (
    orientation = 'column',                         -- Gunakan column store: ideal untuk analitik real-time (OLAP) pada dataset besar
    distribution_key = 'order_id',                  -- Tetapkan distribution key: data di-shard berdasarkan order_id
    clustering_key = 'order_time:asc',              -- Tetapkan clustering key: data diurutkan secara ascending berdasarkan waktu dalam file
    event_time_column = 'order_time',               -- Tetapkan segment key: memungkinkan pemangkasan tingkat file untuk memfilter rentang waktu dengan cepat
    bitmap_columns = 'shop_id,payment_type,is_delivered', -- Tetapkan bitmap index: mempercepat filter kesetaraan pada kolom dengan kardinalitas rendah
    dictionary_encoding_columns = 'user_id:auto'    -- Tetapkan dictionary encoding: mempercepat agregasi 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 'ID pesanan unik';
COMMENT ON COLUMN public.dwd_trade_orders.shop_id IS 'ID toko unik';
COMMENT ON COLUMN public.dwd_trade_orders.user_id IS 'ID pengguna pembeli';
COMMENT ON COLUMN public.dwd_trade_orders.dt IS 'Waktu data, format YYYYMMDD';
COMMENT ON COLUMN public.dwd_trade_orders.order_time IS 'Timestamp tepat saat pesanan dibuat';

COMMIT;

Lihat struktur tabel

Anda dapat menjalankan perintah berikut untuk melihat pernyataan Data Definition Language (DDL) dari tabel:

SELECT hg_dump_script('public.dwd_trade_orders');

Masukkan data

Hologres mendukung sintaks Data Manipulation Language (DML) standar. Contoh berikut memasukkan 10 baris data produksi simulasi ke dalam tabel.

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 pembayaran per toko dan urutkan berdasarkan jumlah secara descending
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;

Kueri mengembalikan hasil berikut:

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

Referensi sintaks

Sintaks pembuatan tabel

Hologres menyediakan dua sintaks untuk mengatur properti tabel dan menambahkan komentar:

  • Sintaks standar (direkomendasikan untuk V2.1 dan versi selanjutnya)

    Anda dapat menggunakan klausa WITH untuk mendefinisikan properti. Sintaks ini lebih ringkas dan memberikan performa lebih baik. Komentar dapat ditambahkan setelah pernyataan CREATE TABLE. Untuk contoh lengkap, lihat Buat tabel.

    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 kompatibilitas (didukung di semua versi)

    Anda dapat menggunakan pernyataan CALL dengan set_table_property untuk mengatur properti dan pernyataan COMMENT untuk menambahkan komentar. Pernyataan-pernyataan tersebut harus berada dalam blok transaksi yang sama (BEGIN...COMMIT) dengan pernyataan 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

Parameter

Deskripsi

Tabel berorientasi kolom

Tabel berorientasi baris

Tabel hibrida

Nilai yang direkomendasikan

Dapat dimodifikasi setelah pembuatan tabel?

orientation

Menentukan format penyimpanan tabel. Untuk informasi selengkapnya, lihat Format penyimpanan tabel: column store, row store, dan hybrid.

column (default)

Lihat Contoh: Analitik waktu nyata pada data besar (tabel fakta).

row

Lihat Contoh: Point lookup konkurensi tinggi berdasarkan primary key (tabel dimensi).

row,column

Lihat Contoh: Workload campuran (penyimpanan hibrida).

column

Tidak. Anda harus membuat ulang tabel untuk melakukan modifikasi.

distribution_key

Menentukan distribution key, yang menentukan strategi distribusi data. Untuk informasi selengkapnya, lihat Distribution key.

Primary key digunakan secara default. Anda dapat mengubah kunci berdasarkan skenario bisnis Anda.

Primary key digunakan secara default.

Primary key digunakan secara default.

Subset dari primary key. Kami menyarankan hanya menggunakan satu kolom.

clustering_key

Menentukan clustering key, yang meningkatkan performa kueri. Untuk informasi selengkapnya, lihat Clustering key.

Kosong secara default.

Primary key digunakan secara default.

Kosong secara default.

Kami menyarankan maksimal satu kolom dalam urutan ascending.

event_time_column

Menentukan segment key, yang meningkatkan performa kueri. Untuk informasi selengkapnya, lihat Event time column (segment key).

Kolom timestamp non-null pertama digunakan secara default.

Tidak didukung.

Kolom timestamp non-null pertama digunakan secara default.

Kami menyarankan menggunakan kolom timestamp.

table_group

Konsep penyimpanan logis yang digunakan untuk mengelola jumlah shard. Untuk informasi selengkapnya, lihat Panduan table group dan jumlah shard.

default table group digunakan secara default.

Gunakan nilai default.

Tidak. Untuk mengubah table group, Anda harus membuat ulang tabel atau melakukan resharding.

bitmap_columns

Menentukan bitmap index. Untuk informasi selengkapnya, lihat Bitmap index.

Gunakan sesuai kebutuhan.

Tidak didukung.

Gunakan sesuai kebutuhan.

Disarankan untuk kolom yang digunakan dalam perbandingan kesetaraan, dengan batas umum maksimal 10 kolom.

Ya. Untuk informasi selengkapnya, lihat ALTER TABLE.

dictionary_encoding_columns

Dictionary encoding.

Gunakan sesuai kebutuhan.

Tidak didukung.

Gunakan sesuai kebutuhan.

Kami menyarankan menggunakan maksimal 10 kolom dengan kardinalitas rendah.

Ya. Untuk informasi selengkapnya, lihat ALTER TABLE.

time_to_live_in_seconds

Menentukan waktu hidup (TTL) data dalam tabel, dalam satuan detik. TTL tidak presisi. Jangan gunakan TTL untuk mengelola siklus hidup data di lingkungan produksi. Kami menyarankan Anda menggunakan tabel partisi. Untuk informasi lebih lanjut, lihat CREATE PARTITION TABLE.

Gunakan sesuai kebutuhan.

Gunakan nilai default. Anda tidak perlu mengatur parameter ini.

Ya. Untuk informasi selengkapnya, lihat ALTER TABLE.

dictionary_encoding_columns

Properti ini menentukan kolom-kolom yang akan diaktifkan dictionary encoding-nya. Dictionary encoding memetakan nilai kolom ke kamus dan mengonversi perbandingan string menjadi perbandingan numerik, sehingga mempercepat operasi GROUP BY dan filter. Secara default, dictionary encoding diaktifkan untuk semua kolom TEXT pada tabel berorientasi kolom. Di Hologres V0.9 dan versi selanjutnya, dictionary encoding diterapkan secara otomatis berdasarkan karakteristik data.

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

time_to_live_in_seconds

Properti ini menentukan nilai time-to-live (TTL) data dalam tabel. Satuan: detik. Sintaksnya sebagai berikut:

  • TTL dihitung sejak data ditulis, bukan sejak data diperbarui. Jika Anda tidak mengatur properti ini, TTL default adalah 100 tahun. Di Hologres V1.3.24 dan versi selanjutnya, TTL minimum adalah satu hari (86.400 detik). Untuk informasi selengkapnya tentang penggunaan, lihat Referensi perintah SQL.

  • TTL tidak presisi. Data kedaluwarsa dihapus dalam rentang waktu tertentu, bukan pada titik waktu spesifik. Hal ini dapat menyebabkan masalah seperti duplikasi primary key atau hasil kueri yang tidak konsisten.

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

Contoh skenario

Contoh: Tabel partisi berdasarkan waktu data

Deskripsi skenario: Seiring pertumbuhan bisnis Anda, volume pesanan harian dapat mencapai puluhan hingga ratusan juta. Jika Anda menggunakan struktur tabel tunggal dari bagian Panduan cepat (dwd_trade_orders), beban sistem mungkin tinggi selama penghapusan data skala besar, seperti pembersihan data historis, atau selama kueri berdasarkan tanggal tertentu. Contoh ini menunjukkan cara meningkatkan tabel standar menjadi tabel partisi. Tabel partisi mewarisi semua definisi bidang dan pengaturan indeks dari tabel dasar tetapi menggunakan klausa PARTITION BY untuk mengisolasi data secara fisik berdasarkan hari. Hal ini memungkinkan Anda membersihkan partisi kedaluwarsa dalam hitungan detik menggunakan pernyataan DROP TABLE dan mengaktifkan partition pruning yang tepat selama kueri. Pendekatan ini direkomendasikan untuk mengelola data real-time skala ultra-besar di lingkungan produksi.

BEGIN;

-- Versi yang ditingkatkan: Buat tabel partisi induk
-- Struktur sepenuhnya mewarisi dari contoh panduan cepat, tetapi primary key harus mencakup 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,                               -- Kunci partisi
    order_time TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (order_id, dt)                      -- Primary key komposit: mencakup primary key bisnis dan kunci partisi
) 
PARTITION BY LIST (dt)                              -- Aktifkan partisi daftar
WITH (
    orientation = 'column',
    distribution_key = 'order_id',
    event_time_column = 'order_time',
    clustering_key = 'order_time:asc'
);

COMMIT;

-- 1. Buat tabel anak: Alokasikan ruang 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');

-- 2. Masukkan data: Logika aplikasi tetap sama seperti tabel dasar. Data secara otomatis diarahkan ke tabel anak 20231101
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');

-- 3. Partition pruning: Saat mengkueri dengan kondisi dt, sistem hanya memindai tabel anak yang relevan, menghindari full table scan
SELECT COUNT(*) FROM public.dwd_trade_orders_partitioned WHERE dt = '20231101';

-- 4. Pembersihan cepat: Untuk menghapus data kedaluwarsa, hapus langsung tabel anak untuk pemulihan ruang instan
-- DROP TABLE public.dwd_trade_orders_20231101; 

Contoh: Analitik real-time pada data besar (tabel fakta)

Deskripsi skenario: Jenis tabel ini digunakan untuk agregasi dasbor real-time. Tabel-tabel ini biasanya menyimpan data dalam jumlah besar. Persyaratan utamanya adalah mencapai agregasi statistik berkinerja tinggi, seperti menghitung Gross Merchandise Volume (GMV) atau volume pesanan.

BEGIN;

-- Secara eksplisit tentukan skema public
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',             -- Format penyimpanan: column store. Terbaik untuk analitik agregasi besar, menawarkan kompresi tinggi dan pemindaian kolom efisien
    distribution_key = 'order_id',      -- Distribution key: data di-shard berdasarkan order_id untuk memastikan distribusi merata; memungkinkan Local Join saat menggabungkan tabel pesanan lain
    event_time_column = 'order_time',   -- Segment key: biasanya diatur ke bidang waktu. Sistem membagi file berdasarkan bidang ini untuk mempercepat filter rentang waktu
    clustering_key = 'order_time:asc'   -- Clustering key: mengurutkan data secara fisik dalam urutan waktu ascending. Mengurangi I/O disk saat mengkueri data dari "jam terakhir" atau "hari tertentu"
);

-- Tambahkan komentar metadata untuk mendukung tata kelola data di masa depan
COMMENT ON TABLE public.dwd_order_summary IS 'Tabel fakta 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 value';
COMMENT ON COLUMN public.dwd_order_summary.order_time IS 'Waktu pesanan';

COMMIT;

Contoh: Pencarian titik dengan konkurensi tinggi berdasarkan kunci utama (tabel dimensi)

Deskripsi skenario: Jenis tabel ini digunakan untuk mengambil persona pengguna berdasarkan user_id dalam milidetik. Tabel-tabel ini dirancang untuk memberikan respons latensi ultra-rendah di bawah permintaan per detik (QPS) tinggi.

BEGIN;

-- Secara eksplisit tentukan skema public
CREATE TABLE IF NOT EXISTS public.dim_user_persona (
    user_id TEXT PRIMARY KEY,           -- Primary key: penting untuk skenario pencarian titik
    user_level INT,
    persona_jsonb JSONB 
) WITH (
    orientation = 'row'                 -- Format penyimpanan: row store. Dioptimalkan khusus untuk pencarian titik berdasarkan primary key (Point Lookup), dengan waktu respons milidetik
    -- Catatan: Tabel row store secara otomatis menggunakan primary key sebagai distribution key dan clustering key. Tidak diperlukan pengaturan tambahan.
);

-- Tambahkan komentar metadata
COMMENT ON TABLE public.dim_user_persona IS 'Tabel dimensi persona 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 campuran (penyimpanan hibrida)

Deskripsi skenario: Jenis tabel ini digunakan dalam sistem purna jual logistik. Sistem ini memerlukan agregasi analitik status logistik sekaligus pengambilan instan detail logistik berdasarkan ID pesanan.

BEGIN;

-- Secara eksplisit tentukan skema public
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',         -- Format penyimpanan: hibrida. Menggabungkan pencarian titik milidetik (row store) dan analitik agregasi efisien (column store)
    distribution_key = 'order_id',      -- Distribution key: menentukan logika distribusi data di seluruh shard
    bitmap_columns = 'shipping_status'  -- Bitmap index: diatur pada kolom kardinalitas rendah seperti bidang status untuk mempercepat kueri "filter status"
);

-- Tambahkan komentar metadata
COMMENT ON TABLE public.ads_shipping_info IS 'Tabel aplikasi 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: menunggu pengiriman, 2: dalam perjalanan, 3: terkirim)';
COMMENT ON COLUMN public.ads_shipping_info.receiver_address IS 'Alamat pengiriman';

COMMIT;

Batasan

Batasan primary key

  • Primary key komposit: Anda dapat menetapkan beberapa bidang sebagai primary key. Semua bidang harus not nullable dan harus didefinisikan 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;
  • Batasan tipe: Tipe data kompleks seperti Float, Double, Numeric, Array, JSON, dan Date tidak didukung.

  • Batasan modifikasi: Anda tidak dapat memodifikasi primary key. Untuk memodifikasi primary key, Anda harus membuat ulang tabel.

  • Ketergantungan penyimpanan: Tabel berorientasi baris dan tabel hibrida baris-kolom harus memiliki primary key. Tabel berorientasi kolom tidak memerlukan primary key.

Dukungan constraint

Parameter

column_constraints

table_constraints

primary key

Didukung

Dukungan

not null

Dukungan

-

null

Didukung

-

unique

Tidak didukung

Tidak didukung

check

Tidak didukung

Tidak didukung

default

Didukung

Tidak didukung

Batasan kata kunci, sensitivitas huruf besar/kecil, dan escaping

  • Aturan penamaan: Nama kolom tidak boleh diawali dengan hg_. Nama skema tidak boleh diawali dengan holo_, hg_, atau pg_.

  • Persyaratan escaping: Kata kunci, reserved words, bidang sistem (seperti ctid), nama yang case-sensitive, karakter khusus, dan nama yang diawali angka harus diapit tanda kutip ganda ("").

  • Perbaikan sintaks di V2.0:

    • Aktifkan sintaks lama:

      -- 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;
    • Contoh pengaturan properti untuk kolom yang di-escape:

      create table "TBL" (a int);
      select relname from pg_class where relname = 'TBL';
      insert into "TBL" values (-1977);
      select * from "TBL";
      ------------------------------------------------------------------
      -- Sintaks untuk mengatur properti tabel pada kolom yang di-escape mulai dari Hologres V2.0
      begin;
      create table tbl (c1 int not null);
      call set_table_property('tbl', 'clustering_key', '"c1":asc'); 
      commit;
      -- Sintaks untuk mengatur properti tabel pada kolom yang di-escape sebelum Hologres V2.0
      begin;
      create table tbl (c1 int not null);
      call set_table_property('tbl', 'clustering_key', '"c1:asc"'); 
      commit;
      ------------------------------------------------------------------
      -- Sintaks untuk mengatur properti multi-kolom (termasuk huruf besar) mulai dari Hologres V2.1
      begin;
      create table tbl ("C1" int not null, c2 text not null) with (clustering_key = '"C1",c2');
      commit;
      -- Sintaks untuk mengatur properti multi-kolom (termasuk huruf besar) mulai dari Hologres V2.0
      begin;
      create table tbl ("C1" int not null, c2 text not null);
      call set_table_property('tbl', 'clustering_key', '"C1",c2'); 
      commit;
      -- Sintaks untuk mengatur properti multi-kolom (termasuk huruf besar) sebelum Hologres V2.0
      begin;
      create table tbl ("C1" int not null, c2 text not null);
      call set_table_property('tbl', 'clustering_key', '"C1,c2"'); 
      commit;
      ------------------------------------------------------------------
      create table "Tab_$A%*" (a int);
      select relname from pg_class where relname = 'Tab_$A%*';
      insert into "Tab_$A%*" values (-1977);
      select * from "Tab_$A%*";
      ------------------------------------------------------------------
      create table tbl ("2c" int not null);
      insert into tbl values (3), (4);
      select "2c" from tbl;

Batasan logika pembuatan tabel

Konfigurasi

Tentukan IF NOT EXISTS

Jangan tentukan IF NOT EXISTS

Tabel dengan nama yang sama sudah ada

Menampilkan NOTICE, melewati operasi, dan mengembalikan status sukses.

Pesan ERROR dikembalikan.

Tabel dengan nama yang sama tidak ada

Pernyataan berhasil dieksekusi.

Respons sukses

Batasan modifikasi

  • Batasan panjang: Nama tabel tidak boleh melebihi 127 byte.

  • Item berikut tidak dapat dimodifikasi:

    • Anda tidak dapat mengubah tipe data.

    • Anda tidak dapat mengubah urutan kolom.

    • Anda tidak dapat mengubah constraint nullability. Misalnya, Anda tidak dapat mengalihkan antara not null dan nullable.

    • Properti tata letak penyimpanan: Setelah tabel dibuat, Anda tidak dapat mengubah properti orientation, distribution_key, clustering_key, atau event_time_column.

  • Modifikasi yang didukung: Anda dapat mengubah properti bitmap_columns dan dictionary_encoding_columns setelah tabel dibuat.