全部产品
Search
文档中心

Hologres:Pembagian Partisi Dinamis

更新时间:Oct 31, 2025

Fitur pembagian partisi dinamis dari Hologres secara otomatis membuat dan mengelola tabel partisi anak berdasarkan aturan pembagian partisi yang Anda konfigurasikan saat membuat tabel partisi. Anda tidak perlu mengonfigurasikan semua partisi saat membuat tabel partisi. Fitur ini juga dapat memigrasikan data dalam partisi yang memenuhi kondisi tertentu ke kelas penyimpanan Infrequent Access (IA), membantu Hologres mengurangi biaya penyimpanan tanpa menurunkan kinerja kueri.

Pengenalan

Fitur pembagian partisi dinamis dioptimalkan di berbagai versi untuk memberikan lebih banyak fungsi:

  • Hologres V1.3 dan yang lebih baru memungkinkan Anda mengonfigurasikan aturan pembagian partisi dinamis. Sistem menjalankan tugas terjadwal untuk membuat tabel partisi anak sebelumnya dan menghapus tabel partisi anak yang kedaluwarsa berdasarkan aturan tersebut.

  • Hologres V1.3.37 dan yang lebih baru mendukung manajemen dinamis penyimpanan bertingkat untuk data panas dan dingin, sehingga penyimpanan dingin dapat digunakan secara otomatis untuk data. Hal ini membantu mengurangi biaya penyimpanan. Untuk informasi lebih lanjut, lihat Penyimpanan Bertingkat untuk Data Panas dan Dingin.

  • Hologres V2.1.11 dan yang lebih baru memungkinkan Anda mengonfigurasikan kolom bertipe DATE sebagai kolom kunci partisi untuk pembagian partisi dinamis.

  • Hologres V2.2 dan yang lebih baru memungkinkan Anda mengonfigurasikan properti schd_start_time saat mengonfigurasikan pembagian partisi dinamis untuk sebuah tabel. Properti ini digunakan untuk menentukan waktu ketika partisi dijadwalkan untuk dibuat, dihapus, atau disimpan di tingkat penyimpanan dingin.

  • Hologres V3.0.12 dan yang lebih baru memungkinkan Anda mengonfigurasikan parameter auto_partitioning_time_format, yang menentukan format datetime kolom kunci partisi, misalnya YYYY-MM-DD.

Catatan penggunaan

  • Hologres memungkinkan Anda mengimpor 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 Menulis Data ke Tabel Hasil Partisi di Hologres secara Real-Time.

  • Setiap aturan pembagian 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 kunci utama, kunci partisi harus menjadi subset dari kunci utama.

  • Anda hanya dapat mengonfigurasikan properti schd_start_time untuk tabel partisi induk, tetapi tidak untuk tabel partisi anak.

  • Parameter auto_partitioning_time_format hanya dapat dikonfigurasikan sekali dan tidak dapat diubah setelah dikonfigurasikan. Untuk tabel baru, Anda dapat mengonfigurasikan parameter ini dalam pernyataan CREATE TABLE. Untuk tabel yang sudah ada, Anda tidak dapat mengubah parameter ini.

  • Setelah Anda menentukan format waktu dengan menggunakan parameter auto_partitioning_time_format, tabel partisi anak diberi nama dalam format yang sama dengan kolom kunci partisi. Saat Anda mengkueri data dari tabel partisi anak, Anda harus mengapit nama tabel partisi anak dalam sepasang tanda kutip ganda ("). Contoh: SELECT xxx FROM "tbl_2024_11_22".

Konfigurasikan pembagian partisi dinamis

Deskripsi sintaksis

Anda dapat mengonfigurasikan pembagian partisi dinamis untuk tabel partisi saat membuat tabel tersebut atau untuk tabel partisi yang sudah ada. Contoh kode berikut menunjukkan sintaksis:

Gunakan klausa WITH

  • Konfigurasikan properti pembagian partisi dinamis saat membuat tabel partisi.

    -- Konfigurasikan properti pembagian partisi dinamis saat Anda 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',
       -- Hologres V2.2 atau yang lebih baru mendukung schd_start_time
       auto_partitioning_schd_start_time = 'xxx',
       -- Hologres V3.0.12 atau yang lebih baru mendukung time_format
       auto_partitioning_time_format = 'xxx'
    );
  • Ubah properti pembagian partisi dinamis untuk tabel partisi yang sudah ada.

    -- Ubah properti pembagian partisi dinamis untuk tabel partisi yang sudah ada.
    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',
       -- Hologres V2.2 atau yang lebih baru mendukung schd_start_time
       auto_partitioning_schd_start_time = 'xxx',
       -- Hologres V3.0.12 atau yang lebih baru mendukung time_format
       auto_partitioning_time_format = 'xxx'
    );
    

