全部产品
Search
文档中心

Hologres:Manajemen partisi dinamis

更新时间:Feb 03, 2026

Fitur partisi dinamis di Hologres secara otomatis membuat dan mengelola partisi anak berdasarkan aturan yang dikonfigurasi saat pembuatan tabel, tanpa perlu mendefinisikan semua partisi terlebih dahulu. Fitur ini juga mendukung migrasi data yang memenuhi syarat ke penyimpanan dingin untuk menjaga kinerja kueri sekaligus mengurangi biaya penyimpanan.

Pengenalan Fungsi

Daftar berikut menjelaskan dukungan fitur pada berbagai versi Hologres:

  • Mulai dari Hologres V1.3, Anda dapat mengonfigurasi aturan partisi dinamis. Sistem secara berkala menjalankan task penjadwalan berdasarkan aturan tersebut untuk membuat partisi anak yang akan datang dan menghapus partisi yang kedaluwarsa.

  • Mulai dari Hologres V1.3.37, manajemen dinamis penyimpanan bertingkat untuk data panas dan dingin didukung. Fitur ini secara otomatis memindahkan data ke cold storage untuk mengurangi biaya penyimpanan. Untuk informasi selengkapnya, lihat Tiered storage.

  • Pada Hologres versi 2.1.11 dan seterusnya, partisi dinamis mendukung tipe Date sebagai kunci partisi.

  • Mulai dari Hologres V2.2, Anda dapat menggunakan properti schd_start_time dalam tabel konfigurasi partisi dinamis untuk menyesuaikan waktu penjadwalan partisi. Hal ini memungkinkan Anda menetapkan waktu khusus untuk membuat, menghapus, dan memindahkan partisi ke cold storage.

  • Mulai dari Hologres V3.0.12, parameter baru auto_partitioning_time_format tersedia. Gunakan parameter ini untuk menentukan format tanggal dan waktu kunci partisi. Misalnya, Anda dapat menentukan bahwa partisi dibuat dalam format YYYY-MM-DD.

Tindakan Pencegahan

  • Hologres memungkinkan Anda mengimpor data ke tabel anak, bukan ke tabel induk.

    Catatan

    Realtime Compute for Apache Flink memungkinkan Anda mengimpor data ke tabel induk di Hologres secara real time. Untuk informasi selengkapnya, lihat Write data to a partitioned Hologres sink table in real time.

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

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

  • Jika tabel partisi memiliki primary key, kunci partisi harus merupakan subset dari primary key tersebut.

  • Fitur partisi dinamis hanya mendukung pengaturan waktu penjadwalan (schd_start_time) untuk tabel induk. Anda tidak dapat mengaturnya untuk partisi anak.

  • Parameter auto_partitioning_time_format hanya dapat diatur sekali dan tidak dapat diubah setelah ditetapkan. Untuk tabel baru, atur parameter ini menggunakan pernyataan CREATE TABLE. Anda tidak dapat mengubah parameter ini untuk tabel yang sudah ada.

  • Setelah Anda menentukan format waktu menggunakan parameter auto_partitioning_time_format, format penamaan partisi anak akan sesuai dengan format tanggal kunci partisi. Saat Anda melakukan kueri terhadap partisi anak, Anda harus membungkus nama tabel anak dengan tanda kutip ganda. Contohnya: SELECT xxx FROM "tbl_2024_11_22".

Konfigurasi partisi dinamis

Deskripsi sintaksis

Anda dapat mengonfigurasi properti manajemen partisi dinamis saat membuat tabel partisi atau mengubahnya setelah tabel dibuat. Sintaksisnya adalah sebagai berikut.

Contoh menggunakan klausa WITH

  • Konfigurasi properti manajemen partisi dinamis saat membuat tabel partisi.

    -- Konfigurasi properti manajemen partisi dinamis 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: Parameter schd_start_time didukung di Hologres V2.2 dan versi selanjutnya.
       auto_partitioning_schd_start_time = 'xxx',
       -- Catatan: Parameter time_format didukung di Hologres V3.0.12 dan versi selanjutnya.
       auto_partitioning_time_format = 'xxx'
    );
  • Ubah properti manajemen partisi dinamis setelah membuat tabel partisi.

    -- Ubah properti manajemen partisi dinamis.
    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: Parameter schd_start_time didukung di Hologres V2.2 dan versi selanjutnya.
       auto_partitioning_schd_start_time = 'xxx',
       -- Catatan: Parameter time_format didukung di Hologres V3.0.12 dan versi selanjutnya.
       auto_partitioning_time_format = 'xxx'
    );
    

