All Products
Search
Document Center

Hologres:Hologres: Manajemen Partisi Dinamis

Last Updated:Aug 22, 2026

Fitur partisi otomatis Hologres mengotomatiskan pembuatan dan pengelolaan partisi berdasarkan aturan yang Anda definisikan untuk tabel partisi, sehingga menghilangkan kebutuhan konfigurasi di muka. Fitur ini juga memindahkan data yang memenuhi syarat ke cold storage, mengurangi biaya penyimpanan tanpa memengaruhi kinerja kueri.

Ikhtisar

Fitur partisi otomatis telah berkembang melalui beberapa versi Hologres:

  • Hologres V1.3: Memperkenalkan partisi otomatis, yang menjalankan tugas terjadwal secara berkala untuk membuat dan menghapus partisi sebelumnya berdasarkan aturan yang ditentukan pengguna.

  • Hologres V1.3.37: Menambahkan dukungan untuk tiered storage, yang secara otomatis mengarsipkan data ke cold storage guna mengurangi biaya penyimpanan. Untuk informasi selengkapnya, lihat Tiered Storage.

  • Mulai dari Hologres V2.1.11, partisi dinamis mendukung tipe Date sebagai kunci partisi.

  • Hologres V2.2: Menambahkan properti schd_start_time ke konfigurasi partisi otomatis, yang memungkinkan Anda menyesuaikan jadwal pembuatan, penghapusan, dan pengarsipan partisi.

  • Hologres V3.0.12: Menambahkan parameter auto_partitioning_time_format untuk menentukan format tanggal dan waktu kunci partisi, sehingga Anda dapat membuat partisi dalam format YYYY-MM-DD.

Catatan

  • Data harus ditulis ke tabel anak, bukan langsung ke tabel induk.

    Realtime Compute for Apache Flink dapat menulis data ke tabel induk secara real time. Untuk detailnya, lihat Write data to a partitioned Hologres sink table in real time.
  • Hologres hanya mendukung list partitioning (PARTITION BY LIST).

  • Kolom kunci partisi harus berupa satu kolom tunggal.

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

  • Jika tabel induk memiliki primary key, kolom kunci partisi harus merupakan bagian dari primary key tersebut.

  • Untuk partisi dinamis, waktu jadwal (schd_start_time) hanya berlaku untuk tabel induk, bukan untuk tabel anaknya.

  • Parameter auto_partitioning_time_format bersifat immutable. Anda dapat menentukannya dalam pernyataan CREATE TABLE untuk tabel baru, tetapi tidak dapat mengubahnya untuk tabel yang sudah ada.

  • Nama tabel anak mengikuti format tanggal yang ditentukan oleh parameter auto_partitioning_time_format. Saat mengkueri tabel anak, Anda harus membungkus namanya dengan tanda kutip ganda. Contoh: SELECT xxx FROM "tbl_2024_11_22".

Konfigurasikan partisi otomatis

Sintaksis

Anda dapat mengatur properti partisi otomatis saat membuat tabel partisi atau untuk tabel yang sudah ada.

