全部产品
Search
文档中心

Hologres:CREATE PARTITION TABLE

更新时间:Jun 26, 2025

Anda dapat menggunakan pernyataan CREATE PARTITION TABLE untuk membuat tabel terpartisi. Topik ini menjelaskan cara menggunakan pernyataan tersebut.

Deskripsi

Catatan

Kecuali dinyatakan lain, tabel induk yang disebutkan dalam topik ini mengacu pada tabel induk terpartisi, dan tabel anak mengacu pada tabel anak terpartisi.

Tabel induk dipartisi menjadi beberapa tabel anak berdasarkan nilai kunci partisi. Data di tabel anak tersedia secara publik. Sebelum menggunakan tabel terpartisi, Anda harus membuat tabel anak terlebih dahulu. Anda dapat menggunakan pernyataan CREATE PARTITION TABLE untuk membuat tabel terpartisi. Selain itu, Anda dapat mengaktifkan partisi dinamis agar tabel anak dibuat secara otomatis.

Tabel anak dari tabel terpartisi disimpan dalam file yang berbeda. Untuk menanyakan data dalam tabel terpartisi, Anda harus menentukan partisi. Dengan cara ini, sistem tidak perlu memindai semua partisi dalam tabel dan dapat dengan cepat menemukan file yang diinginkan, meningkatkan efisiensi. Umumnya, tabel fakta dibagi menjadi partisi berdasarkan tanggal. Tabel anak dari tabel terpartisi setara dengan tabel non-partisi dalam penyimpanan metadata. Oleh karena itu, sejumlah besar partisi dapat menyebabkan volume metadata meningkat serta menghasilkan banyak file kecil dan fragmen.

Jika sumber data Anda adalah database, kami sarankan untuk tidak menggunakan tabel terpartisi. Jika digunakan dalam skenario ini, partisi yang berlebihan dapat menyia-nyiakan sumber daya I/O. Untuk mengatasi masalah ini dan menerapkan percepatan kueri berbasis indeks, Anda dapat menentukan bidang partisi yang sering digunakan untuk membentuk kunci segmen.

Batasan

  • Hologres hanya mengizinkan impor data ke tabel anak, bukan tabel induk.

    Catatan

    Realtime Compute for Apache Flink memungkinkan Anda mengimpor data ke tabel induk di Hologres secara real-time. Untuk informasi lebih lanjut, lihat Tulis data ke tabel hasil terpartisi di Hologres secara real-time.

  • Setiap aturan partisi hanya dapat digunakan untuk membuat satu tabel terpartisi.

  • Klausa PARTITION BY hanya mendukung list partitioning. Kunci partisi harus berupa kolom tunggal.

  • Jika tabel terpartisi memiliki kunci utama, kunci partisi harus merupakan subset dari kunci utama.

Catatan Penggunaan

  • Jika jumlah catatan data dalam satu hari kurang dari 100 juta, kami sarankan untuk tidak menggunakan tanggal sebagai kondisi partisi atau membuat tabel terpartisi berdasarkan tanggal. Jika tidak, ukuran setiap partisi akan kecil dan kueri tidak akan dipercepat secara signifikan. Kami sarankan menentukan granularitas yang lebih kasar.

  • Jika Anda perlu sering mengganti data partisi dengan melakukan operasi TRUNCATE atau DROP, kami sarankan menggunakan tabel terpartisi. Dalam skenario ini, Anda dapat melakukan operasi TRUNCATE atau DROP secara lebih efisien tanpa perlu memindai sejumlah besar data.

Buat tabel terpartisi

Sintaksis

Gunakan pernyataan berikut untuk membuat tabel terpartisi:

-- Buat tabel induk.
CREATE TABLE [IF NOT EXISTS] [<schema_name>.]<table_name>  ([
  {
   <column_name> <column_type> [ <column_constraints>, [...]]
   | <table_constraints>
   [, ...]
  }
])
PARTITION BY LIST(<column_name>);

-- Buat tabel anak.
CREATE TABLE [IF NOT EXISTS] [<schema_name>.]<table_name> PARTITION OF <parent_table>
  FOR VALUES IN (<string_literal>);

Parameter

Tabel berikut menjelaskan parameter dalam sintaksis sebelumnya.

Parameter

Deskripsi

if not exists

Menentukan bahwa jika tabel dengan nama yang sama sudah ada, sistem tidak mengembalikan pesan kesalahan tetapi memberi tahu Anda bahwa tabel sudah ada.