Contoh menggunakan pernyataan CALL

  • Konfigurasi properti manajemen partisi dinamis saat membuat tabel partisi.

    -- Konfigurasi properti manajemen partisi dinamis 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: Parameter schd_start_time didukung di Hologres V2.2 dan versi selanjutnya.
    CALL set_table_property ('[<schema_name>.]<table_name>', 'auto_partitioning.schd_start_time', 'xxx');
    -- Catatan: Parameter time_format didukung di Hologres V3.0.12 dan versi selanjutnya.
    CALL set_table_property ('[<schema_name>.]<table_name>', 'auto_partitioning.time_format', 'xxx');
    COMMIT;
  • Ubah properti manajemen partisi dinamis setelah membuat tabel partisi.

    -- Ubah properti manajemen partisi dinamis.
    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: Parameter time_format didukung di Hologres V3.0.12 dan versi selanjutnya.
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.time_format', 'xxx');

Deskripsi parameter

Penting

Saat Anda menggunakan sintaksis CREATE TABLE WITH untuk mengonfigurasi partisi dinamis, ganti titik (.) dalam nama parameter dengan garis bawah (_). Misalnya, ubah auto_partitioning.enable menjadi auto_partitioning_enable.

Nama parameter

Wajib

Deskripsi

Dapat diperbarui

Persyaratan versi

auto_partitioning_enable/auto_partitioning.enable

Tidak

Menentukan apakah manajemen partisi dinamis diaktifkan. Nilai yang valid:

  • true: Mengaktifkan manajemen partisi dinamis.

  • false (default): Menonaktifkan manajemen partisi dinamis.

Ya

Hologres V1.3 dan versi selanjutnya

auto_partitioning_time_unit/auto_partitioning.time_unit

Ya

Unit waktu untuk partisi dinamis. Nilai yang valid:

  • HOUR

  • DAY

  • MONTH

  • QUARTER

  • YEAR

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

Tidak

auto_partitioning_time_zone/auto_partitioning.time_zone

Tidak

Zona waktu untuk partisi dinamis. Nilai default adalah zona waktu koneksi saat ini. Setelah Anda mengonfigurasi parameter ini, manajemen partisi dinamis dilakukan berdasarkan waktu di zona waktu yang ditentukan.

Anda dapat menjalankan pernyataan SQL berikut untuk melihat zona waktu yang tersedia beserta offset-nya. Nilai pada kolom name pada hasilnya adalah nilai timezone, seperti Asia/Shanghai.

SELECT * FROM pg_timezone_names;

Tidak

auto_partitioning_num_precreate/auto_partitioning.num_precreate

Tidak

Jumlah partisi yang akan dibuat sebelumnya. Nilai yang valid:

  • 0: Tidak membuat sebelumnya.

  • [1, 512]: Membuat partisi berdasarkan waktu saat ini. Kami menyarankan agar Anda mengatur nilai ini ke 2 atau lebih besar. Nilai default adalah 4.

Catatan

Contohnya, jika waktu saat ini adalah 2022-01-10, pengaturan parameter time_unit = DAY, num_precreate = 3 akan membuat tiga partisi: 2022-01-10, 2022-01-11, dan 2022-01-12.

Penting

Pembuatan partisi sebelumnya memengaruhi perilaku fungsi MAX_PT. Sebelum mengonfigurasi parameter ini, periksa apakah workload Anda bergantung pada fungsi MAX_PT.

Ya

auto_partitioning_num_retention/auto_partitioning.num_retention

Tidak

Jumlah partisi historis yang dipertahankan. Nilai yang valid:

  • 0: Tidak menyimpan partisi historis.

  • -1 (default): Tidak menghapus partisi historis.

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

Anda dapat menjalankan set hg_experimental_auto_part_max_maintained_partitions=<value>; untuk menyesuaikan jumlah partisi yang disimpan. Nilai maksimum adalah 8760.

Catatan

Contohnya, jika tanggal saat ini adalah 2022-01-10, dan Anda mengatur <time_unit = DAY, num_retention = 3>, sistem akan menyimpan tiga partisi untuk tanggal 2022-01-09, 2022-01-08, dan 2022-01-07. Partisi historis sebelum 2022-01-07 akan dihapus.