Menggunakan klausa WITH

  • Konfigurasikan properti partisi otomatis saat membuat tabel partisi.

    -- Konfigurasikan properti partisi otomatis saat membuat tabel partisi.
    CREATE TABLE [IF NOT EXISTS] [<schema_name>.]<table_name>  ([
      {
       <column_name> <column_type> [ <column_constraints>, [...]]
       | <table_constraints>
       [, ...]
      }
    ])
    PARTITION BY LIST(<column_name>)
    WITH (
       auto_partitioning_enable = 'xxx',
       auto_partitioning_time_unit = 'xxx',
       auto_partitioning_time_zone = 'xxx',
       auto_partitioning_num_precreate = 'xxx',
       auto_partitioning_num_retention = 'xxx',
       auto_partitioning_num_hot='xxx',
       -- Catatan: Properti auto_partitioning_schd_start_time didukung di Hologres V2.2 dan versi lebih baru.
       auto_partitioning_schd_start_time = 'xxx',
       -- Catatan: Properti auto_partitioning_time_format didukung di Hologres V3.0.12 dan versi lebih baru.
       auto_partitioning_time_format = 'xxx'
    );
  • Ubah properti partisi otomatis untuk tabel partisi yang sudah ada.

    -- Ubah properti partisi otomatis.
    ALTER TABLE [<schema_name>.]<table_name> SET (
       auto_partitioning_enable = 'xxx',
       auto_partitioning_time_unit = 'xxx',
       auto_partitioning_time_zone = 'xxx',
       auto_partitioning_num_precreate = 'xxx',
       auto_partitioning_num_retention = 'xxx',
       auto_partitioning_num_hot='xxx',
       -- Catatan: Properti auto_partitioning_schd_start_time didukung di Hologres V2.2 dan versi lebih baru.
       auto_partitioning_schd_start_time = 'xxx',
       -- Catatan: Properti auto_partitioning_time_format didukung di Hologres V3.0.12 dan versi lebih baru.
       auto_partitioning_time_format = 'xxx'
    );
    

Menggunakan perintah CALL

  • Konfigurasikan properti partisi otomatis saat membuat tabel partisi.

    -- Konfigurasikan properti partisi otomatis saat membuat tabel partisi.
    BEGIN;
    CREATE TABLE [IF NOT EXISTS] [<schema_name>.]<table_name>  ([
      {
       <column_name> <column_type> [ <column_constraints>, [...]]
       | <table_constraints>
       [, ...]
      }
    ])
    PARTITION BY LIST(<column_name>);
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.enable', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.time_unit', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.time_zone', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_precreate', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_retention', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_hot', 'xxx');
    -- Catatan: Properti auto_partitioning.schd_start_time didukung di Hologres V2.2 dan versi lebih baru.
    CALL set_table_property ('[<schema_name>.]<table_name>', 'auto_partitioning.schd_start_time', 'xxx');
    -- Catatan: Properti auto_partitioning.time_format didukung di Hologres V3.0.12 dan versi lebih baru.
    CALL set_table_property ('[<schema_name>.]<table_name>', 'auto_partitioning.time_format', 'xxx');
    COMMIT;
  • Ubah properti partisi otomatis untuk tabel partisi yang sudah ada.

    -- Ubah properti partisi otomatis.
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.enable', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_precreate', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_retention', 'xxx');
    -- Catatan: Properti auto_partitioning.time_format didukung di Hologres V3.0.12 dan versi lebih baru.
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.time_format', 'xxx');

Parameter

Penting

Saat menggunakan sintaksis CREATE TABLE WITH untuk mengonfigurasi partisi otomatis, Anda harus mengganti titik (.) dalam nama properti dengan garis bawah (_). Misalnya, ubah auto_partitioning.enable menjadi auto_partitioning_enable.

Parameter

Wajib

Deskripsi

Dapat Diperbarui

Persyaratan versi

auto_partitioning_enable/auto_partitioning.enable

Tidak

Mengontrol apakah partisi otomatis diaktifkan. Nilai yang valid:

  • true: Mengaktifkan partisi otomatis.

  • false (default): Menonaktifkan partisi otomatis.

Ya

Hologres V1.3 dan versi lebih baru

auto_partitioning_time_unit/auto_partitioning.time_unit

Ya

Menentukan satuan waktu untuk partisi. Nilai yang valid:

  • HOUR

  • DAY

  • MONTH

  • QUARTER

  • YEAR

Contohnya, jika Anda mengatur properti ini ke DAY, partisi akan dibuat dan dihapus setiap hari.

Tidak

auto_partitioning_time_zone/auto_partitioning.time_zone

Tidak

Menentukan zona waktu untuk partisi. Default-nya adalah zona waktu session saat ini. Setelah Anda mengonfigurasi properti ini, partisi dikelola berdasarkan zona waktu yang ditentukan.