Gunakan perintah CALL

  • Konfigurasikan properti pembagian partisi dinamis saat membuat tabel partisi.

    -- Konfigurasikan properti pembagian partisi dinamis saat Anda 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_retention', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_hot', 'xxx');
    -- Hologres V2.2 atau yang lebih baru mendukung schd_start_time
    CALL set_table_property ('[<schema_name>.]<table_name>', 'auto_partitioning.schd_start_time', 'xxx');
    -- Hologres V3.0.12 atau yang lebih baru mendukung time_format
    CALL set_table_property ('[<schema_name>.]<table_name>', 'auto_partitioning.time_format', 'xxx');
    COMMIT;
  • Ubah properti pembagian partisi dinamis untuk tabel partisi yang sudah ada.

    -- Ubah properti pembagian partisi dinamis untuk tabel partisi yang sudah ada.
    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');
    -- Hologres V3.0.12 atau yang lebih baru mendukung time_format
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.time_format', 'xxx');

Parameter

Penting

Sebelum mengeksekusi pernyataan CREATE TABLE WITH untuk mengonfigurasikan pembagian (partisi) dinamis, ganti titik (.) dalam nama parameter dengan garis bawah (_). Sebagai contoh, sebelum mengeksekusi pernyataan CREATE TABLE WITH, ganti auto_partitioning.enable menjadi auto_partitioning_enable.

Parameter

Diperlukan

Deskripsi

Dapat diubah

Versi yang didukung

auto_partitioning_enable/auto_partitioning.enable

Tidak

Menentukan apakah akan mengaktifkan pembagian partisi dinamis. Nilai valid:

  • true: mengaktifkan pembagian partisi dinamis.

  • false: menonaktifkan pembagian partisi dinamis. Ini adalah nilai default.

Ya

Hologres V1.3 atau yang lebih baru

auto_partitioning_time_unit/auto_partitioning.time_unit

Ya

Satuan waktu untuk pembagian partisi dinamis. Nilai valid:

  • HOUR

  • DAY

  • MONTH

  • QUARTER

  • YEAR

Sebagai contoh, jika Anda mengatur parameter ini ke DAY, sistem secara otomatis membuat atau menghapus partisi per hari.

Tidak

auto_partitioning_time_zone/auto_partitioning.time_zone

Tidak

Zona waktu untuk pembagian partisi dinamis. Jika Anda tidak mengonfigurasikan parameter ini, zona waktu tempat instans Hologres Anda berada akan digunakan. Jika Anda menentukan zona waktu, partisi dikelola secara dinamis berdasarkan zona waktu yang ditentukan.

Anda dapat mengeksekusi pernyataan SQL berikut untuk menanyakan nilai valid dari parameter ini. Zona waktu yang berbeda memiliki offset waktu yang berbeda. Nilai valid dari parameter ini ditampilkan di kolom name yang dikembalikan. Contoh: Asia/Shanghai.

SELECT * FROM pg_timezone_names;

Tidak

auto_partitioning_num_precreate/auto_partitioning.num_precreate

Tidak

Jumlah partisi yang ingin Anda buat sebelumnya. Nilai valid:

  • 0: Tidak ada partisi yang dibuat sebelumnya.

  • [1, 512]: Jumlah partisi yang ditentukan dibuat sebelumnya berdasarkan titik waktu saat ini. Kami sarankan Anda menentukan angka lebih besar dari atau sama dengan 2. Nilai default: 4.

