All Products
Search
Document Center

Realtime Compute for Apache Flink:Partisi data

Last Updated:Aug 11, 2026

Topik ini menjelaskan tiga strategi untuk mengelola tabel partisi.

Tabel partisi

Di Fluss, tabel partisi mengorganisasi data berdasarkan satu atau beberapa kunci partisi. Pendekatan ini secara efektif meningkatkan performa kueri dan kemudahan pengelolaan untuk set data besar. Partisi membagi data menjadi segmen-segmen, masing-masing sesuai dengan nilai kunci partisi tertentu.

Fluss mendukung tiga strategi pengelolaan berikut untuk tabel partisi:

  • Pengelolaan partisi manual: Anda dapat membuat atau menghapus partisi secara manual. Untuk informasi selengkapnya, lihat Manage Partitions.

  • Pengelolaan partisi otomatis: Sistem secara otomatis membuat partisi berdasarkan aturan partisi otomatis yang dikonfigurasi saat pembuatan tabel. Sistem juga secara otomatis membersihkan partisi yang telah kedaluwarsa untuk mencegah pertumbuhan data tanpa batas. Untuk informasi selengkapnya, lihat Automatic Partitioning.

  • Pembuatan partisi dinamis: Fluss membuat partisi secara dinamis berdasarkan data yang ditulis ke tabel. Untuk informasi selengkapnya, lihat Dynamic Partitioning.

Ketiga strategi ini bersifat ortogonal dan dapat digunakan secara bersamaan pada tabel yang sama.

Tabel partisi multi-bidang

Tabel partisi, baik tabel primary key maupun tabel log, mendukung konfigurasi kunci partisi berdasarkan beberapa bidang. Pendekatan ini memungkinkan partisi data berdasarkan kombinasi nilai bidang, sehingga memberikan organisasi data, pengelolaan, dan optimasi kueri yang lebih granular.

Sebagai contoh, pada tabel primary key Pesanan, Anda dapat menetapkan kunci partisi sebagai (tanggal, wilayah). Data kemudian disimpan dalam partisi yang sesuai dengan kombinasi tertentu, seperti date=2025-04-05, region='US'. Pada kueri streaming, Anda dapat menyaring data—misalnya dengan region='US'—untuk memanfaatkan pemangkasan partisi dan meningkatkan performa baca melalui partition pushdown.

Keunggulan utama tabel partisi

  • Performa kueri yang lebih baik: Mengkueri partisi tertentu mengurangi jumlah data yang dibaca sistem, sehingga memperpendek waktu eksekusi kueri.

  • Organisasi data yang lebih jelas: Partisi membantu mengorganisasi data secara logis, sehingga lebih mudah dikelola dan dikueri.

  • Skalabilitas yang lebih baik: Membagi set data besar menjadi potongan-potongan kecil yang lebih mudah dikelola meningkatkan skalabilitas sistem.

Batasan

  • Tipe kunci partisi harus STRING.

  • Tabel dengan satu kunci partisi mendukung pembuatan dan pembersihan partisi otomatis. Tabel dengan beberapa kunci partisi hanya mendukung pembersihan otomatis partisi yang kedaluwarsa.

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

  • Anda hanya dapat mengonfigurasi aturan partisi otomatis saat pembuatan tabel; aturan tersebut tidak dapat diubah setelahnya.

Partisi otomatis

Contoh

Anda mengonfigurasi aturan partisi otomatis menggunakan opsi tabel. Contoh berikut menunjukkan cara menggunakan Flink SQL untuk membuat tabel bernama site_access yang mendukung partisi otomatis.

CREATE TABLE site_access(
  event_day STRING,  -- Kunci partisi
  site_id INT,       -- ID situs
  city_code STRING,  -- Kode kota
  user_name STRING,  -- Nama pengguna
  pv BIGINT,         -- Jumlah tampilan halaman
  PRIMARY KEY(event_day, site_id) NOT ENFORCED 
) PARTITIONED BY (event_day) WITH (
  'table.auto-partition.enabled' = 'true',            -- Aktifkan partisi otomatis
  'table.auto-partition.time-unit' = 'YEAR',          -- Tetapkan granularitas waktu ke YEAR
  'table.auto-partition.num-precreate' = '5',         -- Pra-buat 5 partisi
  'table.auto-partition.num-retention' = '2',         -- Simpan 2 partisi historis
  'table.auto-partition.time-zone' = 'Asia/Shanghai'  -- Tetapkan zona waktu ke Asia/Shanghai
);