Anda dapat menjalankan pernyataan SQL berikut untuk melihat zona waktu yang tersedia. Kolom name dalam hasilnya, seperti Asia/Shanghai, menunjukkan nilai zona waktu yang valid.

SELECT * FROM pg_timezone_names;

Tidak

auto_partitioning_num_precreate/auto_partitioning.num_precreate

Tidak

Menentukan jumlah partisi yang akan dibuat sebelumnya. Nilai yang valid:

  • 0: Tidak membuat partisi sebelumnya.

  • Bilangan bulat dari 1 hingga 512: Membuat sejumlah partisi masa depan, dimulai dari satuan waktu saat ini. Kami merekomendasikan nilai 2 atau lebih besar. Default: 4.

Catatan

Contohnya, jika tanggal saat ini adalah 2022-01-10 dan Anda mengatur time_unit = DAY, num_precreate = 3, Hologres membuat partisi untuk 2022-01-10, 2022-01-11, dan 2022-01-12.

Penting

Pembuatan partisi sebelumnya memengaruhi perilaku fungsi MAX_PT. Sebelum menggunakan properti ini, pastikan dampaknya terhadap aplikasi apa pun yang bergantung pada fungsi MAX_PT.

Ya

auto_partitioning_num_retention/auto_partitioning.num_retention

Tidak

Menentukan jumlah partisi historis yang dipertahankan. Nilai yang valid:

  • 0: Tidak mempertahankan partisi historis.

  • -1 (default): Mempertahankan semua partisi historis.

  • Bilangan bulat positif: Mempertahankan N partisi historis. Nilai maksimum adalah 512.

Anda dapat menjalankan set hg_experimental_auto_part_max_maintained_partitions=<value>; untuk menyesuaikan jumlah maksimum partisi yang dipertahankan hingga 8.760.

Catatan

Contohnya, jika tanggal saat ini adalah 2022-01-10, time_unit = DAY, num_retention = 3, Hologres mempertahankan partisi untuk 2022-01-09, 2022-01-08, dan 2022-01-07. Partisi yang dibuat sebelum 2022-01-07 akan dihapus.

Ya

auto_partitioning_num_hot/auto_partitioning.num_hot

Tidak

Menentukan jumlah partisi hot yang dipertahankan. Partisi hot adalah partisi yang berada di hot storage. Nilai yang valid:

  • 0: Tidak mempertahankan partisi hot.

  • -1 (default): Mempertahankan semua partisi hot.

  • Bilangan bulat positif: Mempertahankan N partisi hot. Nilai maksimum adalah 512.

Ya

Hologres V1.3.37 dan versi lebih baru

auto_partitioning_schd_start_time/auto_partitioning.schd_start_time

Tidak

Menentukan waktu khusus untuk menjalankan tugas partisi. Secara default, tugas ini berjalan di awal jam jika auto_partitioning.time_unit diatur ke HOUR, dan pukul 00:00:01 untuk semua satuan waktu lainnya.

Anda dapat menggunakan properti ini untuk mengubah waktu jadwal. Untuk informasi tentang format yang didukung, lihat Time Formats. Jika Anda menetapkan waktu di masa depan, jadwal akan berlaku pada waktu tersebut.

Ya

Hologres V2.2 dan versi lebih baru

auto_partitioning_time_format/auto_partitioning.time_format

Tidak

Menentukan format string nilai kunci partisi.

  • Format default: YYYYMMDDHH24 (HOUR), YYYYMMDD (DAY), YYYYMM (MONTH), YYYYQ (QUARTER), dan YYYY (YEAR).

  • Format opsional: YYYY-MM-DD-HH24 (HOUR), YYYY-MM-DD (DAY), YYYY-MM (MONTH), dan YYYY-Q (QUARTER).

Tidak

Hologres V3.0.12 dan versi lebih baru

Aturan penamaan tabel anak

