Apache Paimon (Paimon) mendukung dua jenis tabel: tabel kunci utama dan tabel append-only. Topik ini menjelaskan fitur dari tabel kunci utama dan tabel append-only.
Tabel kunci utama
Tabel kunci utama di Paimon memiliki satu atau lebih kunci utama yang harus ditentukan saat pembuatan tabel.
Sintaksis
Kode sampel berikut menunjukkan cara membuat tabel kunci utama. Dalam contoh ini, kunci partisi diatur ke dt, kunci utama ke dt, shop_id, dan user_id, serta jumlah bucket menjadi 4 untuk tabel tersebut.
CREATE TABLE T (
dt STRING,
shop_id BIGINT,
user_id BIGINT,
num_orders INT,
total_amount INT,
PRIMARY KEY (dt, shop_id, user_id) NOT ENFORCED
) PARTITIONED BY (dt) WITH (
'bucket' = '4'
);Kunci utama digunakan untuk mengidentifikasi setiap catatan data dalam tabel kunci utama. Jika dua catatan data memiliki kunci utama yang sama, catatan data tersebut digabungkan menjadi satu berdasarkan konfigurasi mesin penggabungan.
Mode bucket
Bucket adalah unit terkecil untuk operasi baca dan tulis dalam tabel Paimon. Tabel tanpa partisi atau partisi dalam tabel berpartisi dibagi lagi menjadi bucket. Hal ini memungkinkan pembacaan dan penulisan paralel, sehingga meningkatkan efisiensi. Tabel berikut menjelaskan mode bucket yang didukung.
Mode | Definisi | Catatan penggunaan |
Mode bucket dinamis (default) | Jika Anda membiarkan parameter |
|
Mode bucket tetap | Jika Anda menentukan Anda dapat mengubah jumlah bucket dalam mode ini. Untuk informasi lebih lanjut, lihat bagian "Ubah jumlah bucket dalam mode bucket tetap" dari topik ini. | Dalam mode ini, pastikan bahwa kunci utama mencakup semua kunci partisi untuk mencegah pembaruan lintas partisi berdasarkan kunci utama. |
Pembaruan data dalam mode bucket dinamis
Tipe | Catatan penggunaan |
Pembaruan lintas partisi | Dalam tabel kunci utama yang menggunakan mode bucket dinamis, pembaruan lintas partisi terjadi ketika kunci utama tidak mencakup semua kunci partisi. Dalam kasus seperti itu, Paimon tidak dapat menentukan bucket dan partisi dari catatan data hanya berdasarkan kunci utama. Oleh karena itu, Paimon menggunakan RocksDB untuk mempertahankan pemetaan kunci utama ke partisi dan bucket masing-masing. Jika tabel berisi sejumlah besar data, performa mungkin menurun secara signifikan dibandingkan dengan mode bucket tetap. Inisialisasi penerapan mungkin memakan waktu lebih lama karena pemetaan perlu dimuat ke RocksDB. Hasil pembaruan lintas partisi bervariasi berdasarkan konfigurasi mesin penggabungan. Mesin penggabungan berikut didukung:
|
Pembaruan intra-partisi | Dalam tabel kunci utama yang menggunakan mode bucket dinamis, pembaruan intra-partisi terjadi ketika kunci utama mencakup semua kunci partisi. Dalam kasus seperti itu, Paimon dapat menentukan partisi dari catatan data berdasarkan kunci utama, tetapi tidak dapat menentukan bucket yang sesuai. Oleh karena itu, Paimon membuat indeks untuk mempertahankan pemetaan antara kunci utama dan bucket. Setiap 100 juta catatan pemetaan menggunakan 1GB memori heap. Hanya partisi tempat data sedang ditulis yang mengonsumsi memori heap. Mode bucket dinamis memerlukan memori heap tambahan tetapi tidak menyebabkan penurunan performa yang signifikan dibandingkan dengan mode bucket tetap. |
Penugasan bucket
Mode | Deskripsi |
Mode bucket dinamis | Data pertama kali ditulis ke bucket yang ada. Jika jumlah bucket tidak cukup, bucket baru akan dibuat secara otomatis. Anda dapat menggunakan parameter berikut dalam klausa WITH untuk mengonfigurasi mode ini:
|
Mode bucket tetap | Secara default, Paimon menetapkan catatan data ke bucket berdasarkan nilai hash yang dihitung untuk kunci utama dari catatan data tersebut. Untuk menggunakan metode yang berbeda, konfigurasikan parameter |
Ubah jumlah bucket dalam mode bucket tetap
Jumlah bucket menentukan paralelisme operasi baca atau tulis. Jumlah bucket yang terlalu kecil menghasilkan sejumlah besar data di setiap bucket, yang memengaruhi performa. Jumlah bucket yang terlalu besar menghasilkan sejumlah besar file kecil. Kami merekomendasikan Anda menetapkan ukuran total data di setiap bucket menjadi 2 GB dan tidak menentukan nilai lebih besar dari 5 GB. Untuk mengubah jumlah bucket untuk tabel yang menggunakan mode bucket tetap, lakukan langkah-langkah berikut:
Jeda semua penerapan yang menulis data ke atau mengonsumsi data dari tabel.
Buat skrip dan jalankan pernyataan SQL berikut untuk mengonfigurasi parameter bucket:
ALTER TABLE `<catalog-name>`.`<database-name>`.`<table-name>` SET ('bucket' = '<bucket-num>');Reorganisasi data dalam partisi yang ingin Anda gunakan.
Tabel tanpa partisi: Buat Draft Batch Kosong, tempelkan pernyataan SQL berikut di editor, lalu klik Deploy dan Start untuk menjalankan penerapan batch.
INSERT OVERWRITE `<catalog-name>`.`<database-name>`.`<table-name>` SELECT * FROM `<catalog-name>`.`<database-name>`.`<table-name>`;Tabel berpartisi: Buat Draft Batch Kosong, tempelkan pernyataan SQL berikut di editor, lalu klik Deploy dan Start untuk menjalankan penerapan batch.
INSERT OVERWRITE `<catalog-name>`.`<database-name>`.`<table-name>` PARTITION (<partition-spec>) SELECT * FROM `<catalog-name>`.`<database-name>`.`<table-name>` WHERE <partition-condition>;Ganti <partition-spec> dan <partition-condition> dengan partisi yang ingin Anda reorganisasi. Sebagai contoh,
dt = 20240312, hh = 08menentukan partisi di mana bidang dt adalah 20240312 dan bidang hh adalah 08.INSERT OVERWRITE `<catalog-name>`.`<database-name>`.`<table-name>` PARTITION (dt = '20240312', hh = '08') SELECT * FROM `<catalog-name>`.`<database-name>`.`<table-name>` WHERE dt = '20240312' AND hh = '08';
Jika penerapan batch berjalan sesuai harapan, lanjutkan penerapan yang menulis data ke atau mengonsumsi data dari tabel.
Produsen changelog
Untuk memungkinkan konsumsi hilir dalam mode streaming, tabel kunci utama perlu menghasilkan changelog lengkap untuk operasi INSERT, DELETE, dan UPDATE. Changelog serupa dengan binlog dalam database. Untuk mengonfigurasi metode yang digunakan untuk menghasilkan changelog, tentukan parameter changelog-producer dalam klausa WITH. Tabel berikut menjelaskan nilai-nilai valid.
Nilai Valid | Deskripsi | Skenario |
none | Tabel kunci utama tidak menghasilkan changelog. | Skema yang tidak melibatkan konsumsi data dalam mode streaming. |
input | Tabel kunci utama meneruskan catatan input ke konsumen hilir. | Skema di mana aliran data masukan berisi changelog lengkap, seperti binlog dari database. Opsi ini paling efisien karena tidak diperlukan komputasi tambahan. |
lookup | Tabel kunci utama melakukan pencarian untuk hasil kompaksi file kecil untuk menghasilkan changelog lengkap. Kompaksi file kecil dipicu pada setiap titik pemeriksaan penerapan Flink. | Opsi ini berlaku untuk jenis aliran data masukan apa pun. Dibandingkan dengan opsi full-compaction, opsi ini memiliki latensi lebih rendah tetapi mengonsumsi lebih banyak sumber daya. Kami merekomendasikan opsi ini jika bisnis Anda memerlukan latensi tingkat menit. |
full-compaction | Tabel kunci utama menghasilkan changelog lengkap setiap kali kompaksi penuh file kecil dilakukan. | Opsi ini berlaku untuk jenis aliran data masukan apa pun. Dibandingkan dengan opsi lookup, opsi ini memiliki latensi lebih tinggi tetapi mengonsumsi lebih sedikit sumber daya. Opsi ini memanfaatkan proses kompaksi penuh untuk mencegah komputasi tambahan dan mengurangi konsumsi sumber daya. Kami merekomendasikan opsi ini jika bisnis Anda dapat menampung latensi hingga beberapa jam. Untuk memastikan kesegaran data, tentukan |
Secara default, Paimon menghasilkan catatan changelog bahkan jika catatan data yang diperbarui sama dengan yang sebelumnya. Untuk mencegah masalah ini, tentukan 'changelog-producer.row-deduplicate' = 'true' dalam klausa WITH. Konfigurasi ini valid hanya jika Anda menetapkan parameter changelog-producer ke lookup atau full-compaction. Kami merekomendasikan Anda menambahkan konfigurasi ini hanya jika sejumlah besar catatan yang tidak perlu mungkin dihasilkan dalam changelog. Ini karena perbandingan nilai sebelum dan sesudah pembaruan memerlukan komputasi tambahan.
Mesin penggabungan
Deskripsi
Jika tabel Paimon menerima beberapa catatan data yang memiliki kunci utama yang sama, catatan data tersebut digabungkan berdasarkan parameter merge-engine yang Anda tentukan dalam klausa WITH. Nilai valid:
first-row
aggregation
partial-update
Untuk informasi lebih lanjut, lihat Mesin Penggabungan.
Penanganan data tidak berurutan
Secara default, Paimon menentukan urutan penggabungan berdasarkan urutan input. Catatan input terakhir adalah yang terakhir digabungkan. Jika aliran masukan berisi catatan data yang tidak berurutan, tentukan 'sequence.field' = '<column-name>' dalam klausa WITH. Dengan cara ini, catatan data yang memiliki kunci utama yang sama digabungkan dalam urutan menaik dari nilai dalam kolom yang ditentukan oleh <column-name>. Parameter sequence.field mendukung tipe data berikut: TINYINT, SMALLINT, INTEGER, BIGINT, TIMESTAMP, dan TIMESTAMP_LTZ.
Jika Anda menggunakan Konektor MySQL sebagai input dan menentukan kolom metadata op_t sebagai bidang urutan, nilai bidang urutan akan sama untuk pasangan perubahan UPDATE_BEFORE dan UPDATE_AFTER. Untuk mencegah masalah ini, tentukan 'sequence.auto-padding' = 'row-kind-flag' dalam klausa WITH. Ini memastikan bahwa Paimon memproses perubahan UPDATE_BEFORE sebelum perubahan UPDATE_AFTER.
Tabel Append-only (tanpa kunci utama)
Tabel append-only di Paimon tidak memiliki kunci utama. Jenis tabel ini hanya mengizinkan operasi INSERT dalam mode streaming dan cocok untuk skenario yang tidak memerlukan pembaruan streaming, seperti sinkronisasi data log.
Sintaksis
Kode sampel berikut menunjukkan cara membuat tabel append-only. Dalam contoh ini, kunci partisi diatur ke dt untuk tabel tersebut.
CREATE TABLE T (
dt STRING
order_id BIGINT,
item_id BIGINT,
amount INT,
address STRING
) PARTITIONED BY (dt) WITH (
'bucket' = '-1'
);Subkategori
Subkategori | Definisi | Catatan penggunaan |
Tabel scalable append | Jika Anda menentukan | Jenis tabel ini merupakan padanan dari tabel Hive dan cocok untuk skenario di mana data dapat dikonsumsi dalam urutan yang berbeda dari urutan penulisan. Tabel scalable append menggunakan metode berikut untuk meningkatkan efisiensi penulisan: eliminasi shuffle catatan input, dukungan pengurutan data, penyediaan konfigurasi paralelisme fleksibel, dukungan konversi langsung dari tabel Hive, dan dukungan kompaksi file sepenuhnya asinkron. |
Tabel antrian append | Jika Anda menentukan Nilai | Jenis tabel ini merupakan padanan dari layanan antrian pesan dengan latensi beberapa menit. Jumlah bucket untuk tabel antrian append setara dengan jumlah partisi dalam topik Kafka atau jumlah shard dalam instance ApsaraMQ for MQTT. |
Penugasan bucket
Tipe tabel | Deskripsi |
Tabel scalable append | Data ditulis ke partisi tunggal secara paralel. Konsep bucket diabaikan dan urutan data tidak dipertahankan. Ini berarti data langsung didorong ke writer dan tidak diperlukan partisi hash. Oleh karena itu, jenis tabel ini memberikan performa tulis yang tinggi. Perhatikan bahwa jika operator hulu dan writer memiliki paralelisme yang sama, skew data mungkin terjadi. |
Tabel antrian append | Secara default, Paimon menetapkan catatan data ke bucket berdasarkan nilai dalam semua kolom dari catatan data tersebut. Untuk menggunakan metode yang berbeda, konfigurasikan parameter Sebagai contoh, jika Anda menentukan Catatan Kami merekomendasikan Anda menentukan parameter |
Urutan konsumsi data
Tipe tabel | Deskripsi |
Tabel scalable append | Jenis tabel ini cocok untuk skenario di mana data dapat dikonsumsi dalam urutan yang berbeda dari urutan penulisan. |
Tabel antrian append | Jenis tabel ini memastikan bahwa catatan dalam setiap bucket dikonsumsi dalam urutan penulisannya.
|
Referensi
Untuk informasi tentang cara membuat katalog Paimon dan tabel Paimon, lihat Kelola Katalog Apache Paimon.
Untuk informasi tentang cara membuat katalog Paimon dan tabel Paimon, lihat Kelola Katalog Apache Paimon.
Untuk informasi tentang cara mengoptimalkan performa tabel kunci utama di Paimon, lihat Optimasi Performa.