Ya

auto_partitioning_num_hot/auto_partitioning.num_hot

Tidak

Jumlah partisi panas yang dipertahankan. Nilai yang valid:

  • 0: Tidak menyimpan partisi panas.

  • -1 (default): Tidak menghapus partisi panas.

  • Bilangan bulat positif: Menyimpan N partisi panas. Nilai maksimum adalah 512.

Hologres V1.3.37 dan versi selanjutnya

auto_partitioning_schd_start_time/auto_partitioning.schd_start_time

Tidak

Waktu penjadwalan partisi khusus. Jika auto_partitioning.time_unit diatur ke HOUR, partisi dijadwalkan secara default di awal setiap jam. Untuk nilai lainnya, waktu default adalah 00:00:01 hari tersebut.

Anda dapat menggunakan parameter ini untuk mengubah waktu penjadwalan. Untuk format tanggal dan waktu yang didukung, lihat Date/Time Types. Jika Anda mengatur waktu di masa depan, konfigurasi akan berlaku pada waktu tersebut.

Hologres V2.2 dan versi selanjutnya

auto_partitioning_time_format/auto_partitioning.time_format

Tidak

Menentukan format tanggal dan waktu kunci partisi saat membuat tabel.

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

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

Tidak

Hologres V3.0.12 dan versi selanjutnya

Aturan pembuatan nama tabel

Saat parameter auto_partitioning.time_unit diatur ke HOUR, DAY, MONTH, QUARTER, atau YEAR, partisi dinamis menggunakan nama tabel induk ditambah akhiran waktu sebagai nama untuk partisi yang baru dibuat. Formatnya adalah {parent_table}_{time_suffix}. Akhiran waktu dihasilkan berdasarkan waktu penjadwalan untuk partisi otomatis dan templat format yang sesuai dengan unit waktu. Pemetaan spesifiknya adalah sebagai berikut.

Unit waktu

Format akhiran waktu

Contoh

Waktu eksekusi

HOUR

YYYYMMDDHH24

2024112221.

Dimulai di awal setiap jam. Misalnya, task dijalankan pukul 21:00:01 pada 22 November 2024.

YYYY-MM-DD-HH24

2024-11-22-21.

DAY

YYYYMMDD

20241122.

Dimulai pukul 00:00:01 setiap hari. Misalnya, 00:00:01 pada 22 November 2024.

YYYY-MM-DD

2024-11-22.

MONTH

YYYYMM

202411.

Dimulai pukul 00:00:01 pada hari pertama setiap bulan. Misalnya, 00:00:01 pada 1 November 2024.

YYYY-MM

2024-11.

QUARTER

YYYYQ

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

Dimulai pukul 00:00:01 pada hari pertama setiap kuartal. Misalnya, 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.

Dimulai pukul 00:00:01 pada hari pertama setiap tahun. Misalnya, 00:00:01 pada 1 Januari 2023.

Contoh

Contoh berikut menunjukkan cara mengatur unit waktu ke DAY, membuat partisi untuk 3 hari ke depan, menyimpan partisi historis selama 2 hari terakhir, dan mengatur zona waktu ke Asia/Shanghai.

Contoh menggunakan klausa WITH

  1. Buat tabel partisi tbl1.

    -- Di V2.1, buat tabel partisi dan konfigurasi manajemen partisi dinamis:
    
    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. Setelah partisi anak dibuat, 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. Lakukan kueri data.

    SELECT * FROM tbl1 WHERE c2='20231212';

    Hasil berikut dikembalikan:

    c1	     c2
    Data 1   20231212

Contoh menggunakan pernyataan CALL

  1. Buat tabel partisi tbl1.

    -- Buat tabel partisi dan konfigurasi manajemen partisi dinamis:
    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. Setelah partisi anak dibuat, 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. Lakukan kueri data.

    SELECT * FROM tbl1 WHERE c2='20231212';

    Hasil berikut dikembalikan:

    c1	     c2
    Data 1   20231212

Logika penambahan dan penghapusan partisi adalah sebagai berikut:

Waktu

Peristiwa

Hasil

2023-12-12 09:00:00

Jalankan pernyataan SQL di atas untuk membuat tabel partisi.

  • Tabel induk dibuat: tbl1

  • Partisi anak dibuat: tbl1_20231212, tbl1_20231213, tbl1_20231214