Saat Anda mengatur properti auto_partitioning.time_unit ke HOUR, DAY, MONTH, QUARTER, atau YEAR, Hologres memberi nama tabel anak baru dengan menambahkan akhiran waktu ke nama tabel induk. Formatnya adalah {parent_table}_{time_suffix}. Akhiran waktu dihasilkan berdasarkan jadwal partisi otomatis dan templat format untuk satuan waktu yang ditentukan. Tabel berikut menjelaskan pemetaannya.

Satuan waktu

Format akhiran waktu

Contoh akhiran

Waktu penjadwalan

HOUR

YYYYMMDDHH24

2024112221

Di awal setiap jam. Contoh: 21:00:01 pada 22 November 2024.

YYYY-MM-DD-HH24

2024-11-22-21

DAY

YYYYMMDD

20241122

Pukul 00:00:01 setiap hari. Contoh: 00:00:01 pada 22 November 2024.

YYYY-MM-DD

2024-11-22

MONTH

YYYYMM

202411

Pukul 00:00:01 pada hari pertama setiap bulan. Contoh: 00:00:01 pada 1 November 2024.

YYYY-MM

2024-11

QUARTER

YYYYQ

20241, 20242, 20243, dan 20244 mewakili empat kuartal tahun 2024.

Pukul 00:00:01 pada hari pertama setiap kuartal. Contoh: 00:00:01 pada 1 Januari 2024.

YYYY-Q

2024-1, 2024-2, 2024-3, dan 2024-4 mewakili empat kuartal tahun 2024.

YEAR

YYYY

2023 dan 2024 mewakili partisi untuk tahun 2023 dan 2024.

Pukul 00:00:01 pada hari pertama setiap tahun. Contoh: 00:00:01 pada 1 Januari 2023.

Contoh

Contoh berikut membuat tabel yang dipartisi berdasarkan hari. Tabel dikonfigurasi untuk membuat partisi tiga hari ke depan, mempertahankan partisi historis dua hari, dan menggunakan zona waktu Asia/Shanghai.

Menggunakan klausa WITH

  1. Buat tabel partisi tbl1.

    -- Buat tabel partisi dan konfigurasikan partisi otomatis.
    CREATE TABLE tbl1 (
        c1 TEXT NOT NULL,
        c2 TEXT 
    )
    PARTITION BY LIST (c2)
    WITH (
       auto_partitioning_enable = 'true',
       auto_partitioning_time_unit = 'DAY',
       auto_partitioning_time_zone = 'Asia/Shanghai',
       auto_partitioning_num_precreate = '3',
       auto_partitioning_num_retention = '2'
    );
    
  2. Masukkan data.

    INSERT INTO tbl1 (c1, c2) VALUES ('Data 1', '20231212');
    INSERT INTO tbl1 (c1, c2) VALUES ('Data 2', '20231213');
    INSERT INTO tbl1 (c1, c2) VALUES ('Data 3', '20231214');
  3. Kueri data.

    SELECT * FROM tbl1 WHERE c2='20231212';

    Hasil berikut dikembalikan:

    c1	     c2
    Data 1   20231212

Menggunakan perintah CALL

  1. Buat tabel partisi tbl1.

    -- Buat tabel partisi dan konfigurasikan partisi otomatis.
    BEGIN;
    CREATE TABLE tbl1 (
        c1 TEXT NOT NULL,
        c2 TEXT 
    )
    PARTITION BY LIST (c2);
    CALL set_table_property ('tbl1', 'auto_partitioning.enable', 'true');
    CALL set_table_property ('tbl1', 'auto_partitioning.time_unit', 'DAY');
    CALL set_table_property ('tbl1', 'auto_partitioning.time_zone', 'Asia/Shanghai');
    CALL set_table_property ('tbl1', 'auto_partitioning.num_precreate', '3');
    CALL set_table_property ('tbl1', 'auto_partitioning.num_retention', '2');
    COMMIT;
  2. Masukkan data.

    INSERT INTO tbl1 (c1, c2) VALUES ('Data 1', '20231212');
    INSERT INTO tbl1 (c1, c2) VALUES ('Data 2', '20231213');
    INSERT INTO tbl1 (c1, c2) VALUES ('Data 3', '20231214');
  3. Kueri data.

    SELECT * FROM tbl1 WHERE c2='20231212';

    Hasil berikut dikembalikan:

    c1	     c2
    Data 1   20231212