Catatan

Sebagai contoh, jika tanggal saat ini adalah 10 Januari 2022 dan Anda menentukan time_unit = DAY, num_precreate = 3 untuk sebuah tabel, partisi yang sesuai dengan 10 Januari, 11 Januari, dan 12 Januari 2022 dibuat sebelumnya.

Penting

Pembuatan partisi sebelumnya memengaruhi perilaku fungsi MAX_PT. Sebelum Anda mengonfigurasikan parameter ini, periksa apakah fungsi MAX_PT digunakan.

Ya

auto_partitioning_num_retention/auto_partitioning.num_retention

Tidak

Jumlah partisi historis yang ingin Anda pertahankan. Nilai valid:

  • 0: Tidak ada partisi historis yang dipertahankan.

  • -1: Semua partisi historis dipertahankan. Ini adalah nilai default.

  • Bilangan bulat positif: Jumlah partisi historis yang ditentukan dipertahankan. Nilai maksimum adalah 512.

Anda dapat mengeksekusi pernyataan set hg_experimental_auto_part_max_maintained_partitions=<value>; untuk menyesuaikan jumlah maksimum partisi historis yang dapat dipertahankan. Nilai maksimum adalah 8760.

Catatan

Sebagai contoh, jika tanggal saat ini adalah 10 Januari 2022 dan Anda menentukan <time_unit = DAY,num_retention = 3> untuk sebuah tabel, partisi yang sesuai dengan 9 Januari, 8 Januari, dan 7 Januari 2022 dipertahankan, dan partisi yang sesuai dengan tanggal sebelum 7 Januari 2022 dihapus.

Ya

auto_partitioning_num_hot/auto_partitioning.num_hot

Tidak

Jumlah partisi panas yang ingin Anda pertahankan. Nilai valid:

  • 0: Tidak ada partisi panas yang dipertahankan.

  • -1: Semua partisi panas dipertahankan. Ini adalah nilai default.

  • Bilangan bulat positif: Jumlah partisi panas yang ditentukan dipertahankan. Nilai maksimum adalah 512.

Hologres V1.3.37 atau yang lebih baru

auto_partitioning_schd_start_time/auto_partitioning.schd_start_time

Tidak

Waktu yang dijadwalkan untuk pembagian partisi dinamis. Jika Anda tidak mengonfigurasikan parameter ini dan Anda mengatur parameter auto_partitioning.time_unit ke HOUR, pembagian partisi dinamis dilakukan pada awal setiap jam. Jika Anda tidak mengonfigurasikan parameter ini dan Anda mengatur parameter auto_partitioning.time_unit ke nilai selain HOUR, pembagian partisi dinamis dilakukan pada 00:00:01 pada hari tertentu.

Anda dapat mengubah waktu penjadwalan dengan menggunakan parameter ini. Untuk format tanggal dan waktu yang didukung, lihat Format waktu. Jika Anda menetapkan titik waktu di masa depan, konfigurasi akan berlaku ketika waktu yang ditentukan tiba.

Hologres V2.2 atau yang lebih baru

auto_partitioning_time_format/auto_partitioning.time_format

Tidak

Format datetime kolom 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 atau yang lebih baru

Konvensi penamaan untuk tabel partisi anak

Parameter auto_partitioning.time_unit untuk pembagian partisi dinamis dapat diatur ke HOUR, DAY, MONTH, QUARTER, atau YEAR. Nama tabel partisi anak yang dibuat secara otomatis dengan fitur ini terdiri dari nama tabel partisi induk dan akhiran waktu, dalam format {parent_table}_{time_suffix}. Akhiran waktu mengikuti format tertentu dan dihasilkan berdasarkan waktu yang dijadwalkan serta satuan waktu untuk pembagian partisi dinamis. Tabel berikut menjelaskan hubungan antara akhiran waktu dan waktu yang dijadwalkan.

