All Products
Search
Document Center

Realtime Compute for Apache Flink:Data Lakehouse Streaming dengan Paimon

Last Updated:Mar 12, 2026

Gunakan konektor Paimon bersama Katalog Paimon untuk hasil terbaik. Topik ini menjelaskan cara menggunakan konektor Paimon dalam skenario data lakehouse streaming.

Informasi latar belakang

Apache Paimon adalah format penyimpanan lake terpadu untuk aliran dan batch yang mendukung penulisan throughput tinggi serta kueri latensi rendah. Mesin komputasi utama di platform big data open source Alibaba Cloud E-MapReduce—termasuk Flink, Spark, Hive, dan Trino—terintegrasi secara optimal dengan Paimon. Anda dapat membangun layanan penyimpanan data lake sendiri secara cepat di HDFS atau Object Storage Service berbasis cloud, lalu menghubungkannya dengan mesin komputasi yang didukung untuk menganalisis data lake tersebut. Untuk informasi lebih lanjut, lihat Apache Paimon.

Kategori

Detail

Jenis yang didukung

Tabel sumber, tabel dimensi, dan tabel sink (target ingesti data)

Mode eksekusi

Mode streaming dan batch

Format data

Tidak didukung

Metrik pemantauan unik

Tidak ada

Jenis API

Pekerjaan ingesti data berbasis SQL dan YAML

Mendukung pembaruan atau penghapusan data di tabel sink

Ya

Fitur utama

Apache Paimon menyediakan kemampuan inti berikut:

  • Membangun layanan penyimpanan data lake ringan dan berbiaya rendah di HDFS atau Object Storage Service.

  • Membaca dan menulis dataset skala besar dalam mode streaming maupun batch.

  • Menjalankan kueri batch dan OLAP dengan freshness data dalam hitungan menit hingga detik.

  • Mengingesti dan menghasilkan data inkremental, berfungsi sebagai penyimpanan di semua lapisan gudang data offline tradisional maupun gudang data streaming modern.

  • Pre-agregasi data untuk mengurangi biaya penyimpanan dan beban komputasi downstream.

  • Rollback ke versi historis.

  • Filter data secara efisien.

  • Dukungan evolusi skema.

