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_timeke konfigurasi partisi otomatis, yang memungkinkan Anda menyesuaikan jadwal pembuatan, penghapusan, dan pengarsipan partisi. -
Hologres V3.0.12: Menambahkan parameter
auto_partitioning_time_formatuntuk 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_formatbersifat 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
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 |
|
|
Tidak |
Mengontrol apakah partisi otomatis diaktifkan. Nilai yang valid:
|
Ya |
Hologres V1.3 dan versi lebih baru |
|
|
Ya |
Menentukan satuan waktu untuk partisi. Nilai yang valid:
Contohnya, jika Anda mengatur properti ini ke |
Tidak |
|
|
|
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
|
Tidak |
|
|
|
Tidak |
Menentukan jumlah partisi yang akan dibuat sebelumnya. Nilai yang valid:
Catatan
Contohnya, jika tanggal saat ini adalah 2022-01-10 dan Anda mengatur 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 |
|
|
|
Tidak |
Menentukan jumlah partisi historis yang dipertahankan. Nilai yang valid:
Anda dapat menjalankan Catatan
Contohnya, jika tanggal saat ini adalah 2022-01-10, |
Ya |
|
|
|
Tidak |
Menentukan jumlah partisi hot yang dipertahankan. Partisi hot adalah partisi yang berada di hot storage. Nilai yang valid:
|
Ya |
Hologres V1.3.37 dan versi lebih baru |
|
|
Tidak |
Menentukan waktu khusus untuk menjalankan tugas partisi. Secara default, tugas ini berjalan di awal jam jika 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 |
|
|
Tidak |
Menentukan format string nilai kunci partisi.
|
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 |
|
Di awal setiap jam. Contoh: 21:00:01 pada 22 November 2024. |
|
YYYY-MM-DD-HH24 |
|
||
|
DAY |
YYYYMMDD |
|
Pukul 00:00:01 setiap hari. Contoh: 00:00:01 pada 22 November 2024. |
|
YYYY-MM-DD |
|
||
|
MONTH |
YYYYMM |
|
Pukul 00:00:01 pada hari pertama setiap bulan. Contoh: 00:00:01 pada 1 November 2024. |
|
YYYY-MM |
|
||
|
QUARTER |
YYYYQ |
|
Pukul 00:00:01 pada hari pertama setiap kuartal. Contoh: 00:00:01 pada 1 Januari 2024. |
|
YYYY-Q |
|
||
|
YEAR |
YYYY |
|
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
-
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' ); -
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'); -
Kueri data.
SELECT * FROM tbl1 WHERE c2='20231212';Hasil berikut dikembalikan:
c1 c2 Data 1 20231212
Menggunakan perintah CALL
-
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; -
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'); -
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. |
|
|
2023-12-13 00:00:00 |
Sistem secara otomatis membuat tabel anak. |
|
|
2023-12-14 00:00:00 |
Sistem secara otomatis membuat tabel anak. |
|
|
2023-12-15 00:00:00 |
Sistem secara otomatis membuat tabel anak dan menghapus yang lama. |
|
|
2023-12-16 00:00:00 |
Sistem secara otomatis membuat tabel anak dan menghapus yang lama. |
|
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');CatatanGanti
table_namedengan 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.

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.

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

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.
-
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; -
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 |
|
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;
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.