Satuan waktu

Format akhiran waktu

Contoh nilai

Waktu yang dijadwalkan untuk pembagian partisi dinamis

HOUR

YYYYMMDDHH24

2024112221

Awal setiap jam, seperti 21:00:01 pada 22 November 2024

YYYY-MM-DD-HH24

2024-11-22-21

DAY

YYYYMMDD

20241122

00:00:01 setiap hari, seperti 00:00:01 pada 22 November 2024

YYYY-MM-DD

2024-11-22

MONTH

YYYYMM

202411

00:00:01 pada hari pertama setiap bulan, seperti 00:00:01 pada 1 November 2024

YYYY-MM

2024-11

QUARTER

YYYYQ

20241, 20242, 20243 dan 20244, menunjukkan empat kuartal tahun 2024

00:00:01 pada hari pertama setiap kuartal, seperti 00:00:01 pada 1 Januari 2024

YYYY-Q

2024-1, 2024-2, 2024-3 dan 2024-4, menunjukkan empat kuartal tahun 2024

YEAR

YYYY

2023 dan 2024

00:00:01 pada hari pertama setiap tahun, seperti 00:00:01 pada 1 Januari 2023

Contoh

Pernyataan SQL berikut memberikan contoh cara mengonfigurasikan pembagian partisi dinamis dengan auto_partitioning.time_unit diatur ke DAY. Dalam contoh ini, partisi dibuat untuk tiga hari ke depan dan partisi historis untuk dua hari sebelumnya dipertahankan berdasarkan tanggal saat ini di zona waktu Asia/Shanghai.

Gunakan klausa WITH

  1. Buat tabel partisi bernama tbl1.

    -- Buat tabel partisi dan konfigurasikan pembagian partisi dinamis untuk tabel tersebut di Hologres V2.1.
    
    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 ke dalam partisi.

    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

Gunakan perintah CALL

  1. Buat tabel partisi bernama tbl1.

    -- Buat tabel partisi dan konfigurasikan pembagian partisi dinamis untuk tabel tersebut.
    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 ke dalam partisi.

    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 hasil eksekusi.

Waktu

Peristiwa

Hasil

2023-12-12 09:00:00

Pernyataan SQL dieksekusi untuk membuat tabel partisi induk dan tabel partisi anaknya.

  • Tabel partisi induk bernama tbl1 dibuat.

  • Tabel partisi anak bernama tbl1_20231212, tbl1_20231213, dan tbl1_20231214 dibuat.

2023-12-13 00:00:00

Sistem secara otomatis membuat tabel partisi anak.

  • Tabel partisi anak bernama tbl1_20231215 dibuat.

2023-12-14 00:00:00

Sistem secara otomatis membuat tabel partisi anak.

  • Tabel partisi anak bernama tbl1_20231216 dibuat.

2023-12-15 00:00:00

Sistem secara otomatis membuat tabel partisi anak dan menghapus tabel partisi anak lainnya.

  • Tabel partisi anak bernama tbl1_20231217 dibuat.

  • Tabel partisi anak bernama tbl1_20231212 dihapus.

2023-12-16 00:00:00

Sistem secara otomatis membuat tabel partisi anak dan menghapus tabel partisi anak lainnya.

  • Tabel partisi anak bernama tbl1_20231218 dibuat.

  • Tabel partisi anak bernama tbl1_20231213 dihapus.

Skenario

Pertahankan tabel partisi anak

