全部产品
Search
文档中心

Hologres:CREATE TABLE

更新时间:Jul 06, 2025

Data disimpan dan diorganisir dalam tabel. Anda dapat meningkatkan efisiensi pemrosesan data dan kemampuan analitik data dengan mengonfigurasi indeks dan properti tabel saat membuat tabel. Topik ini menjelaskan sintaks dari pernyataan CREATE TABLE dan cara mengonfigurasi indeks saat membuat tabel di Hologres. Topik ini juga menjelaskan cara membuat tabel di konsol HoloWeb.

Sintaks pernyataan CREATE TABLE

  • Syntax

    Sintaks pernyataan CREATE TABLE di Hologres kompatibel dengan PostgreSQL.

    Catatan
    • Di semua versi Hologres, Anda dapat mengeksekusi beberapa pernyataan bahasa definisi data (DDL) dalam satu transaksi. Di Hologres V2.0 dan yang lebih baru, Anda dapat mengeksekusi beberapa pernyataan bahasa manipulasi data (DML) dalam satu transaksi.

    • Hologres V2.1 dan yang lebih baru mendukung sintaks create table with property untuk menyederhanakan konfigurasi properti tabel.

    Kami merekomendasikan agar Anda memprioritaskan penggunaan sintaks CREATE TABLE WITH. Sintaks ini secara signifikan meningkatkan kinerja pernyataan DDL dalam skenario tertentu, seperti skenario di mana pernyataan CREATE TABLE IF NOT EXISTS sering dieksekusi untuk membuat tabel dengan nama yang sama dengan tabel yang sudah ada dan mengonfigurasi properti tabel.

    • Sintaks yang didukung di Hologres V2.1 dan yang lebih baru:

      BEGIN;
      CREATE TABLE [ IF NOT EXISTS] [schema_name.] table_name ([
          { 
          column_name column_type [column_constraints, [...]]
          | table_constraints
          [,...]
          }
      ])
      [WITH (
          property = 'value',
          [, ...]
      )]
      ;
      COMMENT ON COLUMN < tablename.column > IS 'value';
      COMMENT ON TABLE < tablename > IS 'value';
      COMMIT;
    • Sintaks yang didukung di semua versi Hologres:

      begin;
      create table [if not exists] [schema_name.]table_name ([
        {
         column_name column_type [column_constraints, [...]]
         | table_constraints
         [, ...]
        }
      ]);
      
      call set_table_property('<table_name>', property, value);
      comment on column <tablename.column> is 'value';
      comment on table <tablename> is 'value';
      commit;
  • Parameter

    • column_type: tipe data kolom. Untuk informasi lebih lanjut tentang tipe data yang didukung oleh Hologres, lihat Tipe Data.

    • set_table_property atau create table with (didukung oleh Hologres V2.1 dan yang lebih baru): digunakan untuk mengonfigurasi properti tabel. Untuk informasi lebih lanjut, lihat Konfigurasikan Properti untuk Tabel dalam topik ini.

Pengenalan Indeks

Hologres kompatibel dengan ekosistem PostgreSQL. Sintaks yang digunakan untuk membuat tabel di Hologres sama dengan yang ada di PostgreSQL. Namun, indeks yang didukung oleh Hologres berbeda dari indeks yang didukung oleh PostgreSQL. Untuk informasi lebih lanjut tentang indeks yang didukung oleh Hologres, lihat Konfigurasikan Properti untuk Tabel. Jika Anda mengonfigurasi indeks yang sesuai saat membuat tabel, data yang ingin Anda query dapat dengan cepat ditemukan setelah pernyataan SQL dieksekusi. Ini mengurangi konsumsi sumber daya I/O dan mempercepat query dengan lebih sedikit sumber daya komputasi. Gambar berikut menunjukkan proses eksekusi dari mengeksekusi pernyataan SQL hingga mendapatkan data. Gambar berikut dapat membantu Anda memahami setiap indeks yang digunakan dalam proses eksekusi dan mengonfigurasi indeks yang sesuai berdasarkan kebutuhan bisnis Anda.建表索引总结

  1. Dalam contoh ini, Anda melakukan query SQL pada tabel terpartisi dan menemukan partisi tempat data yang diinginkan berada dengan menggunakan fitur pruning partisi.

  2. Anda dapat menggunakan kunci distribusi untuk menemukan shard tempat data yang diinginkan berada.

  3. Anda dapat menggunakan kolom waktu acara untuk menemukan file tempat data yang diinginkan berada. Kolom waktu acara sebelumnya disebut sebagai kunci segmen.

  4. Anda dapat menggunakan kunci kluster untuk mengurutkan data dalam file dan menemukan blok file tempat data yang diinginkan berada.

  5. Anda dapat menggunakan indeks bitmap untuk menemukan baris tempat data yang diinginkan berada. Indeks bitmap adalah indeks dalam file.