Tabel berikut menjelaskan logika pembuatan dan penghapusan partisi.

Waktu

Peristiwa

Hasil

2023-12-12 09:00:00

Jalankan pernyataan SQL sebelumnya untuk membuat tabel partisi.

  • Tabel induk dibuat: tbl1

  • Tabel anak dibuat: tbl1_20231212, tbl1_20231213, tbl1_20231214

2023-12-13 00:00:00

Sistem secara otomatis membuat tabel anak.

  • Tabel anak dibuat: tbl1_20231215

2023-12-14 00:00:00

Sistem secara otomatis membuat tabel anak.

  • Tabel anak dibuat: tbl1_20231216

2023-12-15 00:00:00

Sistem secara otomatis membuat tabel anak dan menghapus yang lama.

  • Tabel anak dibuat: tbl1_20231217

  • Tabel anak dihapus: tbl1_20231212

2023-12-16 00:00:00

Sistem secara otomatis membuat tabel anak dan menghapus yang lama.

  • Tabel anak dibuat: tbl1_20231218

  • Tabel anak dihapus: tbl1_20231213

Kasus penggunaan

Mempertahankan tabel anak tertentu

Secara default, Hologres secara otomatis membuat dan menghapus tabel anak berdasarkan aturan partisi otomatis yang dikonfigurasi, menghapus yang berada di luar rentang retensi. Namun, dalam beberapa skenario, Anda mungkin perlu mempertahankan data penting, seperti mempertahankan data dari festival belanja tahunan untuk analisis year-over-year dalam bisnis e-commerce. Untuk mempertahankan tabel anak tertentu, atur properti keep_alive untuk tabel tersebut. Sintaksisnya sebagai berikut.

  • Sintaksis untuk Hologres V2.1 dan versi lebih baru:

    -- Pertahankan tabel anak.
    ALTER TABLE [<schema_name>.]<table_name> SET (keep_alive = 'true');
    -- Hentikan mempertahankan tabel anak. Setelah Anda menghapus properti ini, partisi otomatis segera memicu pembersihan data yang kedaluwarsa.
    ALTER TABLE [<schema_name>.]<table_name> SET (keep_alive = 'false');
    
  • Sintaksis untuk semua versi:

    -- Pertahankan tabel anak.
    CALL set_table_property('[<schema_name>.]<table_name>', 'keep_alive', 'true');
    -- Hentikan mempertahankan tabel anak. Setelah Anda menghapus properti ini, partisi otomatis segera memicu pembersihan data yang kedaluwarsa.
    CALL set_table_property('[<schema_name>.]<table_name>', 'keep_alive', 'false');
    Catatan

    Ganti table_name dengan nama tabel anak.

Mengelola tier penyimpanan untuk tabel partisi

Saat mengelola tabel partisi, tiering penyimpanan membantu Anda menyeimbangkan biaya dan kinerja. Misalnya, Anda dapat menyimpan N partisi historis terbaru di hot storage untuk kueri yang sering, lalu menyimpan M partisi lama berikutnya di cold storage untuk mengurangi biaya. Dikombinasikan dengan partisi otomatis, fitur ini memungkinkan Anda menentukan kebijakan untuk secara otomatis menghapus data di luar periode retensi N+M.

Buat tabel partisi otomatis

Contoh berikut membuat tabel partisi yang dipartisi berdasarkan hari. Kebijakan ini mempertahankan 7 hari terakhir partisi di hot storage dan 23 hari sebelumnya di cold storage. Partisi yang lebih tua dari 30 hari dihapus secara otomatis.