Secara default, sistem membuat dan menghapus tabel partisi anak berdasarkan konfigurasi pembagian partisi dinamis. Tabel partisi anak secara otomatis dihapus setelah kedaluwarsa. Namun, Anda mungkin ingin mempertahankan data penting dalam tabel partisi anak, seperti data e-commerce selama Double 11 untuk analisis year-on-year atau period-over-period. Dalam skenario seperti itu, Hologres memungkinkan Anda menambahkan properti keep_alive ke tabel partisi anak yang ingin Anda pertahankan untuk mencegah penghapusan otomatis.

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

    -- Tambahkan properti keep_alive ke tabel partisi anak.
    ALTER TABLE [<schema_name>.]<table_name> SET (keep_alive = 'true');
    
    -- Hapus properti keep_alive dari tabel partisi anak. Setelah Anda menghapus properti keep_alive, tabel partisi anak akan dihapus setelah tabel kedaluwarsa.
    ALTER TABLE [<schema_name>.]<table_name> SET (keep_alive = 'false');
    
  • Sintaksis yang didukung di semua versi Hologres:

    -- Tambahkan properti keep_alive ke tabel partisi anak.
    CALL set_table_property('[<schema_name>.]<table_name>', 'keep_alive', 'true');
    
    -- Hapus properti keep_alive dari tabel partisi anak. Setelah Anda menghapus properti keep_alive, tabel partisi anak akan dihapus setelah tabel kedaluwarsa.
    CALL set_table_property('[<schema_name>.]<table_name>', 'keep_alive', 'false');

Kelola mode penyimpanan tabel partisi secara dinamis

Anda dapat mengaktifkan penyimpanan bertingkat untuk data panas dan dingin pada tabel partisi untuk mengurangi biaya dan mengoptimalkan kinerja kueri secara efisien. Misalnya, Anda dapat menyimpan data dalam N partisi historis sebelumnya yang sering diakses di tingkat penyimpanan panas, dan menyimpan data dalam M partisi yang dibuat lebih awal daripada N partisi di tingkat penyimpanan dingin. Hal ini membantu mengurangi biaya penyimpanan. Partisi yang dibuat lebih awal daripada partisi historis M dan N dihapus secara dinamis.

Buat tabel partisi dan konfigurasikan pembagian partisi dinamis untuk tabel tersebut

Dalam contoh ini, tabel partisi dengan pembagian partisi dinamis dibuat. Partisi dibuat untuk setiap hari. Data dalam 7 partisi historis sebelumnya disimpan di tingkat penyimpanan panas, dan data dalam 23 partisi historis yang dibuat lebih awal daripada 7 partisi disimpan di tingkat penyimpanan dingin. Partisi yang dibuat lebih awal daripada 30 partisi historis dihapus. Contoh kode:

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;

Gambar berikut menunjukkan hasil konfigurasi.

效果

Ubah kebijakan penyimpanan

Anda dapat menggunakan parameter auto_partitioning.num_hot untuk menentukan jumlah partisi di tingkat penyimpanan panas. Perhatikan bahwa Anda tidak dapat memigrasikan partisi dari tingkat penyimpanan dingin ke tingkat penyimpanan panas. Dalam contoh ini, tabel partisi dibuat pada 1 Juli 2022. Contoh kode:

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;

Penyimpanan partisi dapat berubah dalam skenario berikut:

  • Skenario 1: Tingkatkan jumlah partisi di tingkat penyimpanan panas

    Untuk meningkatkan jumlah partisi di tingkat penyimpanan panas menjadi 4, eksekusi pernyataan berikut:

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

    Tabel partisi anak yang disimpan di tingkat penyimpanan dingin tidak dimigrasikan ke tingkat penyimpanan panas. Gambar berikut menunjukkan efek konfigurasi.示例

  • Skenario 2: Kurangi jumlah partisi di tingkat penyimpanan panas

    Untuk mengurangi jumlah partisi di tingkat penyimpanan panas menjadi 2, eksekusi pernyataan berikut:

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

    Tabel partisi anak yang disimpan di tingkat penyimpanan panas dimigrasikan ke tingkat penyimpanan dingin. Gambar berikut menunjukkan efek konfigurasi.示例

Konversikan tabel partisi yang menggunakan mode penyimpanan dingin menjadi tabel partisi yang memiliki partisi dinamis