Tabel berikut menjelaskan skenario untuk berbagai indeks.

Indeks

Deskripsi

Contoh Pernyataan Query

Kunci Distribusi

Kolom tempat operasi GROUP BY sering dilakukan atau kolom yang digunakan untuk menggabungkan beberapa tabel ditentukan untuk membentuk kunci distribusi. Ini mengurangi pengacakan data dan menerapkan join lokal.

select * from tbl1 join tbl2 on tbl1.a=tbl2.c;

Kunci Kluster

Kolom query rentang atau kolom query filter ditentukan untuk membentuk kunci kluster. Pemfilteran data berbasis indeks mematuhi prinsip pencocokan paling kiri. Kami merekomendasikan agar Anda menentukan tidak lebih dari dua kolom untuk membentuk kunci kluster.

select sum(a) from tb1 where a > 100 and a < 200;

Bitmap

Kolom query ekuivalen ditentukan untuk membentuk indeks bitmap.

select * from tb1 where a =100;

Kolom Waktu Acara (Kunci Segmen)

Kolom yang berkorelasi kuat dengan waktu, seperti kolom log dan lalu lintas, ditentukan untuk membentuk kolom waktu acara.

select sum(a) from tb1 where ts > '2020-01-01' and a < '2020-03-02';

Konfigurasikan Properti untuk Tabel