BEGIN;
CREATE TABLE tbl2(	
  c1 text not null, 
  c2 text
)
PARTITION BY LIST(c2);
CALL set_table_property('tbl2', 'auto_partitioning.enable', 'true');
CALL set_table_property('tbl2', 'auto_partitioning.time_unit', 'DAY');
CALL set_table_property('tbl2', 'auto_partitioning.num_precreate', '3');
CALL set_table_property('tbl2', 'auto_partitioning.num_hot', '7');
CALL set_table_property('tbl2', 'auto_partitioning.num_retention', '30');
COMMIT;

Hasilnya ditunjukkan pada gambar berikut.

Hasil

Ubah kebijakan tiering penyimpanan

Anda dapat mengubah kebijakan partisi hot storage dengan mengubah nilai parameter auto_partitioning.num_hot. Perhatikan bahwa jika Anda mengubah kebijakan ini, Hologres tidak secara otomatis memindahkan tabel anak yang sudah berada di cold storage kembali ke hot storage. Asumsikan tanggal saat ini adalah 1 Juli 2022, dan Anda membuat tabel partisi berikut.

BEGIN;
CREATE TABLE tbl_p(
  c1 text not null,
  c2 text
)
PARTITION BY LIST(c2);
CALL set_table_property('tbl_p', 'auto_partitioning.enable', 'true');
CALL set_table_property('tbl_p', 'auto_partitioning.time_unit', 'DAY');
CALL set_table_property('tbl_p', 'auto_partitioning.num_precreate', '3');
CALL set_table_property('tbl_p', 'auto_partitioning.num_hot', '3');
CALL set_table_property('tbl_p', 'auto_partitioning.num_retention', '10');
COMMIT;

Hal ini dapat menghasilkan dua skenario berikut untuk distribusi data:

  • Skenario 1: Tingkatkan jumlah partisi hot

    Untuk mengubah kebijakan partisi hot agar mempertahankan empat partisi, jalankan kode berikut:

    CALL set_table_property('tbl_p', 'auto_partitioning.num_hot', '4');

    Karena tabel anak yang sudah berada di cold storage tidak secara otomatis dipindahkan ke hot storage, efek perubahan tersebut ditunjukkan pada gambar berikut.example

  • Skenario 2: Kurangi jumlah partisi hot

    Jika Anda perlu mengubah kebijakan partisi hot agar mempertahankan dua partisi, jalankan kode berikut:

    CALL set_table_property('tbl_p', 'auto_partitioning.num_hot', '2');

    Tabel anak di cold storage tidak secara otomatis dipindahkan ke hot storage. Namun, Hologres memindahkan data yang kini memenuhi syarat untuk cold storage ke tier cold storage. Efek perubahan tersebut ditunjukkan pada gambar berikut.example

Konversi tabel cold menjadi tabel partisi otomatis

Untuk mengonversi tabel partisi dari cold storage menjadi tabel partisi otomatis dan memindahkan partisi tujuh hari terakhir ke hot storage, ikuti langkah-langkah berikut.

  1. Siapkan data.

    -- Tentukan tier cold storage saat membuat tabel.
    BEGIN;
    CREATE TABLE tbl2(	
      c1 TEXT NOT NULL, 
      c2 TEXT 
    )
    PARTITION BY LIST(c2);
    CALL set_table_property('tbl2', 'storage_mode', 'cold');
    CREATE TABLE tbl2_20230808 PARTITION OF tbl2 FOR VALUES IN('20230808');
    CREATE TABLE tbl2_20230809 PARTITION OF tbl2 FOR VALUES IN('20230809');
    CREATE TABLE tbl2_20230810 PARTITION OF tbl2 FOR VALUES IN('20230810');
    CREATE TABLE tbl2_20230817 PARTITION OF tbl2 FOR VALUES IN('20230817');
    COMMIT;
  2. Konversi tabel menjadi tabel partisi otomatis dan atur partisi tujuh hari terakhir ke hot storage.

    BEGIN;
    CALL set_table_property('tbl2', 'storage_mode', 'hot'); -- Atur tabel induk ke hot storage.
    CALL set_table_property('tbl2_20230810', 'storage_mode', 'cold'); -- Atur tabel anak yang tidak perlu dipindahkan ke hot storage ke cold storage.
    CALL set_table_property('tbl2_20230809', 'storage_mode', 'cold');
    CALL set_table_property('tbl2_20230808', 'storage_mode', 'cold');
    CALL set_table_property('tbl2', 'auto_partitioning.enable', 'true');
    CALL set_table_property('tbl2', 'auto_partitioning.time_unit', 'DAY');
    CALL set_table_property('tbl2', 'auto_partitioning.num_precreate', '3');
    CALL set_table_property('tbl2', 'auto_partitioning.num_hot', '7');
    CALL set_table_property('tbl2', 'auto_partitioning.num_retention', '10');
    COMMIT;