2023-12-13 00:00:00

Sistem secara otomatis membuat partisi anak.

  • Partisi anak dibuat: tbl1_20231215

2023-12-14 00:00:00

Sistem secara otomatis membuat partisi anak.

  • Partisi anak dibuat: tbl1_20231216

2023-12-15 00:00:00

Sistem secara otomatis membuat partisi anak dan menghapus partisi anak.

  • Partisi anak dibuat: tbl1_20231217

  • Partisi anak dihapus: tbl1_20231212

2023-12-16 00:00:00

Sistem secara otomatis membuat partisi anak dan menghapus partisi anak.

  • Partisi anak dibuat: tbl1_20231218

  • Partisi anak dihapus: tbl1_20231213

Skenario umum

Simpan partisi anak tertentu

Secara default, sistem secara otomatis membuat dan menghapus partisi anak berdasarkan aturan partisi dinamis yang dikonfigurasi. Partisi anak di luar rentang retensi akan dihapus secara otomatis. Namun, dalam beberapa skenario, Anda mungkin perlu menyimpan data di partisi penting. Misalnya, dalam skenario e-commerce, Anda mungkin perlu menyimpan data dari festival belanja Double 11 setiap tahun untuk analisis year-over-year dan month-over-month. Anda dapat menyimpan partisi anak tertentu dengan menambahkan properti keep_alive ke tabel. Sintaksisnya adalah sebagai berikut.

  • Sintaksis yang didukung mulai dari V2.1:

    -- Simpan partisi
    ALTER TABLE [<schema_name>.]<table_name> SET (keep_alive = 'true');
    
    -- Berhenti menyimpan partisi: Setelah properti retensi dihapus, manajemen partisi dinamis segera memicu penghapusan data yang kedaluwarsa.
    ALTER TABLE [<schema_name>.]<table_name> SET (keep_alive = 'false');
    
  • Sintaksis yang didukung di semua versi:

    -- Simpan partisi
    CALL set_table_property('[<schema_name>.]<table_name>', 'keep_alive', 'true');
    
    -- Berhenti menyimpan partisi: Setelah properti retensi dihapus, manajemen partisi dinamis segera memicu penghapusan data yang kedaluwarsa.
    CALL set_table_property('[<schema_name>.]<table_name>', 'keep_alive', 'false');
    Catatan

    Ganti table_name dengan nama aktual partisi anak.

Kelola media penyimpanan secara dinamis untuk tabel partisi

Saat bekerja dengan tabel partisi, penggunaan penyimpanan bertingkat untuk data panas dan dingin dapat secara efektif menyeimbangkan biaya dan kinerja. Misalnya, Anda dapat secara dinamis menyimpan N partisi historis terbaru di media penyimpanan panas untuk memenuhi permintaan kueri yang sering, sementara menyimpan M partisi berikutnya di cold storage untuk menghemat biaya. Anda dapat menerapkan skenario ini menggunakan fitur manajemen partisi dinamis untuk menghapus data yang lebih tua dari N+M partisi.

Buat tabel partisi dinamis

Contoh: Buat satu partisi per hari. Secara dinamis simpan 7 partisi historis terbaru di media penyimpanan panas. Simpan 23 partisi berikutnya (lebih dari 7 hari) di media penyimpanan dingin. Hapus partisi yang lebih tua dari rentang ini. Kode berikut memberikan contoh.

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;

Efeknya ditunjukkan pada gambar berikut:

Effect

Ubah kebijakan penyimpanan

Anda dapat mengubah kebijakan partisi untuk media penyimpanan panas dengan mengubah nilai parameter auto_partitioning.num_hot. Perhatikan bahwa jika Anda mengubah kebijakan ini, partisi anak yang sudah berada di cold storage tidak akan secara otomatis dipindahkan 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;