Hologres menyediakan set_table_property dan create table with untuk Anda mengonfigurasi properti tabel. Pengaturan properti tabel yang tepat membantu Hologres mengurutkan dan menanyakan data secara efisien. Anda harus mengeksekusi parameter terkait tata letak penyimpanan data bersamaan dengan pernyataan CREATE TABLE.

  • Sintaks

    -- Sintaks yang didukung di Hologres V2.1 dan yang lebih baru:
    create table <table_name> (...)
    with (property = 'value'[, ...]);
    
    -- Sintaks yang didukung di semua versi Hologres:
    call set_table_property('<table_name>', property, 'value');
    Catatan

    Fungsi set_table_property dan pernyataan CREATE TABLE harus dieksekusi dalam transaksi yang sama.

    Hologres memungkinkan Anda mengeksekusi pernyataan SQL untuk mengonfigurasi properti tabel yang mencakup tetapi tidak terbatas pada properti berikut:

    • Sintaks yang didukung di Hologres V2.1 dan yang lebih baru:

      CREATE TABLE <table_name> (...)
      WITH (
          orientation = '[column | row | row,column]',
          table_group = '[tableGroupName]',
          distribution_key = 'columnName[,...]]',
          clustering_key = '[columnName{:asc}] [,...]]',
          event_time_column = '[columnName [,...]]',
          bitmap_columns = '[columnName [,...]]',
          dictionary_encoding_columns = '[columnName [,...]]',
          time_to_live_in_seconds = '<non_negative_literal>'
          [,storage_mode, ...]
      );
    • Sintaks yang didukung di semua versi Hologres:

      BEGIN;
      CREATE TABLE <table_name> (...);
      call set_table_property('table_name', 'orientation', '[column | row]');
      call set_table_property('table_name', 'table_group', '[tableGroupName]');
      call set_table_property('table_name', 'distribution_key', '[columnName[,...]]');
      call set_table_property('table_name', 'clustering_key', '[columnName{:asc}] [,...]]');
      call set_table_property('table_name', 'event_time_column', '[columnName [,...]]');
      call set_table_property('table_name', 'bitmap_columns', '[columnName [,...]]');
      call set_table_property('table_name', 'dictionary_encoding_columns', '[columnName [,...]]');
      call set_table_property('table_name', 'time_to_live_in_seconds', '<non_negative_literal>');
      COMMIT;
  • Properties

    Tabel berikut menjelaskan properti dan pengaturannya dalam berbagai jenis tabel.

    Properti

    Deskripsi

    Tabel Berorientasi Kolom

    Tabel Berorientasi Baris

    Tabel Hibrida Baris-Kolom

    Pengaturan yang Direkomendasikan

    Dapat Dimodifikasi Setelah Tabel Dibuat

    orientation

    Mode penyimpanan tabel.

    Nilai default: column.

    row

    row,column

    column

    Tidak. Jika Anda ingin memodifikasi properti ini, buat tabel lain.

    table_group

    Grup tabel tempat tabel tersebut termasuk.

    Secara default, grup tabel default digunakan.

    Secara default, grup tabel default digunakan.

    Secara default, grup tabel default digunakan.

    Gunakan nilai default.

    Tidak. Jika Anda ingin memodifikasi properti ini, buat tabel lain atau reshards tabel yang ada.

    distribution_key

    Kunci distribusi tabel.

    Secara default, kunci utama dikonfigurasi sebagai kunci distribusi. Anda dapat memodifikasi kunci distribusi berdasarkan kebutuhan bisnis Anda.

    Secara default, kunci utama dikonfigurasi sebagai kunci distribusi.

    Secara default, kunci utama dikonfigurasi sebagai kunci distribusi.

    Kami merekomendasikan agar Anda menentukan hanya salah satu kolom kunci utama sebagai kunci distribusi.

    Tidak. Jika Anda ingin memodifikasi properti ini, buat tabel lain.

    clustering_key

    Kunci kluster tabel.

    Secara default, properti ini kosong.

    Secara default, kunci utama digunakan sebagai kunci kluster.

    Secara default, properti ini kosong.

    Kami merekomendasikan agar Anda menentukan hanya satu kolom sebagai kunci kluster. Nilai dalam kolom tersebut hanya dapat diurutkan dalam urutan naik.

    Tidak. Jika Anda ingin memodifikasi properti ini, buat tabel lain.

    event_time_column

    Kolom waktu acara tabel.

    Secara default, kolom timestamp non-null pertama digunakan sebagai kolom waktu acara.

    Tidak didukung.

    Secara default, kolom timestamp non-null pertama digunakan sebagai kolom waktu acara.

    Kami merekomendasikan agar Anda menentukan kolom timestamp.

    Tidak. Jika Anda ingin memodifikasi properti ini, buat tabel lain.

    bitmap_columns

    Indeks bitmap tabel.

    Konfigurasikan properti ini berdasarkan kebutuhan bisnis Anda.

    Tidak didukung.

    Konfigurasikan properti ini berdasarkan kebutuhan bisnis Anda.

    Kami merekomendasikan agar Anda menentukan kurang dari 10 kolom yang digunakan untuk perbandingan ekuivalen.

    Ya. Untuk informasi lebih lanjut, lihat ALTER TABLE.

    dictionary_encoding_columns

    Pengkodean kamus pada kolom tabel.

    Konfigurasikan properti ini berdasarkan kebutuhan bisnis Anda.

    Tidak didukung.

    Konfigurasikan properti ini berdasarkan kebutuhan bisnis Anda.

    Kami merekomendasikan agar Anda menentukan kurang dari 10 kolom dengan kardinalitas rendah.

    Ya. Untuk informasi lebih lanjut, lihat ALTER TABLE.

    time_to_live_in_seconds

    Waktu hidup (TTL) tabel.

    Konfigurasikan properti ini berdasarkan kebutuhan bisnis Anda.

    Konfigurasikan properti ini berdasarkan kebutuhan bisnis Anda.

    Konfigurasikan properti ini berdasarkan kebutuhan bisnis Anda.

    Gunakan nilai default.

    Ya. Untuk informasi lebih lanjut, lihat ALTER TABLE.

    • orientation

      Properti ini menentukan apakah tabel database menggunakan mode penyimpanan berorientasi kolom atau berorientasi baris di Hologres. Hologres V1.1 dan yang lebih baru mendukung mode penyimpanan hibrida baris-kolom. Sintaks berikut digunakan saat Anda menentukan properti ini. Mode penyimpanan yang berbeda berlaku untuk skenario query yang berbeda. Saat membuat tabel, mode penyimpanan berorientasi kolom digunakan secara default. Jika Anda ingin menggunakan mode penyimpanan lain, tentukan secara eksplisit mode penyimpanan saat membuat tabel. Untuk informasi lebih lanjut, lihat Model Penyimpanan Tabel: Penyimpanan Berorientasi Baris, Penyimpanan Berorientasi Kolom, dan Penyimpanan Hibrida Baris-Kolom.

      call set_table_property('table_name', 'orientation', '[column | row |row,column]');
    • table_group

      Di Hologres, grup tabel adalah konsep unik dari penyimpanan logis dan digunakan untuk mengelola jumlah shard. Grup tabel sesuai dengan sekelompok shard. Jika Anda tidak membuat grup tabel saat membuat database, grup tabel default bernama dalam format <db>_tg_default akan dibuat secara otomatis saat Anda membuat tabel pertama di database. Jika tidak ada grup tabel yang ditentukan saat Anda membuat tabel lain, tabel-tabel tersebut akan dibuat secara otomatis di grup tabel default. Dalam banyak kasus, Anda tidak perlu menentukan grup tabel. Anda dapat menggunakan grup tabel default. Jika instance Hologres Anda memiliki lebih dari 256 core CPU, kami merekomendasikan agar Anda mengonfigurasi grup tabel yang berbeda dan menentukan jumlah shard untuk setiap grup tabel berdasarkan kebutuhan bisnis Anda. Ini meningkatkan kinerja. Untuk informasi lebih lanjut, lihat Panduan Pengguna Grup Tabel dan Jumlah Shard.

      call set_table_property('table_name', 'table_group', '[tableGroupName]');
    • distribution_key

      Properti ini menentukan kunci distribusi. Properti distribution_key digunakan untuk menentukan kebijakan distribusi data dalam tabel. Data didistribusikan ke setiap shard berdasarkan kunci distribusi. Setelah properti ini dikonfigurasi, entri dengan nilai kunci distribusi yang sama didistribusikan ke shard yang sama. Kunci distribusi penting untuk komputasi terdistribusi, dan dapat membantu meningkatkan kinerja query dan meningkatkan permintaan per detik (QPS). Untuk informasi lebih lanjut, lihat Kunci Distribusi.

      call set_table_property('table_name', 'distribution_key', '[columnName[,...]]');
    • clustering_key

      Properti ini menentukan kunci kluster. Anda dapat menggunakan sintaks berikut untuk mengonfigurasi kunci kluster. Hologres mengurutkan data dalam file berdasarkan kunci kluster. Secara default, data diurutkan dalam urutan naik. Kunci kluster dapat membantu mempercepat query rentang dan query filter pada kolom indeks serta meningkatkan kinerja query. Untuk informasi lebih lanjut, lihat Kunci Kluster.

      call set_table_property('table_name', 'clustering_key', '[columnName{:asc} [,...]]');
    • event_time_column

      Properti ini menentukan kolom waktu acara. Anda dapat menggunakan sintaks berikut untuk mengonfigurasi kolom waktu acara. File diurutkan berdasarkan kolom waktu acara. Saat kolom waktu acara tercapai, Hologres dapat dengan cepat menemukan file tempat data yang diperlukan berada. Kami merekomendasikan agar Anda menetapkan properti event_time_column ke kolom yang datanya meningkat atau menurun secara monotonik, seperti kolom timestamp. Properti event_time_column berlaku untuk kolom terkait waktu, seperti kolom log dan lalu lintas. Pengaturan yang tepat dari properti ini dapat meningkatkan kinerja query. Untuk informasi lebih lanjut, lihat Kolom Waktu Acara (Kunci Segmen).

      call set_table_property('table_name', 'event_time_column', '[columnName [,...]]');
    • bitmap_columns

      Properti ini menentukan indeks bitmap. Anda dapat menggunakan sintaks berikut untuk mengonfigurasi indeks bitmap. Indeks bitmap dapat digunakan untuk dengan cepat menemukan baris tempat data yang memenuhi kondisi berada. Anda dapat menentukan kolom yang memenuhi kondisi query ekuivalen sebagai kolom indeks bitmap. Secara default, semua kolom tipe TEXT dalam tabel berorientasi kolom secara implisit ditentukan sebagai kolom indeks bitmap. Untuk informasi lebih lanjut, lihat Indeks Bitmap.

      call set_table_property('table_name', 'bitmap_columns', '[columnName{:[on|off]}[,...]]');
    • dictionary_encoding_columns

      Properti ini menentukan kolom pengkodean kamus. Anda dapat menggunakan sintaks berikut untuk mengonfigurasi kolom pengkodean kamus. Pengkodean kamus menentukan apakah akan membangun pemetaan kamus untuk nilai kolom tertentu. Pemetaan kamus dapat digunakan untuk mengubah perbandingan string menjadi perbandingan numerik untuk mempercepat query, seperti query yang melibatkan operasi GROUP BY atau FILTER. Secara default, semua kolom tipe TEXT dalam tabel berorientasi kolom ditentukan sebagai kolom pengkodean kamus. Hologres V0.9 dan yang lebih baru secara otomatis menentukan apakah akan membangun pemetaan kamus berdasarkan karakteristik data.

      call set_table_property('table_name', 'dictionary_encoding_columns', '[columnName{:[on|off|auto]}[,...]]');
    • time_to_live_in_seconds (Tidak Direkomendasikan)

      Properti ini menentukan TTL data dalam tabel. Unit: detik. Anda dapat menggunakan sintaks berikut untuk mengonfigurasi TTL.

      • Sistem menghitung awal TTL dari waktu ketika data pertama kali ditulis ke tabel, bukan waktu ketika data diperbarui. Jika Anda tidak mengonfigurasi TTL, data dalam tabel disimpan selama 100 tahun secara default. Di Hologres V1.3.24 dan yang lebih baru, TTL minimum dapat diatur menjadi satu hari, yang setara dengan 86.400 detik. Untuk informasi lebih lanjut tentang TTL, lihat Daftar Pernyataan SQL.

      • TTL tidak menentukan waktu yang akurat. Jika TTL kedaluwarsa, data dalam tabel dihapus dalam periode waktu tertentu, bukan pada titik waktu tertentu. Data dihapus, tetapi tabel tempat data tersebut berada masih ada. Oleh karena itu, kunci utama duplikat mungkin muncul. Kami merekomendasikan agar Anda tidak menggunakan TTL untuk mengelola siklus hidup data dalam lingkungan produksi. Kami merekomendasikan agar Anda mengelola siklus hidup data berdasarkan partisi. Untuk informasi lebih lanjut, lihat BUAT TABEL PARTISI.

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