Dalam contoh ini, tabel partisi yang menggunakan mode penyimpanan dingin dikonversi menjadi tabel partisi yang berisi partisi dinamis. Partisi yang dibuat dalam 7 hari terakhir disimpan di tingkat penyimpanan panas. Prosedur:

  1. Siapkan data.

    -- Buat tabel partisi dan atur mode penyimpanan tabel ke penyimpanan dingin.
    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. Konversikan partisi tabel menjadi partisi dinamis dan simpan partisi yang dibuat dalam 7 hari terakhir di tingkat penyimpanan panas.

    BEGIN;
    CALL set_table_property('tbl2', 'storage_mode', 'hot'); --Atur mode penyimpanan tabel partisi induk ke penyimpanan panas.
    CALL set_table_property('tbl2_20230810', 'storage_mode', 'cold'); --Atur mode penyimpanan partisi yang tidak memerlukan konversi mode penyimpanan ke penyimpanan dingin.
    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;

Kueri konfigurasi pembagian partisi dinamis

Anda dapat mengeksekusi pernyataan SQL berikut untuk menanyakan konfigurasi pembagian partisi dinamis untuk sebuah tabel di database.

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 parameter dalam pernyataan tersebut.

Parameter

Deskripsi

schema_name

Nama skema.

table_name

Nama tabel.

ENABLE

Menunjukkan apakah pembagian partisi dinamis diaktifkan.

time_unit

Satuan waktu untuk pembagian partisi dinamis.

time_zone

Zona waktu untuk pembagian partisi dinamis.

num_precreate

Jumlah partisi yang akan dibuat sebelumnya.

num_retention

Jumlah partisi historis yang akan dipertahankan.

create_user

Pengguna yang digunakan untuk membuat tabel partisi.

cret_time

Waktu ketika tabel partisi dibuat.

schd_start_time

Titik waktu terdekat ketika pembagian partisi dijadwalkan.

Gambar berikut menunjukkan hasil kueri.

image

Kueri log untuk membuat dan menghapus tabel partisi anak

Log untuk membuat dan menghapus tabel partisi anak tidak termasuk dalam log kueri. Anda dapat mengeksekusi pernyataan SQL berikut untuk menanyakan log untuk membuat dan menghapus tabel partisi anak:

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

Tabel berikut menjelaskan parameter dalam pernyataan tersebut.

Parameter

Deskripsi

relname

Nama tabel dalam format schema.table.

relowner

Pemilik tabel partisi.

schdtime

Waktu yang dijadwalkan untuk pembagian partisi dinamis.

trigtime

Waktu aktual ketika pembagian partisi dinamis dilakukan.

status

Status tugas pembagian partisi dinamis.

message

Deskripsi.

precreate

Nama tabel partisi anak yang dibuat.

discard

Nama tabel partisi anak yang dihapus.

Gambar berikut menunjukkan hasil kueri.

image

FAQ

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

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

-- Sintaksis di Hologres V2.1 dan yang 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'
);

-- Sintaksis di 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 parameter inti dari fitur pembagian partisi dinamis. Anda hanya dapat mengonfigurasikan parameter ini sekali setelah instans Hologres ditingkatkan, dan nilai parameter tersebut tidak dapat diubah.

Jika saya mengaktifkan pembagian partisi dinamis untuk tabel partisi yang sudah ada, apakah tabel partisi anak yang sudah ada dihapus secara otomatis?

Hologres menentukan apakah akan menghapus tabel partisi anak berdasarkan nama tabel. Jika nama tabel partisi anak mengikuti aturan penamaan {parent_table}_{time_suffix}, tabel partisi anak dihapus secara otomatis setelah kedaluwarsa. Jika tidak, tabel partisi anak tidak dihapus secara otomatis.

Saya mengeksekusi pernyataan SQL untuk membuat tabel partisi dan mengonfigurasikan pembagian partisi dinamis untuk tabel tersebut dengan parameter num_precreate diatur ke 3. Namun, tabel partisi induk dibuat tetapi tidak ada tabel partisi anak yang dibuat. Mengapa?

Secara default, Hologres melakukan pemeriksaan setiap 10 menit pada tugas baru yang mana pembagian partisi dinamis dikonfigurasikan. Tabel partisi anak dibuat dalam waktu 10 menit. Anda dapat memeriksa tabel partisi anak nanti.