Pada contoh ini, ketika tugas partisi otomatis dijalankan (Fluss menjalankannya secara berkala di latar belakang untuk semua tabel), sistem akan pra-membuat lima partisi dan menyimpan dua partisi historis dengan menggunakan YEAR sebagai granularitas waktu. Zona waktu diatur ke Asia/Shanghai.

Parameter tabel

Parameter

Tipe

Wajib

Bawaan

Deskripsi

table.auto-partition.enabled

Boolean

Tidak

false

Menentukan apakah partisi otomatis diaktifkan untuk tabel. Nilai bawaannya adalah false. Saat diaktifkan, partisi dibuat secara otomatis.

table.auto-partition.key

String

Tidak

Tidak ada

Untuk tabel dengan beberapa kunci partisi, parameter ini menentukan kunci mana yang digunakan untuk partisi otomatis berbasis waktu. Sistem membandingkan nilai kunci ini dengan waktu saat ini untuk membuat dan menghapus partisi. Wajib untuk tabel multi-kunci; tidak digunakan untuk tabel satu kunci.

table.auto-partition.time-unit

ENUM

Tidak

DAY

Granularitas waktu untuk pembuatan partisi otomatis. Nilai bawaannya adalah 'DAY'. Nilai yang valid adalah 'HOUR', 'DAY', 'MONTH', 'QUARTER', dan 'YEAR'. Jika nilainya 'HOUR', partisi dibuat dalam format yyyyMMddHH. Jika 'DAY', formatnya adalah yyyyMMdd. Jika 'MONTH', formatnya adalah yyyyMM. Jika 'QUARTER', formatnya adalah yyyyQ. Jika 'YEAR', formatnya adalah yyyy.

table.auto-partition.time-format

String

Tidak

Berdasarkan satuan waktu

Pola DateTimeFormatter yang digunakan untuk membuat partisi secara otomatis. Pola kustom harus mengurutkan bidang waktu dari satuan terbesar ke terkecil, mencakup setiap bidang yang dibutuhkan oleh table.auto-partition.time-unit, dan menggunakan bidang numerik lebar tetap. Sebagai contoh, yyyy-MM-dd adalah pola yang valid untuk DAY.

table.auto-partition.num-precreate

Integer

Tidak

2

Jumlah partisi yang akan dipra-buat selama setiap pemeriksaan partisi otomatis. Misalnya, jika waktu pemeriksaan adalah 2024-11-11 dan nilai ini adalah 3, maka partisi 20241111, 20241112, dan 20241113 akan dipra-buat. Jika partisi sudah ada, pembuatannya dilewati. Nilai bawaannya adalah 2. Misalnya, jika 'table.auto-partition.time-unit' adalah 'DAY' (nilai bawaan), satu partisi dipra-buat untuk hari ini dan satu lagi untuk besok. Pra-pembuatan tidak didukung untuk tabel dengan beberapa kunci partisi; parameter ini diabaikan untuk tabel tersebut.

table.auto-partition.num-retention

Integer

Tidak

7

Jumlah partisi historis yang disimpan selama setiap pemeriksaan partisi otomatis. Misalnya, jika waktu pemeriksaan adalah 2024-11-11, satuan waktu adalah DAY, dan nilai ini adalah 3, maka partisi historis 20241108, 20241109, dan 20241110 disimpan. Sistem menghapus partisi yang lebih lama dari 20241108. Nilai bawaannya adalah 7.

table.auto-partition.time-zone

String

Tidak

Zona waktu sistem

Zona waktu untuk partisi otomatis. Nilai bawaannya adalah zona waktu sistem.

Aturan pembuatan partisi

table.auto-partition.time-unit untuk tabel yang dipartisi secara otomatis dapat diatur ke HOUR, DAY, MONTH, QUARTER, atau YEAR. Partisi otomatis dibuat dalam format berikut.

Satuan waktu

Format

Contoh

HOUR

yyyyMMddHH

2024091922

DAY

yyyyMMdd

20240919

MONTH

yyyyMM

202409

QUARTER

yyyyQ

20241

YEAR

yyyy

2024

Anda dapat mengganti pola bawaan dengan table.auto-partition.time-format. Pola kustom harus memenuhi semua aturan berikut:

  • Mengurutkan bidang waktu dari satuan terbesar ke terkecil.

  • Mencakup setiap bidang yang memengaruhi granularitas partisi yang dikonfigurasi.

  • Menggunakan bidang numerik lebar tetap: empat digit untuk tahun, dua digit masing-masing untuk bulan, hari, dan jam, serta satu digit untuk kuartal.

  • Bagian pola opsional yang menggunakan [ dan ] tidak didukung, karena setiap nilai partisi harus berisi semua bidang yang diperlukan.