schema_name

Nama skema tempat tabel berada. Jika Anda membuat tabel induk dan tabel anak dalam skema yang sama, Anda tidak perlu menentukan nama skema. Jika Anda membuat tabel induk dan tabel anak lintas skema, Anda harus menentukan nama skema.

table_name

Nama tabel induk atau tabel anak yang ingin Anda buat.

column_name

Nama kolom yang ingin Anda buat di tabel baru.

column_type

Tipe data kolom.

column_constraints

Nama batasan kolom.

table_constraints

Nama batasan tabel.

parent_table

Nama tabel induk dari tabel anak.

string_literal

Kunci partisi.

Kolom dengan tipe data TEXT, VARCHAR, dan INT dapat digunakan sebagai kolom kunci partisi. Di Hologres V1.3.22 dan versi selanjutnya, kolom dengan tipe data DATE juga dapat digunakan sebagai kolom kunci partisi.

Contoh

  • Contoh 1: Buat tabel induk tanpa kunci utama dan tabel anaknya di skema publik.

    • Sintaksis yang didukung di Hologres V2.1 dan versi selanjutnya:

      BEGIN;
      CREATE TABLE public.hologres_parent (
          a TEXT,
          b INT,
          c TIMESTAMP,
          d TEXT
      )
      PARTITION BY LIST (a) 
      WITH (orientation = 'column');
      CREATE TABLE public.hologres_child1 PARTITION OF public.hologres_parent FOR VALUES IN ('v1');
      CREATE TABLE public.hologres_child2 PARTITION OF public.hologres_parent FOR VALUES IN ('v2');
      CREATE TABLE public.hologres_child3 PARTITION OF public.hologres_parent FOR VALUES IN ('v3');
      COMMIT;
    • Sintaksis yang didukung di semua versi Hologres:

      BEGIN;
      CREATE TABLE public.hologres_parent(
        a TEXT, 
        b INT, 
        c TIMESTAMP, 
        d TEXT
      ) 
        PARTITION BY LIST(a);
      CALL set_table_property('public.hologres_parent', 'orientation', 'column');           
      CREATE TABLE public.hologres_child1 PARTITION OF public.hologres_parent FOR VALUES IN('v1');
      CREATE TABLE public.hologres_child2 PARTITION OF public.hologres_parent FOR VALUES IN('v2');
      CREATE TABLE public.hologres_child3 PARTITION OF public.hologres_parent FOR VALUES IN('v3');
      COMMIT;
  • Contoh 2: Buat tabel induk dengan kunci utama dan tabel anaknya di skema publik.

    Sintaksis yang didukung di Hologres V2.1 dan versi selanjutnya:

    BEGIN;
    CREATE TABLE public.hologres_parent_2 (
        a TEXT,
        b INT,
        c TIMESTAMP,
        d TEXT,
        ds TEXT,
        PRIMARY KEY (ds, b)
    )
    PARTITION BY LIST (ds) 
    WITH (orientation = 'column');
    CREATE TABLE public.holo_child_1 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201215');
    CREATE TABLE public.holo_child_2 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201216');
    CREATE TABLE public.holo_child_3 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201217');
    COMMIT;

    Sintaksis yang didukung di semua versi Hologres:

    BEGIN;
    CREATE TABLE public.hologres_parent_2(
      a TEXT , 
      b INT, 
      c TIMESTAMP, 
      d TEXT,
      ds TEXT,
      primary key(ds,b)
      )
      PARTITION BY LIST(ds);
    CALL set_table_property('public.hologres_parent_2', 'orientation', 'column');
    CREATE TABLE public.holo_child_1 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201215');
    CREATE TABLE public.holo_child_2 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201216');
    CREATE TABLE public.holo_child_3 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201217');
    COMMIT;

Kueri semua tabel anak

Anda dapat menanyakan semua tabel anak dari tabel induk menggunakan salah satu metode berikut:

  • Kueri semua tabel anak dari tabel induk secara visual menggunakan HoloWeb.

  • Kueri semua tabel anak dari tabel induk dengan menjalankan pernyataan SQL berikut. Dalam pernyataan SQL, ubah parent_table_name sesuai dengan kebutuhan bisnis Anda.

    SELECT
        nmsp_parent.nspname AS parent_schema,
        parent.relname      AS parent,
        nmsp_child.nspname  AS child_schema,
        child.relname       AS child
    FROM pg_inherits
        JOIN pg_class parent            ON pg_inherits.inhparent = parent.oid
        JOIN pg_class child             ON pg_inherits.inhrelid   = child.oid
        JOIN pg_namespace nmsp_parent   ON nmsp_parent.oid  = parent.relnamespace
        JOIN pg_namespace nmsp_child    ON nmsp_child.oid   = child.relnamespace
    WHERE parent.relname='parent_table_name'; 