Batasan dan rekomendasi

  • Konektor Paimon hanya didukung pada Ververica Runtime (VVR) versi 6.0.6 dan yang lebih baru.

  • Tabel berikut menunjukkan pemetaan antara versi komunitas Paimon dan versi mesin Realtime Compute for Apache Flink (VVR).

    Versi Apache Paimon

    Versi VVR

    1.3

    11.4

    1.2

    11.2 dan 11.3

    1.1

    11

    1.0

    8.0.11

    0.9

    8.0.7, 8.0.8, 8.0.9, dan 8.0.10

    0.8

    8.0.6

    0.7

    8.0.5

    0.6

    8.0.4

    0.6

    8.0.3

  • Rekomendasi penyimpanan untuk penulisan konkuren

    Saat beberapa pekerjaan memperbarui tabel Paimon yang sama secara konkuren, penyimpanan OSS standar (oss://) dapat menyebabkan konflik commit langka atau kegagalan pekerjaan karena batasan atomicity pada operasi file.

    Untuk memastikan penulisan stabil dan berkelanjutan, gunakan metadata atau layanan penyimpanan yang menjamin atomicity kuat. Kami merekomendasikan penggunaan Data Lake Formation (DLF). DLF menyatukan manajemen metadata dan penyimpanan Paimon. Alternatifnya, gunakan OSS-HDFS atau HDFS.

  • Aktivasi Pengaturan Parameter

    Setelah mengubah parameter konfigurasi tabel Paimon, restart pekerjaan terkait agar pengaturan baru berlaku. Pekerjaan yang sedang berjalan tidak dapat mendeteksi atau memuat perubahan tersebut secara dinamis.

  • Penundaan pembersihan fisik setelah penghapusan partisi

    Saat menjalankan DROP PARTITION, sistem tidak menghapus file data fisik yang mendasari secara langsung.
    Operasi ini hanya melakukan penghapusan logis. Paimon menghapus metadata partisi dari snapshot terbaru. Karena Paimon mendukung time travel, snapshot historis tetap menyimpan referensi ke file data partisi tersebut. File fisik hanya dihapus setelah semua snapshot yang mereferensikan partisi tersebut kedaluwarsa dan dibersihkan oleh mekanisme kedaluwarsa snapshot Paimon.

SQL

Anda dapat menggunakan konektor Paimon dalam pekerjaan SQL sebagai tabel sumber atau tabel sink.

Sintaks

  • Jika Anda membuat tabel Paimon di Katalog Paimon, abaikan parameter connector. Sintaksnya sebagai berikut.

    CREATE TABLE `<YOUR-PAIMON-CATALOG>`.`<YOUR-DB>`.paimon_table (
      id BIGINT,
      data STRING,
      PRIMARY KEY (id) NOT ENFORCED
    ) WITH (
      ...
    );
    Catatan

    Jika Anda telah membuat tabel Paimon di Katalog Paimon, gunakan langsung tanpa membuat ulang.

  • Jika Anda membuat tabel temporary Paimon di katalog lain, tentukan parameter connector dan path ke file tabel Paimon. Sintaksnya sebagai berikut.

    CREATE TEMPORARY TABLE paimon_table (
      id BIGINT,
      data STRING,
      PRIMARY KEY (id) NOT ENFORCED
    ) WITH (
      'connector' = 'paimon',
      'path' = '<path-to-paimon-table-files>',
      'auto-create' = 'true', -- Membuat file secara otomatis jika path tidak berisi data tabel Paimon.
      ...
    );
    Catatan
    • Contoh path: 'path' = 'oss://<bucket>/test/order.db/orders'. Jangan menghilangkan akhiran .db. Paimon menggunakan akhiran ini untuk mengidentifikasi database.

    • Beberapa pekerjaan yang menulis ke satu tabel harus berbagi path yang sama.

    • Path yang berbeda berarti tabel yang berbeda—meskipun mengarah ke lokasi fisik yang sama. Misalnya, oss://b/test dan oss://b/test/ hanya berbeda tanda slash di akhir tetapi merujuk ke tabel yang berbeda. Ketidaksesuaian konfigurasi katalog menyebabkan konflik penulisan konkuren, kegagalan kompaksi, atau kehilangan data.

DENGAN parameter

Parameter

Deskripsi

Tipe data

Wajib

Nilai default

Catatan

connector

Jenis tabel.

String

Tidak

Tidak ada

  • Abaikan parameter ini saat membuat tabel Paimon di Katalog Paimon.

  • Atur parameter ini ke paimon saat membuat tabel temporary Paimon di katalog lain.

path

Path penyimpanan tabel.

String

Tidak

Tidak ada

  • Abaikan parameter ini saat membuat tabel Paimon di Katalog Paimon.

  • Tentukan direktori tempat tabel disimpan di HDFS atau OSS saat membuat tabel temporary Paimon di katalog lain.

auto-create

Saat membuat tabel temporary Paimon, buat file secara otomatis jika path yang ditentukan tidak berisi file tabel Paimon.

Boolean

Tidak

false

Nilai valid:

  • false (default): Mengembalikan error jika path tidak berisi file tabel Paimon.

  • true: Flink membuat file tabel Paimon secara otomatis jika path tidak ada.

file.format

Kelas penyimpanan untuk file data di tabel.

String

Tidak

parquet

Nilai valid:

  • orc

  • parquet

  • avro

  • lance (VVR 11.6 dan yang lebih baru)

bucket

Jumlah bucket per partisi.

Integer

Tidak

1

Data yang ditulis ke tabel Paimon didistribusikan ke bucket berdasarkan bucket-key.

Catatan

Kami merekomendasikan ukuran bucket tetap di bawah 5 GB.

bucket-key

Kolom kunci bucket.

String

Tidak

Tidak ada

Tentukan kolom yang nilainya menentukan bagaimana data didistribusikan ke bucket.

Pisahkan nama kolom dengan koma Inggris (,), misalnya, 'bucket-key' = 'order_id,cust_id' akan mendiskritisasi data berdasarkan nilai kolom order_id dan cust_id.

Catatan
  • Jika diabaikan, Paimon menggunakan kunci primer untuk mendistribusikan data.

  • Jika tidak ada kunci primer yang didefinisikan, Paimon menggunakan semua kolom.

changelog-producer

Mekanisme untuk menghasilkan data inkremental.

String

Tidak

none

Paimon dapat menghasilkan changelog lengkap (dengan catatan update_before dan update_after yang sesuai) untuk aliran data input apa pun. Ini membantu konsumen downstream memproses pembaruan dengan benar. Nilai valid:

  • none (default): Tidak menghasilkan catatan changelog tambahan. Konsumen downstream masih dapat membaca tabel Paimon dalam mode streaming, tetapi changelog tidak lengkap (hanya catatan update_after, tanpa catatan update_before).

  • Input: Aliran data input ditulis ganda ke file data inkremental untuk berfungsi sebagai data inkremental.

  • full-compaction: Menghasilkan changelog lengkap selama setiap full compaction.

  • lookup: Menghasilkan changelog lengkap sebelum setiap commit snapshot.

Untuk panduan memilih produsen changelog, lihat Changelog producer.

full-compaction.delta-commits

Interval maksimum antara full compaction.

Integer

Tidak

Tidak ada

Parameter ini menentukan berapa banyak commit snapshot yang terjadi sebelum full compaction dijalankan.

lookup.cache-max-memory-size

Ukuran cache memori untuk tabel dimensi Paimon.

String

Tidak

256 MB

Pengaturan ini mengontrol ukuran cache tabel dimensi dan ukuran cache produsen changelog lookup.

merge-engine

Mekanisme untuk menggabungkan baris dengan kunci primer yang sama.

String

Tidak

deduplicate

Nilai valid:

  • deduplicate: Menyimpan hanya baris terbaru.

  • Partial update: Memperbarui data yang ada dengan kunci primer yang sama menggunakan kolom non-null dari data terbaru dan membiarkan kolom lain tidak berubah.

  • aggregation: Pre-agregasi data menggunakan fungsi agregat yang ditentukan.

Untuk detail tentang mesin merge, lihat Merge engine.

partial-update.ignore-delete

Apakah mengabaikan pesan hapus (-D).

Boolean

Tidak

false

Nilai valid:

  • true: Mengabaikan pesan hapus.

  • false: Tidak mengabaikan pesan hapus. Konfigurasikan penanganan data hapus oleh sink menggunakan parameter seperti sequence.field. Jika tidak, pekerjaan mungkin melemparkan IllegalStateException atau IllegalArgumentException.

Catatan
  • Parameter ini hanya berlaku dalam skenario partial-update (merge-engine = partial-update) untuk VVR 8.0.6 dan yang lebih lama.

  • Untuk VVR 8.0.7 dan yang lebih baru, parameter ini berlaku di semua skenario dan berperilaku identik dengan parameter ignore-delete. Gunakan ignore-delete sebagai gantinya.

  • Evaluasi apakah pesan hapus sesuai dengan semantik pekerjaan yang diharapkan sebelum mengaktifkan parameter ini. Jika tidak, melemparkan error lebih aman.

ignore-delete

Apakah mengabaikan pesan hapus (-D).

Boolean

Tidak

false

Nilai valid yang sama seperti partial-update.ignore-delete.

Catatan
  • Hanya didukung di VVR 8.0.7 dan yang lebih baru.

  • Fungsional identik dengan partial-update.ignore-delete. Gunakan ignore-delete dan hindari mengonfigurasi keduanya.

partition.default-name

Nama partisi default.

String

Tidak

__DEFAULT_PARTITION__

Digunakan sebagai nama partisi saat nilai kolom partisi null atau string kosong.

partition.expiration-check-interval

Seberapa sering memeriksa partisi yang kedaluwarsa.

String

Tidak

1h

Untuk detail, lihat Cara mengonfigurasi kedaluwarsa partisi otomatis?

partition.expiration-time

Periode retensi partisi.

String

Tidak

Tidak ada

Partisi kedaluwarsa setelah durasi ini. Secara default, partisi tidak pernah kedaluwarsa.

Durasi dihitung dari nilai partisi. Untuk detail, lihat Cara mengonfigurasi kedaluwarsa partisi otomatis?

partition.timestamp-formatter

Mengonversi string waktu ke timestamp terformat.

String

Tidak

Tidak ada

Menentukan format yang digunakan untuk mengekstrak usia partisi dari nilai partisi. Untuk detail, lihat Cara mengonfigurasi kedaluwarsa partisi otomatis?

partition.timestamp-pattern

String format untuk mengonversi nilai partisi ke string timestamp.

String

Tidak

Tidak ada

Menentukan format yang digunakan untuk mengekstrak usia partisi dari nilai partisi. Untuk detail, lihat Cara mengonfigurasi kedaluwarsa partisi otomatis?

scan.bounded.watermark

Berhenti membaca dari tabel sumber Paimon saat watermark-nya melebihi nilai ini.

Long

Tidak

Tidak ada

Tidak ada.

scan.mode

Offset konsumen untuk tabel sumber Paimon.

String

Tidak

default

Untuk detail, lihat Cara mengonfigurasi offset konsumen untuk tabel sumber Paimon?

scan.snapshot-id

ID snapshot untuk mulai membaca.

Integer

Tidak

Tidak ada

Untuk detail, lihat Cara mengonfigurasi offset konsumen untuk tabel sumber Paimon?

scan.timestamp-millis

Timestamp untuk mulai membaca.

Integer

Tidak

Tidak ada

Untuk detail, lihat Cara mengonfigurasi offset konsumen untuk tabel sumber Paimon?

snapshot.num-retained.max

Jumlah maksimum snapshot terbaru yang dipertahankan.

Integer

Tidak

2147483647

Snapshot kedaluwarsa jika memenuhi batas ini atau snapshot.time-retained, dan juga memenuhi snapshot.num-retained.min.

snapshot.num-retained.min

Jumlah minimum snapshot terbaru yang dipertahankan.

Integer

Tidak

10

Tidak ada.

snapshot.time-retained

Berapa lama snapshot tetap ada sebelum kedaluwarsa.

String

Tidak

1h

Snapshot kedaluwarsa jika memenuhi batas ini atau snapshot.num-retained.max, dan juga memenuhi snapshot.num-retained.min.

write-mode

Mode penulisan untuk tabel Paimon.

String

Tidak

change-log

Nilai valid:

  • change-log: Mendukung operasi insert, delete, dan update berdasarkan kunci primer.

  • append-only: Tabel Paimon hanya menerima insert dan tidak mendukung kunci primer. Mode ini lebih efisien daripada mode change-log.

Untuk detail, lihat Write mode.

scan.infer-parallelism

Apakah inferensi paralelisme untuk tabel sumber Paimon dilakukan secara otomatis.

Boolean

Tidak

true

Nilai valid:

  • true: Inferensi paralelisme dari jumlah bucket.

  • false: Menggunakan paralelisme default yang dikonfigurasi di VVP. Dalam mode ahli, menggunakan paralelisme yang ditentukan pengguna.

scan.parallelism

Paralelisme untuk tabel sumber Paimon.

Integer

Tidak

Tidak ada

Catatan

Parameter ini tidak berpengaruh saat resource allocation mode diatur ke Mode Ahli pada tab Deployment Details > Resource Configuration.

sink.parallelism

Paralelisme untuk tabel sink Paimon.

Integer

Tidak

Tidak ada

Catatan

Parameter ini tidak berpengaruh saat resource allocation mode diatur ke Mode Ahli pada tab Deployment Details > Resource Configuration.

sink.clustering.by-columns

Kolom pengelompokan untuk tabel sink Paimon.

String

Tidak

Tidak ada

Untuk tabel append-only Paimon (tabel non-kunci-primer), konfigurasikan parameter ini dalam pekerjaan batch untuk mengaktifkan penulisan pengelompokan. Pengelompokan meningkatkan kecepatan kueri dengan mengelompokkan data berdasarkan rentang nilai pada kolom yang ditentukan.

Pisahkan nama kolom dengan koma (,). Contoh: 'col1,col2'.

Untuk detail, lihat dokumentasi Apache Paimon.

sink.delete-strategy

Strategi validasi untuk memastikan penanganan pesan retract (-D/-U) yang benar.

​​

Enum

Tidak

NONE

Strategi valid dan perilaku sink yang diperlukan:

  • NONE (default): Tidak ada validasi.

  • IGNORE_DELETE: Sink mengabaikan pesan -U dan -D dan tidak melakukan retract.

  • NON_PK_FIELD_TO_NULL: Sink mengabaikan pesan -U. Saat menerima pesan -D, sink mempertahankan kunci primer tetapi melakukan retract kolom non-kunci-primer ke null.

    Ini berguna untuk pembaruan parsial saat beberapa sink menulis ke tabel yang sama.

  • DELETE_ROW_ON_PK: Sink mengabaikan pesan -U. Saat menerima pesan -D, sink menghapus baris yang sesuai dengan kunci primer.

  • CHANGELOG_STANDARD: Sink menghapus baris yang sesuai dengan kunci primer saat menerima pesan -U dan -D.

Catatan
  • Hanya didukung di VVR 8.0.8 dan yang lebih baru.

  • Perilaku aktual tergantung pada parameter lain seperti ignore-delete dan merge-engine. Parameter ini memvalidasi apakah pengaturan tersebut sesuai dengan strategi yang Anda pilih. Jika tidak, validasi gagal dan pesan error memandu Anda untuk memperbaikinya.

Catatan

Untuk opsi konfigurasi lainnya, lihat dokumentasi Apache Paimon.

Detail fitur

Jaminan freshness dan konsistensi data

Tabel sink Paimon menggunakan protokol two-phase commit untuk melakukan commit data selama setiap checkpoint pekerjaan Flink. Oleh karena itu, freshness data sesuai dengan interval checkpoint pekerjaan Flink. Setiap commit menghasilkan hingga dua snapshot.

Saat dua pekerjaan Flink menulis secara simultan ke tabel Paimon yang sama, konsistensi serializable dijamin jika data mereka ditulis ke bucket yang berbeda. Namun, jika data mereka ditulis ke bucket yang sama, hanya konsistensi isolasi snapshot yang dapat dijamin. Artinya, data tabel mungkin merupakan campuran hasil dari kedua pekerjaan, tetapi tidak akan terjadi kehilangan data.

Mesin penggabungan

Saat tabel sink Paimon menerima beberapa baris dengan kunci primer yang sama, tabel tersebut menggabungkannya menjadi satu baris untuk menjaga keunikan. Atur parameter merge-engine untuk mengontrol cara penggabungan bekerja. Tabel berikut menjelaskan setiap opsi.

Merge engine

Detail

Deduplicate

Deduplicate adalah mesin merge default. Untuk baris dengan kunci primer yang sama, tabel sink Paimon hanya menyimpan baris terbaru dan membuang sisanya.

Catatan

Jika baris terbaru adalah pesan hapus, semua baris dengan kunci primer tersebut dibuang.

Partial update

Dengan partial update, Anda dapat memperbarui data secara inkremental melalui beberapa pesan. Baris baru dengan kunci primer yang sama menimpa yang ada, tetapi kolom null tetap tidak berubah.

Misalnya, anggap tabel sink Paimon menerima baris-baris berikut secara berurutan:

  • <1, 23.0, 10, NULL>

  • <1, NULL, NULL, 'This is a book'>

  • <1, 25.2, NULL, NULL>

Jika kolom pertama adalah kunci primer, hasil akhirnya adalah <1, 25.2, 10, 'This is a book'>.

Catatan
  • Untuk membaca hasil partial-update dalam mode streaming, Anda harus mengatur parameter changelog-producer ke lookup atau full-compaction.

  • Partial update tidak menangani pesan hapus. Atur partial-update.ignore-delete untuk mengabaikannya.

Aggregation

Dalam beberapa kasus, Anda hanya membutuhkan nilai agregat. Dengan aggregation, Paimon menggabungkan baris dengan kunci primer yang sama menggunakan fungsi agregat yang Anda tentukan. Untuk setiap kolom non-kunci-primer, definisikan fungsi agregat menggunakan fields.<field-name>.aggregate-function. Jika tidak, Paimon menggunakan last_non_null_value. Contohnya:

CREATE TABLE MyTable (
  product_id BIGINT,
  price DOUBLE,
  sales BIGINT,
  PRIMARY KEY (product_id) NOT ENFORCED
) WITH (
  'merge-engine' = 'aggregation',
  'fields.price.aggregate-function' = 'max',
  'fields.sales.aggregate-function' = 'sum'
);

Kolom price melakukan agregasi menggunakan max; sales menggunakan sum. Diberikan input <1, 23.0, 15> dan <1, 30.2, 20>, hasilnya adalah <1, 30.2, 35>. Fungsi agregat dan tipe data yang didukung:

  • sum: DECIMAL, TINYINT, SMALLINT, INTEGER, BIGINT, FLOAT, DOUBLE

  • min dan max: DECIMAL, TINYINT, SMALLINT, INTEGER, BIGINT, FLOAT, DOUBLE, DATE, TIME, TIMESTAMP, TIMESTAMP_LTZ

  • last_value dan last_non_null_value: Semua tipe

  • listagg: STRING

  • bool_and dan bool_or: BOOLEAN

Catatan
  • Hanya sum yang mendukung operasi retract dan delete. Fungsi lain tidak. Untuk mengabaikan retract untuk kolom tertentu, atur 'fields.${field_name}.ignore-retract'='true'.

  • Untuk membaca hasil agregasi dalam mode streaming, Anda harus mengatur parameter changelog-producer ke lookup atau full-compaction.

Mekanisme generasi data inkremental

Atur parameter changelog-producer untuk menghasilkan changelog lengkap (dengan catatan update_before dan update_after yang sesuai) untuk aliran data input apa pun. Tabel berikut mencantumkan semua produsen changelog yang tersedia. Untuk detail lebih lanjut, lihat dokumentasi Apache Paimon.

Mekanisme

Detail

None

Saat changelog-producer diatur ke `none` (nilai default), tabel sumber Paimon downstream hanya dapat melihat status terbaru data untuk kunci primer yang sama. Namun, status terbaru ini tidak memberikan konsumen downstream data inkremental lengkap yang diperlukan untuk perhitungan yang benar. Ini karena konsumen hanya dapat menentukan apakah data yang sesuai dihapus atau apa data terbarunya, tetapi tidak dapat mengetahui data sebelum perubahan.

Misalnya, anggap konsumen downstream menghitung jumlah suatu kolom. Jika hanya melihat nilai terbaru 5, konsumen tidak dapat memutuskan cara memperbarui jumlah tersebut. Jika nilai sebelumnya 4, konsumen harus menambahkan 1. Jika 6, konsumen harus mengurangi 1. Konsumen yang sensitif terhadap data update_before harus menghindari none. Namun, produsen lain menimbulkan overhead performa.

Catatan

Jika konsumen downstream Anda—seperti database—tidak memerlukan data update_before, none dapat diterima. Pilih berdasarkan kebutuhan Anda.

Input

Atur changelog-producer ke input, dan tabel sink Paimon menulis aliran data input dua kali ke file data inkremental sebagai data inkremental.

Oleh karena itu, gunakan ini hanya saat aliran input itu sendiri merupakan changelog lengkap—seperti data CDC.

Lookup

Saat Anda mengatur changelog-producer ke `lookup`, tabel sink Paimon menggunakan mekanisme kueri titik yang mirip dengan tabel dimensi untuk menghasilkan data inkremental lengkap untuk snapshot saat ini sebelum setiap snapshot di-commit. Mekanisme ini dapat menghasilkan data inkremental lengkap terlepas dari apakah data input sudah lengkap.

Dibandingkan Full Compaction, Lookup memberikan changelog yang lebih segar tetapi mengonsumsi lebih banyak sumber daya.

Kami merekomendasikan fitur ini untuk data inkremental yang memerlukan freshness tinggi, seperti pembaruan tingkat menit.

Full Compaction

Setelah Anda mengatur changelog-producer ke `full-compaction`, tabel sink Paimon menghasilkan data inkremental lengkap selama setiap full compaction. Mekanisme ini menghasilkan data inkremental lengkap terlepas dari apakah data input sudah merupakan data inkremental lengkap. Interval full compaction ditentukan oleh parameter full-compaction.delta-commits.

Dibandingkan Lookup, Full Compaction memberikan changelog yang kurang segar tetapi menggunakan lebih sedikit sumber daya karena memanfaatkan pekerjaan kompaksi yang sudah ada.

Pendekatan ini direkomendasikan saat persyaratan freshness untuk data inkremental tidak ketat, seperti saat pembaruan per jam dapat diterima.

Mode penulisan

Tabel Paimon mendukung mode penulisan berikut.

Mode

Detail

Change-log

Change-log adalah mode penulisan default. Mode ini mendukung operasi insert, delete, dan update berdasarkan kunci primer. Anda juga dapat menggunakan mesin merge dan produsen changelog dengan mode ini.

Append-only

Mode append-only hanya mendukung insert dan tidak menggunakan kunci primer. Mode ini lebih efisien daripada mode change-log. Gunakan sebagai alternatif antrian pesan saat freshness data moderat dapat diterima—seperti tingkat menit.

Untuk detail, lihat dokumentasi Apache Paimon. Saat menggunakan mode append-only, perhatikan hal berikut:

  • Atur parameter bucket-key sesuai kebutuhan Anda. Jika tidak, Paimon mendistribusikan data ke bucket menggunakan semua kolom, yang mengurangi efisiensi komputasi.

  • Mode append-only mempertahankan urutan output sampai batas tertentu. Urutan output ditentukan sebagai berikut:

    1. Jika dua baris termasuk partisi berbeda, baris dari partisi dengan nilai partisi lebih kecil muncul lebih dulu—jika scan.plan-sort-partition diatur. Jika tidak, baris dari partisi yang dibuat lebih awal muncul lebih dulu.

    2. Jika dua baris termasuk partisi dan bucket yang sama, baris yang ditulis lebih awal muncul lebih dulu.

    3. Jika dua baris termasuk partisi yang sama tetapi bucket berbeda, urutan output tidak dijamin karena bucket diproses oleh thread terpisah.

Target untuk CTAS dan CDAS

Tabel Paimon mendukung sinkronisasi real-time tabel tunggal atau seluruh database. Perubahan skema di tabel upstream disinkronkan ke tabel Paimon secara real-time. Untuk detail, lihat Kelola tabel Paimon dan Kelola Katalog Paimon.

Ingesti Data

Anda dapat menggunakan konektor Paimon dalam pekerjaan ingesti data berbasis YAML sebagai sink.

Sintaks

sink:
  type: paimon
  name: Paimon Sink
  catalog.properties.metastore: filesystem
  catalog.properties.warehouse: /path/warehouse

Opsi konfigurasi

Parameter

Deskripsi

Wajib

Tipe data

Nilai default

Catatan

type

Jenis konektor.

Ya

STRING

Tidak ada

Nilai tetap: paimon.

name

Nama sink.

Tidak

STRING

Tidak ada

Nama sink.

catalog.properties.metastore

Jenis Katalog Paimon.

Tidak

STRING

filesystem

Nilai valid:

  • filesystem (default)

  • rest (hanya mendukung DLF, bukan DLF-Legacy)

catalog.properties.*

Parameter untuk membuat Katalog Paimon.

Tidak

STRING

Tidak ada

Untuk detail, lihat Kelola Katalog Paimon.

table.properties.*

Parameter untuk membuat tabel Paimon.

Tidak

STRING

Tidak ada

Untuk detail, lihat Opsi tabel Paimon.

catalog.properties.warehouse

Direktori root untuk penyimpanan file.

Tidak

STRING

Tidak ada

Parameter ini hanya berlaku saat catalog.properties.metastore diatur ke filesystem.

commit.user-prefix

Awalan username yang digunakan saat melakukan commit file data.

Tidak

STRING

Tidak ada

Catatan

Gunakan username berbeda untuk pekerjaan berbeda untuk membantu mengidentifikasi pekerjaan yang bertentangan selama kegagalan commit.

partition.key

Bidang partisi untuk setiap tabel partisi.

Tidak

STRING

Tidak ada

Tabel berbeda dipisahkan dengan ;, bidang berbeda dipisahkan dengan ,, dan tabel serta bidang dipisahkan dengan :. Contoh: testdb.table1:id1,id2;testdb.table2:name.

sink.cross-partition-upsert.tables

Tabel yang memerlukan upsert lintas partisi (kunci primer tidak mencakup semua bidang partisi).

Tidak

STRING

Tidak ada

Berlaku untuk tabel yang memerlukan upsert lintas partisi.

  • Format: Pisahkan nama tabel dengan titik koma ;.

  • Kiat performa: Operasi ini mengonsumsi sumber daya komputasi signifikan. Buat pekerjaan khusus untuk tabel-tabel ini.

Penting
  • Cantumkan semua tabel yang memenuhi syarat. Mengabaikan tabel menyebabkan data duplikat.

sink.commit.parallelism

Paralelisme untuk operator commit.

Tidak

INTEGER

Tidak ada

Tingkatkan nilai ini untuk meningkatkan performa saat operator commit menjadi bottleneck.

Hanya didukung di VVR 11.6 dan yang lebih baru.

Catatan

Mengatur parameter ini mengubah paralelisme operator. Saat merestart pekerjaan stateful, aktifkan AllowNonRestoredState.

Contoh penggunaan

Konfigurasikan konektor Paimon sebagai sink ingesti data berdasarkan jenis Katalog Paimon Anda.

  • Contoh konfigurasi untuk Katalog Paimon sebagai filesystem, menulis ke OSS Alibaba Cloud:

    source:
      type: mysql
      name: MySQL Source
      hostname: ${secret_values.mysql.hostname}
      port: ${mysql.port}
      username: ${secret_values.mysql.username}
      password: ${secret_values.mysql.password}
      tables: ${mysql.source.table}
      server-id: 8601-8604
    
    sink:
      type: paimon
      name: Paimon Sink
      catalog.properties.metastore: filesystem
      catalog.properties.warehouse: oss://default/test
      catalog.properties.fs.oss.endpoint: oss-cn-beijing-internal.aliyuncs.com
      catalog.properties.fs.oss.accessKeyId: xxxxxxxx
      catalog.properties.fs.oss.accessKeySecret: xxxxxxxx

    Untuk makna parameter yang diawali catalog.properties, lihat Buat Katalog Filesystem Paimon.

  • Contoh: Katalog REST menulis ke Data Lake Formation Alibaba Cloud.

    source:
      type: mysql
      name: MySQL Source
      hostname: ${secret_values.mysql.hostname}
      port: ${mysql.port}
      username: ${secret_values.mysql.username}
      password: ${secret_values.mysql.password}
      tables: ${mysql.source.table}
      server-id: 8601-8604
    
    sink:
      type: paimon
      name: Paimon Sink
      catalog.properties.metastore: rest
      catalog.properties.uri: dlf_uri
      catalog.properties.warehouse: your_warehouse
      catalog.properties.token.provider: dlf
      # (Opsional) Aktifkan deletion vectors untuk meningkatkan performa baca.
      table.properties.deletion-vectors.enabled: true

    Untuk makna parameter yang diawali catalog.properties, lihat Parameter konfigurasi katalog Flink CDC.

Evolusi skema

Paimon mendukung peristiwa evolusi skema berikut saat digunakan sebagai sink ingesti data:

  • CREATE TABLE EVENT

  • ADD COLUMN EVENT

  • ALTER COLUMN TYPE EVENT (tidak mendukung perubahan tipe kolom kunci primer)

  • RENAME COLUMN EVENT

  • DROP COLUMN EVENT

  • TRUNCATE TABLE EVENT

  • DROP TABLE EVENT

Catatan

Jika tabel Paimon downstream sudah ada, Paimon menggunakan skema yang ada untuk penulisan dan tidak mencoba membuat ulang tabel.

FAQ