Distribusi data dalam kasus ini memiliki dua kemungkinan skenario:

  • Skenario 1: Memperluas kebijakan partisi penyimpanan panas

    Untuk mengubah jumlah partisi panas dalam kebijakan manajemen dinamis menjadi 4, jalankan kode berikut:

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

    Karena partisi anak yang sudah berada di cold storage tidak secara otomatis dipindahkan ke hot storage, efek setelah perubahan ditunjukkan pada gambar berikut:Example

  • Skenario 2: Mengurangi batas cutoff penyimpanan panas dalam kebijakan partisi

    Untuk mengubah jumlah partisi panas dalam kebijakan manajemen dinamis menjadi 2, jalankan kode berikut:

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

    Partisi anak yang sudah berada di cold storage tidak secara otomatis dipindahkan ke hot storage. Namun, data yang perlu dipindahkan dari hot ke cold storage akan dimigrasikan. Efek setelah perubahan ditunjukkan pada gambar berikut:Example

Ubah tabel partisi cold storage menjadi tabel partisi dinamis

Sebagai contoh, untuk mengubah tabel partisi dengan properti cold storage menjadi tabel partisi dinamis dan mengatur partisi 7 hari terakhir ke hot storage, gunakan metode berikut.

  1. Persiapan data.

    -- Tentukan cold storage sebagai kebijakan penyimpanan 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. Ubah tabel menjadi tabel partisi dinamis dan atur partisi 7 hari terakhir ke hot storage.

    BEGIN;
    CALL set_table_property('tbl2', 'storage_mode', 'hot'); -- Atur tabel induk ke hot.
    CALL set_table_property('tbl2_20230810', 'storage_mode', 'cold'); -- Atur partisi yang tidak perlu dipindahkan ke hot storage menjadi cold.
    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 partisi dinamis dan status penjadwalan

Jalankan pernyataan SQL berikut untuk mengkueri informasi tentang tabel partisi dinamis dan konfigurasinya di database saat ini.

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;

Berikut ini penjelasan field-field tersebut.

Nama field

Deskripsi

schema_name

Nama skema.

table_name

Nama tabel.

ENABLE

Menunjukkan apakah manajemen partisi dinamis diaktifkan.

time_unit

Unit waktu untuk partisi dinamis.

time_zone

Zona waktu untuk partisi dinamis.

num_precreate

Jumlah partisi yang dibuat sebelumnya.

num_retention

Jumlah partisi historis yang disimpan.

create_user

Anda dapat membuat pengguna.

cret_time

Waktu pembuatan.

schd_start_time

Waktu penjadwalan terbaru.

Hasil berikut dikembalikan.

image

Lihat log pembuatan dan penghapusan partisi anak

Query Log tidak mencatat log pembuatan dan penghapusan partisi anak. Jalankan pernyataan SQL berikut untuk mengkueri log tersebut.

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

Berikut ini penjelasan nama field yang tercantum di atas.

Nama field

Deskripsi

relname

schema.table

relowner

Pemilik tabel partisi.

schdtime

Waktu penjadwalan.

trigtime

Waktu pemicu aktual.

status

Status.

message

Keterangan.

precreate

Nama partisi anak yang dibuat.

discard

Nama partisi anak yang dihapus.

Hasil berikut dikembalikan.

image

FAQ

Bagaimana cara mengaktifkan partisi dinamis untuk tabel partisi yang sudah ada?

Gunakan pernyataan SQL berikut untuk mengaktifkan partisi dinamis untuk tabel partisi yang sudah ada.

-- Contoh SQL untuk Hologres V2.1 dan versi selanjutnya
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 SQL 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

Parameter auto_partitioning.time_unit dan auto_partitioning.time_zone adalah konfigurasi inti untuk fitur partisi dinamis. Setelah Anda melakukan upgrade Hologres, Anda hanya dapat mengatur parameter ini sekali. Parameter tersebut tidak dapat diubah setelah ditetapkan.

Setelah saya mengaktifkan partisi dinamis untuk tabel partisi yang sudah ada, apakah partisi anak historis terpengaruh oleh logika penghapusan otomatis?

Sistem menghapus partisi anak berdasarkan namanya. Jika nama partisi anak sesuai dengan konvensi penamaan {parent_table}_{time_suffix}, partisi tersebut akan dihapus. Jika tidak, partisi tersebut tidak akan dihapus.

Saya membuat tabel partisi dinamis dan mengatur num_precreate ke 3. Tabel induk berhasil dibuat setelah saya menjalankan pernyataan SQL, tetapi ketiga partisi anak tidak dibuat. Mengapa?

Untuk task awal pembuatan partisi dinamis, sistem memeriksa setiap 10 menit secara default. Oleh karena itu, partisi anak akan dibuat dalam waktu 10 menit. Periksa kembali nanti.