Aturan pengaturan properti untuk tabel induk dan tabel anaknya

Tabel berikut menjelaskan aturan pengaturan properti yang berlaku ketika tabel anak dilampirkan ke tabel induk:

  • Harus konsisten dengan tabel induk: Properti tabel anak harus konsisten dengan tabel induk. Jika tidak, kesalahan akan dilaporkan saat tabel anak dilampirkan ke tabel induk. Dalam hal ini, kami sarankan membuat tabel anak menggunakan pernyataan CREATE TABLE LIKE.

  • Tidak perlu konsisten dengan tabel induk: Properti tabel anak dapat berbeda dari tabel induk. Jika properti tabel anak tidak ditentukan secara eksplisit, tabel anak mewarisi pengaturan properti yang sesuai dari tabel induk. Jika properti tabel anak ditentukan secara eksplisit, pengaturan properti tabel anak dipertahankan.

  • Harus mencakup kolom terindeks dari tabel induk: Kolom terindeks dari tabel anak harus mencakup kolom terindeks dari tabel induk. Kolom yang tidak ditentukan sebagai kolom terindeks untuk tabel induk dapat ditentukan secara eksplisit untuk tabel anak.

Kategori

Properti tabel

Deskripsi

Apakah tabel anak yang dibuat dengan menjalankan pernyataan CREATE TABLE PARTITION OF mewarisi pengaturan properti dari tabel induknya

Aturan yang berlaku ketika tabel anak dilampirkan ke tabel induk

Properti tabel

orientation

Format penyimpanan tabel.

Ya

Harus konsisten dengan tabel induk.

table_group

Grup tabel tempat tabel tersebut termasuk. Properti ini juga menentukan jumlah shard untuk grup tabel.

Ya

Harus konsisten dengan tabel induk.

time_to_live_in_seconds

Waktu hidup (TTL) data dalam tabel.

Ya

Tidak perlu konsisten dengan tabel induk.

  • Jika properti ini tidak ditentukan untuk tabel anak, tabel anak mewarisi pengaturan properti dari tabel induknya.

  • Jika properti ini ditentukan untuk tabel anak, pengaturan properti yang ditentukan dipertahankan.

Indeks

primary key

Kunci utama tabel.

Ya

Harus konsisten dengan tabel induk.

distribution_key

Kunci distribusi tabel.

Ya

Harus konsisten dengan tabel induk.

clustering_key

Kunci pengelompokan tabel.

Ya

Harus konsisten dengan tabel induk.

event_time_column

Kolom waktu acara tabel.

Ya

Harus konsisten dengan tabel induk.

bitmap_columns

Kolom pengkodean kamus tabel.

Ya

Tidak perlu konsisten dengan tabel induk.

dictionary_encoding_columns

Indeks bidang tabel.

Ya

Tidak perlu konsisten dengan tabel induk.

binlog_level

Menentukan apakah akan mengaktifkan binary logging.

Ya

Harus konsisten dengan tabel induk.

proxima_vectors

Indeks yang digunakan untuk melakukan pencarian vektor pada tabel.

Ya

Harus konsisten dengan tabel induk.

Batasan kolom

nullable

Batasan NOT NULL.

Ya

Harus konsisten dengan tabel induk.

nilai default

Nilai default.

Ya

Harus konsisten dengan tabel induk.

Referensi

  • Fitur partisi dinamis Hologres secara otomatis membuat dan mengelola tabel anak berdasarkan aturan partisi dinamis yang Anda konfigurasikan saat membuat tabel terpartisi. Anda tidak perlu mengonfigurasi semua partisi saat membuat tabel terpartisi. Untuk informasi lebih lanjut, lihat Partisi Dinamis.

  • Anda dapat menggunakan pernyataan ALTER PARTITION TABLE untuk memodifikasi partisi. Untuk informasi lebih lanjut, lihat ALTER PARTITION TABLE.

  • Anda dapat menggunakan pernyataan DROP PARTITION TABLE untuk menghapus tabel terpartisi. Untuk informasi lebih lanjut, lihat CREATE/DROP PARTITION TABLE.