Lihat konfigurasi dan jadwal partisi otomatis

Untuk mengkueri informasi dan konfigurasi tabel partisi otomatis di database saat ini, jalankan pernyataan SQL berikut.

SELECT
    nsp_name AS schema_name,
    tbl_name AS table_name,
    ENABLE,
    time_unit,
    time_zone,
    num_precreate,
    num_retention,
    b.usename AS create_user,
    cret_time,
    schd_start_time,
    options
FROM
    hologres.hg_partitioning_config AS a
    LEFT JOIN pg_user AS b ON a.cret_user = b.usesysid;

Tabel berikut menjelaskan field dalam hasil kueri.

Parameter

Deskripsi

schema_name

Nama skema tabel.

table_name

Nama tabel.

ENABLE

Menentukan apakah partisi otomatis diaktifkan.

time_unit

Satuan waktu untuk partisi otomatis.

time_zone

Zona waktu untuk partisi otomatis.

num_precreate

Jumlah partisi yang dibuat sebelumnya.

num_retention

Jumlah partisi historis yang dipertahankan.

create_user

Pengguna yang membuat konfigurasi.

cret_time

Waktu saat konfigurasi dibuat.

schd_start_time

Waktu terbaru saat tugas partisi dijadwalkan untuk dijalankan.

Blok kode berikut menunjukkan contoh hasil kueri.

 schema_name |       table_name       | enable | time_unit | time_zone | num_precreate | num_retention |   create_user    |          cret_time          |     schd_start_time      | options
-------------+------------------------+--------+-----------+-----------+---------------+---------------+------------------+-----------------------------+--------------------------+---------
 public      | test_auto_part_daily      | t      | day       | PRC       |             4 |            -1 | 1534141793071340 | 2022-04-01 11:45:33+08 | 2050-01-01 00:00:00+08 | {}
 public      | test_auto_part_hourly     | t      | hour      | PRC       |             4 |            -1 | 1534141793071340 | 2022-04-01 11:44:39+08 | 2050-01-03 18:00:00+08 | {}
 public      | test_auto_part_weekly     | t      | week      | PRC       |             2 |             3 | 1534141793071340 | 2022-04-01 11:45:43+08 | 2050-01-03 00:00:00+08 | {}
 public      | test_auto_part_monthly    | t      | month     | PRC       |             1 |             0 | 1534141793071340 | 2022-04-01 11:45:55+08 | 2050-01-01 00:00:00+08 | {}
 public      | test_auto_part_quarterly  | t      | quarter   | PRC       |             2 |            -1 | 1534141793071340 | 2022-04-01 11:46:09+08 | 2050-01-01 00:00:00+08 | {}
 public      | test_auto_part_yearly     | t      | year      | PRC       |             1 |            -1 | 1534141793071340 | 2022-04-01 11:46:18+08 | 2050-01-01 00:00:00+08 | {}
(6 rows)

Lihat log tabel anak

Query Log tidak mencatat log untuk pembuatan atau purge tabel anak. Anda dapat menjalankan pernyataan SQL berikut untuk mengkueri log tersebut.