Batasan

  • Anda dapat menentukan beberapa kolom untuk membentuk kunci utama. Nilai kolom atau beberapa kolom yang digunakan untuk membentuk kunci utama harus unik dan tidak boleh null. Anda dapat menentukan beberapa kolom untuk membentuk kunci utama tabel hanya dalam satu pernyataan. Kolom dengan tipe data berikut tidak dapat ditentukan untuk membentuk kunci utama: FLOAT, DOUBLE, NUMERIC, ARRAY, JSON, DATE, dan tipe data kompleks lainnya. Kolom kunci utama harus tidak nullable. Anda tidak dapat memodifikasi kunci utama. Untuk memodifikasi kunci utama, buat tabel lain. Contoh kode berikut menunjukkan cara menentukan kolom id dan ds untuk membentuk kunci utama tabel:

    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;
  • Tabel berikut menjelaskan parameter yang dapat dikonfigurasikan sebagai properti column_constraints atau table_constraints.

    Parameter

    column_constraints

    table_constraints

    kunci utama

    Didukung

    Didukung

    not null

    Didukung

    -

    null

    Didukung

    -

    unique

    Tidak didukung

    Tidak didukung

    check

    Tidak didukung

    Tidak didukung

    default

    Didukung

    Tidak didukung

  • Kata kunci, parameter cadangan, parameter sistem, karakter khusus, serta huruf besar dan kecil harus diapit dalam tanda kutip ganda (") untuk escaping.

    • Hologres memberlakukan batasan berikut pada kata kunci: Nama kolom tidak boleh dimulai dengan hg_, dan nama skema tidak boleh dimulai dengan holo_, hg_, atau pg_. Anda juga harus mematuhi spesifikasi yang diberlakukan oleh PostgreSQL pada kata kunci, parameter cadangan, dan parameter sistem. Untuk informasi lebih lanjut, lihat SQL Key Words dan System Columns. Jika Anda menggunakan kata kunci PostgreSQL sebagai nama kolom, Anda harus mengapit kata kunci dalam tanda kutip ganda (") untuk escaping.

    • Nama tabel dan nama kolom tidak peka huruf besar-kecil. Untuk mendefinisikan nama tabel atau nama kolom yang dalam huruf besar, mengandung karakter khusus, atau dimulai dengan digit, Anda dapat mengapit nama tersebut dalam tanda kutip ganda (") untuk escaping.

    • Jika bidang kustom memiliki nama yang sama dengan bidang sistem, seperti ctid, pesan kesalahan mungkin dilaporkan.

    • Hologres V2.0 dan yang lebih baru meningkatkan sintaks untuk mengonfigurasi properti untuk tabel yang nama kolomnya perlu di-escape. Jika Anda ingin mengonfigurasi properti tabel untuk kolom yang namanya perlu di-escape, Anda perlu menggunakan sintaks baru. Jika Anda masih ingin menggunakan sintaks asli, Anda perlu mengaktifkan sintaks asli dengan menggunakan parameter Grand Unified Configuration (GUC).

      -- Aktifkan sintaks asli di tingkat sesi.
      set hg_disable_parse_holo_property = on;
      
      -- Aktifkan sintaks asli di tingkat database.
      alter database <db_name> set hg_disable_parse_holo_property = on;

      Pernyataan berikut memberikan contoh.

      Catatan

      Saat Anda menanyakan kolom yang namanya dimulai dengan digit, Anda juga harus mengapit nama tersebut dalam tanda kutip ganda (") untuk meng-escape nama tersebut. Jika tidak, nama kolom gagal diparsing.

      create table "TBL" (a int);
      select relname from pg_class where relname = 'TBL';
      insert into "TBL" values (-1977);
      select * from "TBL";
      ------------------------------------------------------------------
      -- Sintaks yang digunakan untuk mengonfigurasi properti untuk kolom yang namanya perlu di-escape untuk Hologres V2.0 dan yang lebih baru
      begin;
      create table tbl (c1 int not null);
      call set_table_property('tbl', 'clustering_key', '"c1":asc'); 
      commit;
      -- Sintaks yang digunakan untuk mengonfigurasi properti untuk kolom yang namanya perlu di-escape untuk versi sebelum Hologres V2.0
      begin;
      create table tbl (c1 int not null);
      call set_table_property('tbl', 'clustering_key', '"c1:asc"'); 
      commit;
      ------------------------------------------------------------------
      -- Sintaks yang digunakan untuk mengonfigurasi properti untuk beberapa kolom yang namanya mengandung huruf besar untuk Hologres V2.1 dan yang lebih baru
      begin;
      create table tbl ("C1" int not null, c2 text not null) with (clustering_key = '"C1",c2');
      commit;
      -- Sintaks yang digunakan untuk mengonfigurasi properti untuk beberapa kolom yang namanya mengandung huruf besar untuk Hologres V2.0 dan yang 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 yang digunakan untuk mengonfigurasi properti untuk beberapa kolom yang namanya mengandung huruf besar untuk versi 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;
  • Saat membuat tabel, jika tidak ada tabel dengan nama yang sama dan semantik benar, tabel dapat dibuat dengan sukses. Jika parameter IF NOT EXISTS tidak ditentukan dan tabel dengan nama yang sama ada, kesalahan akan dikembalikan. Jika parameter IF NOT EXISTS ditentukan dan tabel dengan nama yang sama ada, Hologres menampilkan pemberitahuan, melewati langkah-langkah untuk membuat tabel, dan mengembalikan SUCCEED. Tabel berikut menjelaskan aturan tersebut.

    Skenario

    Respon saat IF NOT EXISTS ditentukan

    Respon saat IF NOT EXISTS tidak ditentukan

    Tabel dengan nama yang sama ada.

    NOTICE: relation “xx“already exists, skippingSUCCEED

    ERROR: relation is already exists.

    Tidak ada tabel dengan nama yang sama.

    SUCCEED

    SUCCEED

  • Nama tabel tidak boleh melebihi 127 byte panjangnya. Jika tidak, nama tabel akan dipotong.

  • Anda tidak dapat memodifikasi tipe data tabel setelah tabel dibuat. Jika Anda perlu memodifikasi tipe data, buat tabel lain.

  • Anda harus menentukan kunci utama untuk tabel berorientasi baris atau tabel hibrida baris-kolom. Kunci utama bersifat opsional untuk tabel berorientasi kolom.

  • Anda tidak dapat mengubah urutan kolom setelah tabel dibuat. Jika Anda perlu mengubah urutan kolom, buat tabel lain.

  • Anda tidak dapat memodifikasi properti orientation, distribution_key, clustering_key, atau event_time_column setelah tabel dibuat. Ini karena properti-properti ini menentukan tata letak penyimpanan data setelah data ditulis. Jika Anda ingin memodifikasi properti-properti ini, buat tabel lain. Properti bitmap_columns dan dictionary_encoding_columns dapat dimodifikasi setelah tabel dibuat. Properti-properti ini tidak memengaruhi tata letak penyimpanan data.

  • Anda tidak dapat mengubah kolom not null dalam tabel yang ada menjadi kolom nullable dan tidak dapat mengubah kolom nullable menjadi kolom not null. Jika Anda ingin mengubah kolom-kolom ini, buat tabel lain.

Query Skema Tabel

Anda dapat mengeksekusi pernyataan berikut untuk menanyakan skema tabel:

create extension hg_toolkit; -- Pernyataan ini berlaku di tingkat database. Anda perlu mengeksekusi pernyataan ini di database hanya sekali.
select hg_dump_script('[<schema_name>.]<table_name>');
Catatan
  • Anda juga dapat pergi ke tab Manajemen Metadata di konsol HoloWeb untuk menanyakan skema tabel menggunakan pernyataan DDL.

  • Di Hologres V2.2 dan yang lebih baru, properti tabel yang dikembalikan oleh hg_dump_script ditampilkan dalam sintaks WITH alih-alih sintaks CALL. Ini membantu meningkatkan kenyamanan dan kejelasan pernyataan CREATE TABLE.

Contoh

  • Buat tabel berorientasi kolom dan konfigurasikan kunci utama.

    Catatan

    Kunci distribusi harus merupakan subset dari kolom yang membentuk kunci utama.

    begin;
    CREATE TABLE tbl (
     "id" bigint NOT NULL,
     "name" text NOT NULL,
     "age" bigint,
     "class" text NOT NULL,
     "reg_timestamp" timestamptz NOT NULL,
    PRIMARY KEY (id,age)
    );
    call set_table_property('tbl', 'orientation', 'column');
    call set_table_property('tbl', 'distribution_key', 'id');
    call set_table_property('tbl', 'clustering_key', 'age');
    call set_table_property('tbl', 'event_time_column', 'reg_timestamp');
    call set_table_property('tbl', 'bitmap_columns', 'name,class');
    call set_table_property('tbl', 'dictionary_encoding_columns', 'class:auto');
    commit;
  • Buat tabel terpartisi dan konfigurasikan kunci utama.

    Catatan

    Jika Anda mengonfigurasi kunci utama untuk tabel terpartisi, Anda harus menyertakan kolom kunci partisi dalam kunci utama.

    begin;
    CREATE TABLE www (
     name text NOT NULL,
     ds text NOT NULL,
     age text NOT NULL,
    PRIMARY KEY (name,ds)
    )
    PARTITION BY LIST(ds);
    CALL SET_TABLE_PROPERTY('www', 'orientation', 'column');
    commit;

    Anda perlu membuat tabel anak untuk tabel terpartisi. Untuk informasi lebih lanjut tentang cara membuat tabel anak, lihat BUAT TABEL PARTISI.

  • Buat tabel dan tentukan nilai default untuk kolom.

    begin;
    CREATE TABLE tbl_default (    
      smallint_col smallint DEFAULT 0,    
      int_col int DEFAULT 0,    
      bigint_col bigint DEFAULT 0,    
      boolean_col boolean DEFAULT FALSE,    
      float_col real DEFAULT 0.0,    
      double_col double precision DEFAULT 0.0,    
      decimal_col decimal(2, 1) DEFAULT 0.0,    
      text_col text DEFAULT 'N',    
      char_col char(2) DEFAULT 'N',    
      varchar_col varchar(200) DEFAULT 'N',    
      timestamptz_col timestamptz DEFAULT now(),    
      date_col date DEFAULT now(),    
      timestamp_col timestamp DEFAULT now()
    );
    commit;

Buat Tabel Internal di Konsol HoloWeb

Anda dapat menggunakan HoloWeb untuk membuat tabel internal secara visual, tanpa perlu menulis pernyataan SQL. Untuk membuat tabel internal di konsol HoloWeb, lakukan langkah-langkah berikut:

  1. Masuk ke HoloWeb console. Untuk informasi lebih lanjut, lihat Hubungkan ke HoloWeb.

  2. Di bilah navigasi atas HoloWeb console, klik Metadata Management. Lalu, klik Tables.

    Anda juga dapat mengklik Instances Connected di panel navigasi sisi kiri Metadata Management. Klik instans yang diinginkan dan pilih database yang ingin Anda kelola. Klik kanan skema yang ingin Anda kelola dan pilih Create Internal Table.

  3. Di halaman Create Internal Table, konfigurasikan parameter sesuai kebutuhan bisnis Anda. Tabel berikut menjelaskan parameter tersebut.

    Deskripsi Parameter (tampilkan lebih banyak)

    Bagian

    Parameter

    Deskripsi

    Informasi Dasar

    Mode

    Nama skema.

    Anda dapat memilih skema default bernama public atau skema kustom.

    Nama Tabel

    Nama tabel internal Hologres yang ingin Anda buat.

    Deskripsi

    Deskripsi tabel internal Hologres yang ingin Anda buat.

    Bidang

    Nama Bidang

    Nama setiap kolom dalam tabel internal.

    Tipe Data

    Tipe data setiap kolom.

    Kunci Utama

    Menentukan apakah akan mengonfigurasi kolom sebagai kunci utama untuk tabel internal.

    Nullable

    Menentukan apakah kolom dapat bernilai null.

    Array

    Menentukan apakah kolom adalah array elemen yang terurut.

    Deskripsi

    Deskripsi kolom.

    Aksi

    Operasi yang dapat Anda lakukan pada kolom. Anda dapat delete kolom, memindahkan kolom up, atau memindahkan kolom down.

    Atribut

    Mode Penyimpanan

    Mode penyimpanan tabel. Nilai valid: Column-oriented storage, Row-oriented storage, dan Row-column Storage.

    Nilai default: Column-oriented storage.

    Siklus Hidup Data

    TTL data dalam tabel. Sistem menghitung awal TTL dari waktu ketika data pertama kali ditulis ke tabel. Jika TTL kedaluwarsa, data tabel dihapus dalam periode waktu tertentu, bukan pada titik waktu tertentu.

    Nilai default: Maximum.

    Binlog

    Menentukan apakah akan mengaktifkan pencatatan biner untuk tabel. Untuk informasi lebih lanjut, lihat Berlangganan Log Biner Hologres.

    Siklus Hidup Log Biner

    TTL log biner. Untuk informasi lebih lanjut, lihat Berlangganan Log Biner Hologres. Nilai default: Maximum.

    Kolom Distribusi

    Kunci distribusi tabel. Untuk informasi lebih lanjut, lihat Kunci Distribusi.

    Kolom Waktu Acara

    Kolom waktu acara tabel. Untuk informasi lebih lanjut, lihat Kolom Waktu Acara (Kunci Segmen).

    Kunci Kluster

    Kunci kluster tabel. Untuk informasi lebih lanjut, lihat Kunci Kluster.

    Kolom Pengkodean Kamus

    Kolom pengkodean kamus tabel. Untuk informasi lebih lanjut, lihat Pengkodean Kamus.

    Kolom Bitmap

    Kolom bitmap tabel. Untuk informasi lebih lanjut, lihat Indeks Bitmap.

    Tabel Terpartisi

    Tidak tersedia

    Pilih kolom kunci partisi tabel internal.

  4. Di sudut kanan atas, klik Submit. Setelah Anda mengklik Kirim, Anda dapat menyegarkan daftar instans di sisi kiri. Tabel internal yang dibuat ditampilkan di bawah skema yang Anda pilih.

Operasi lainnya:

  • Edit tabel internal

    1. Pergi ke halaman Metadata Management dan klik dua kali tabel internal yang ingin Anda edit di Instances Connected.

    2. Di tab informasi tabel, klik Edit Table untuk memodifikasi properti tabel, seperti menambahkan kolom dan mengubah TTL data dalam tabel.

    3. Klik Submit.

  • Hapus tabel internal

    1. Pergi ke halaman Metadata Management, klik kanan tabel internal yang ingin Anda hapus di Instances Connected, lalu pilih Delete Table.删除内部表

    2. Di pesan Delete table, klik OK.

  • Lihat data dalam tabel

    1. Di Instances Connected, klik dua kali tabel internal yang datanya ingin Anda lihat.

    2. Di tab informasi tabel, klik Data preview untuk melihat pratinjau data dalam tabel.数据预览

  • Lihat pernyataan DDL

    Di tab detail tabel, klik DDL statement untuk melihat pernyataan DDL tabel.DDL语句

Apa Selanjutnya

Setelah Anda membuat tabel, Anda dapat mengimpor data ke tabel dengan mengeksekusi pernyataan INSERT, menyinkronkan data, atau memigrasi data. Untuk informasi lebih lanjut, lihat INSERT, Gambaran Umum, dan Migrasi Data.

Referensi

  • Untuk informasi lebih lanjut tentang cara membuat tabel dengan menyalin struktur dan data tabel yang ada, lihat CREATE TABLE AS. Untuk informasi lebih lanjut tentang cara membuat tabel dengan menyalin skema dan properti tabel yang ada, lihat CREATE TABLE LIKE.

  • Untuk informasi lebih lanjut tentang cara membuat tabel terpartisi, lihat BUAT TABEL PARTISI.

  • Untuk informasi lebih lanjut tentang cara membuat tabel asing, lihat BUAT TABEL ASING.

  • Untuk informasi lebih lanjut tentang cara memodifikasi properti tabel, lihat ALTER TABLE.

  • Untuk informasi lebih lanjut tentang kesalahan umum yang dilaporkan selama eksekusi pernyataan SQL di Hologres dan solusinya, lihat FAQ tentang Pernyataan SQL Hologres.