Sebagai contoh, yyyy-MM-dd adalah pola yang valid untuk DAY. Pola berikut ditolak: MM-yyyy karena urutan bidang salah, yyyy-MM karena bidang hari tidak ada, dan yyyy-M-dd karena lebar bulan tidak tetap. Nilai partisi yang dihasilkan juga harus merupakan nilai partisi Fluss yang valid: maksimal 200 karakter ASCII berupa huruf, angka, garis bawah, atau tanda hubung, dan tidak boleh diawali dengan awalan khusus __. Oleh karena itu, yyyy/MM/dd tidak valid karena / tidak diizinkan. Teks literal dapat diapit tanda kutip. Sebagai contoh, Anda dapat menggunakan yyyy-'Q'Q untuk QUARTER. Ketika kunci auto-partisi bertipe DATE, satuan waktu harus DAY dan polanya harus yyyy-MM-dd.

Setelah Anda menonaktifkan partisi otomatis, pola waktu yang dikonfigurasi tetap disimpan dan masih digunakan untuk memvalidasi nama partisi yang dibuat secara manual, tetapi pemeriksaan retensi tidak lagi dilakukan.

Konfigurasi kluster Fluss

Tabel berikut menjelaskan opsi konfigurasi yang terkait dengan partisi otomatis untuk kluster Fluss.

Parameter

Tipe

Bawaan

Deskripsi

auto-partition.check.interval

Duration

10 menit

Interval pemeriksaan Fluss terhadap tabel yang memiliki partisi otomatis diaktifkan. Selama setiap pemeriksaan, Fluss membuat atau menghapus partisi sesuai kebutuhan berdasarkan aturan tabel tersebut.

Partisi dinamis

Partisi dinamis adalah fitur sisi client yang diaktifkan secara bawaan, yang secara otomatis membuat partisi saat data ditulis ke tabel. Fitur ini sangat berguna ketika himpunan lengkap partisi belum diketahui sebelumnya, sehingga menghilangkan kebutuhan pembuatan manual. Fitur ini juga sangat berguna saat Anda bekerja dengan partisi multi-bidang karena partisi otomatis saat ini hanya mendukung pembuatan partisi untuk kunci satu bidang saja.

Catatan

Jumlah partisi yang dibuat secara dinamis juga dibatasi oleh parameter max.partition.num dan max.bucket.num yang dikonfigurasi pada kluster Fluss.

  • Nilai bawaan max.partition.num adalah 1.000. Ini merepresentasikan jumlah maksimum partisi yang dapat dibuat untuk setiap tabel partisi.

  • Nilai bawaan max.bucket.num adalah 128.000. Ini merepresentasikan jumlah total maksimum bucket yang didukung per tabel, yang dihitung sebagai (jumlah partisi) × (jumlah bucket per partisi).

Opsi client

Parameter

Tipe

Wajib

Bawaan

Deskripsi

client.writer.dynamic-create-partition.enabled

Boolean

Tidak

true

Menentukan apakah pembuatan partisi dinamis diaktifkan untuk writer client. Jika diaktifkan, client secara otomatis membuat partisi baru jika partisi tersebut belum ada saat penulisan.

Contoh partisi dinamis

Langkah 1: Buat tabel contoh

Pada bilah navigasi kiri, pilih Development > Scripts, buat skrip kueri data kosong baru, lalu masukkan SQL berikut untuk membuat tabel partisi dengan kolom dt sebagai kunci partisi.

CREATE TABLE IF NOT EXISTS `fluss-demo`.fluss.table_enable_dynamic_partition
(
    id    BIGINT
    ,name STRING
    ,dt   STRING
)
PARTITIONED BY (dt)
WITH (
    'client.writer.dynamic-create-partition.enabled' = 'true'
)
;

Verifikasi partisi saat ini dari tabel:

SHOW PARTITIONS `fluss-demo`.fluss.table_enable_dynamic_partition;

Hasil kueri menunjukkan bahwa daftar partisi tabel kosong.

Langkah 2: Masukkan data secara dinamis

Jalankan pernyataan SQL berikut untuk memasukkan data ke partisi yang belum ada:

INSERT INTO `fluss-demo`.fluss.table_enable_dynamic_partition values(1, 'hello', '20250701');

Langkah 3: Verifikasi pembuatan partisi

Jalankan perintah SHOW PARTITIONS lagi untuk memverifikasi bahwa partisi telah dibuat secara dinamis.

Hasil kueri menunjukkan dt=20250701 pada kolom partition name, yang mengonfirmasi bahwa partisi telah dibuat secara dinamis.