SELECT                           
    relname,
    relowner,
    schdtime,
    trigtime,
    status,
    message,
    precreate,
    discard
FROM
    hologres.hg_partitioning_log 

Tabel berikut menjelaskan field dalam hasil kueri.

Parameter

Deskripsi

relname

Skema dan nama tabel dalam format schema.table.

relowner

Pemilik tabel partisi.

schdtime

Waktu terjadwal.

trigtime

Waktu pemicu aktual.

status

Status.

message

Detail eksekusi atau pesan error.

precreate

Nama tabel anak yang dibuat.

discard

Nama tabel anak yang dipurge.

Blok kode berikut menunjukkan contoh hasil kueri.

   relname   |     relowner     |        schdtime        |        trigtime        | status  | message |          precreate           |     discard
-----------+------------------+------------------------+------------------------+---------+---------+------------------------------+------------------
 public.tbl1 | 1534141793071340 | 2022-04-01 11:00:00+08 | 2022-04-01 11:24:22+08 | SUCCESS |         | {tbl1_2022032713,tbl1_2022032714} | {}
 public.tbl2 | 1534141793071340 | 2022-04-01 12:00:00+08 | 2022-04-01 12:38:31+08 | SUCCESS |         | {tbl2_2022040112}                 | {}
 public.tbl2 | 1534141793071340 | 2022-04-01 13:00:00+08 | 2022-04-01 13:00:00+08 | SUCCESS |         | {tbl2_2022040113}                 | {}
 public.tbl2 | 1534141793071340 | 2022-04-01 14:00:00+08 | 2022-04-01 14:00:00+08 | SUCCESS |         | {tbl2_2022040114}                 | {tbl2_2022040112}
(4 rows)

FAQ

Aktifkan partisi otomatis untuk tabel yang sudah ada

Untuk mengaktifkan partisi otomatis pada tabel partisi yang sudah ada, jalankan salah satu pernyataan SQL berikut.

-- Contoh untuk Hologres V2.1 dan versi lebih baru
ALTER TABLE auto_part_old SET (
   auto_partitioning_enable = 'true',
   auto_partitioning_time_unit = 'HOUR',
   auto_partitioning_time_zone = 'PRC',
   auto_partitioning_num_precreate = '4',
   auto_partitioning_num_retention = '-1',
   auto_partitioning_num_hot = '-1'
);
-- Contoh untuk semua versi Hologres
BEGIN;
CALL set_table_property('auto_part_old', 'auto_partitioning.enable', 'true');
CALL set_table_property('auto_part_old', 'auto_partitioning.time_unit', 'HOUR');
CALL set_table_property('auto_part_old', 'auto_partitioning.time_zone', 'PRC');
CALL set_table_property('auto_part_old', 'auto_partitioning.num_precreate', '4');
CALL set_table_property('auto_part_old', 'auto_partitioning.num_retention', '-1');
CALL set_table_property('auto_part_old', 'auto_partitioning.num_hot', '-1');
COMMIT;
Penting

Properti auto_partitioning.time_unit dan auto_partitioning.time_zone adalah pengaturan inti untuk partisi otomatis. Setelah ditetapkan, properti ini tidak dapat diubah.

Pembersihan otomatis untuk tabel anak yang sudah ada

Sistem menentukan apakah tabel anak akan dihapus berdasarkan namanya. Jika nama tabel anak sesuai dengan konvensi penamaan {parent_table}_{time_suffix}, maka tabel tersebut memenuhi syarat untuk pembersihan. Jika tidak, tabel tersebut tidak terpengaruh.

Pembuatan tertunda tabel anak num_precreate

Saat pertama kali mengaktifkan partisi otomatis untuk tabel, tugas pembuatan tidak berjalan secara instan. Sistem memeriksa partisi yang perlu dibuat setiap 10 menit secara default. Akibatnya, sistem membuat tabel anak Anda dalam jendela 10 menit ini.