全部产品
Search
文档中心

Realtime Compute for Apache Flink:Tabel kunci utama dan tabel append-only

更新时间:Jul 02, 2025

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 bucket kosong atau menentukan 'bucket' = '-1' dalam klausa WITH saat Anda membuat tabel kunci utama, mode bucket dinamis digunakan.

  • Dalam mode ini, tabel kunci utama tidak mendukung penulisan bersamaan oleh beberapa penerapan Flink.

  • Dalam mode ini, tabel kunci utama mendukung pembaruan lintas partisi berdasarkan kunci utama.

Mode bucket tetap

Jika Anda menentukan 'bucket' = '<num>' dalam klausa WITH saat Anda membuat tabel kunci utama, mode bucket tetap digunakan. Jika tabel tidak dipartisi, <num> menentukan jumlah bucket yang digunakan untuk seluruh tabel. Jika tabel dipartisi, <num> menentukan jumlah bucket yang digunakan untuk setiap partisi. Nilai <num> harus berupa bilangan bulat lebih besar dari 0.

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:

  • deduplicate: menghapus catatan data yang ada dan menyisipkan catatan data baru ke partisi yang ditentukan.

  • aggregation atau partial-update: memperbarui catatan data yang ada di partisi saat ini.

  • first-row: mempertahankan catatan data yang ada dan membuang catatan data baru.

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:

  • dynamic-bucket.target-row-num: jumlah maksimum catatan data yang dapat disimpan dalam sebuah bucket. Nilai default: 2000000.

  • dynamic-bucket.initial-buckets: jumlah awal bucket. Jika Anda membiarkan parameter ini kosong, paralelisme operator writer digunakan.

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 bucket-key dalam klausa WITH saat Anda membuat tabel kunci utama. Pisahkan beberapa kolom dengan koma (,). Pastikan bahwa kolom yang ditentukan dalam parameter bucket-key termasuk dalam kunci utama. Sebagai contoh, jika Anda menentukan 'bucket-key' = 'c1,c2', Paimon menentukan bucket dari catatan data berdasarkan nilai dalam kolom c1 dan c2 dari catatan data tersebut.

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:

  1. Jeda semua penerapan yang menulis data ke atau mengonsumsi data dari tabel.

  2. Buat skrip dan jalankan pernyataan SQL berikut untuk mengonfigurasi parameter bucket:

    ALTER TABLE `<catalog-name>`.`<database-name>`.`<table-name>` SET ('bucket' = '<bucket-num>');
  3. 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 = 08 menentukan 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';
  4. 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 'full-compaction.delta-commits' = '<num>' dalam klausa WITH. Ini memungkinkan Paimon melakukan kompaksi penuh file kecil setelah sejumlah (<num>) titik pemeriksaan Flink tertentu. Perhatikan bahwa kompaksi penuh sangat intensif sumber daya. Kami merekomendasikan Anda menetapkan interval kompaksi penuh ke nilai dari 30 menit hingga 1 jam.

Catatan

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:

deduplicate (default)

Jika Anda menentukan 'merge-engine' = 'deduplicate', Paimon hanya mempertahankan catatan data terbaru dan membuang catatan data lain yang memiliki kunci utama yang sama. Jika catatan data terbaru adalah catatan DELETE, semua catatan data yang memiliki kunci utama yang sama dihapus. Dalam contoh ini, pernyataan Data Definition Language (DDL) berikut digunakan untuk membuat tabel Paimon.

CREATE TABLE T (
  k INT,
  v1 DOUBLE,
  v2 STRING,
  PRIMARY KEY (k) NOT ENFORCED
) WITH (
  'merge-engine'='deduplicate' -- Konfigurasi ini opsional karena deduplicate adalah nilai default.
);
  • Jika +I(1, 2.0, 'apple'), +I(1, 4.0, 'banana'), dan +I(1, 8.0, 'cherry') ditulis ke tabel secara berurutan, hasil dari query SELECT * FROM T WHERE k = 1 adalah (1, 8.0, 'cherry').

  • Jika +I(1, 2.0, 'apple'), +I(1, 4.0, 'banana'), dan -D(1, 4.0, 'banana') ditulis ke tabel secara berurutan, tidak ada data yang diambil untuk query SELECT * FROM T WHERE k = 1.

first-row

Jika Anda menentukan 'merge-engine' = 'first-row', Paimon hanya mempertahankan catatan data pertama dalam kasus di mana beberapa catatan memiliki kunci utama yang sama. Dibandingkan dengan mesin deduplicate, mesin first-row hanya menghasilkan changelog tipe INSERT, yang meningkatkan efisiensi produksi changelog.

Catatan
  • Untuk memungkinkan konsumsi data dalam mode streaming, atur parameter changelog-producer ke lookup.

  • Mesin first-row tidak dapat memproses perubahan DELETE dan UPDATE_BEFORE. Untuk mengabaikannya, tentukan 'first-row.ignore-delete' = 'true'.

  • Mesin first-row tidak mendukung bidang urutan.

Dalam contoh ini, pernyataan DDL berikut digunakan untuk membuat tabel Paimon.

CREATE TABLE T (
  k INT,
  v1 DOUBLE,
  v2 STRING,
  PRIMARY KEY (k) NOT ENFORCED
) WITH (
  'merge-engine' = 'first-row'
);

Jika +I(1, 2.0, 'apple'), +I(1, 4.0, 'banana'), dan +I(1, 8.0, 'cherry') ditulis ke tabel secara berurutan, hasil dari query SELECT * FROM T WHERE k = 1 adalah (1, 2.0, 'apple').

aggregation

Paimon menggabungkan setiap kolom dalam catatan data yang memiliki kunci utama yang sama berdasarkan fungsi agregat yang ditentukan. Gunakan fields.<field-name>.aggregate-function untuk menentukan fungsi agregat untuk setiap kolom yang tidak termasuk dalam kunci utama. Jika tidak, fungsi agregat last_non_null_value digunakan.

Catatan

Untuk memungkinkan konsumsi data dalam mode streaming, atur parameter changelog-producer ke lookup atau full-compaction.

Dalam contoh berikut, kolom harga diagregasi menggunakan fungsi max, dan kolom penjualan diagregasi menggunakan fungsi sum.

CREATE TABLE T (
  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'
);

Jika +I(1, 23.0, 15) dan +I(1, 30.2, 20) ditulis ke tabel secara berurutan, hasil dari query SELECT * FROM T WHERE product_id = 1 adalah (1, 30.2, 35).

Daftar berikut menjelaskan fungsi agregat yang didukung dan tipe data:

  • sum: mendukung DECIMAL, TINYINT, SMALLINT, INTEGER, BIGINT, FLOAT, dan DOUBLE.

  • product: mendukung DECIMAL, TINYINT, SMALLINT, INTEGER, BIGINT, FLOAT, dan DOUBLE.

  • count: mendukung INTEGER dan BIGINT.

  • max atau min: mendukung CHAR, VARCHAR, DECIMAL, TINYINT, SMALLINT, INTEGER, BIGINT, FLOAT, DOUBLE, DATE, TIME, TIMESTAMP, dan TIMESTAMP_LTZ.

  • first_value atau last_value: mendukung semua tipe data, termasuk null.

  • first_not_null_value dan last_non_null_value: mendukung semua tipe data.

  • listagg: mendukung STRING.

  • bool_and dan bool_or: BOOLEAN

Catatan

Dalam fungsi agregat di atas, hanya sum, product, dan count yang mendukung perubahan retraksi (perubahan UPDATE_BEFORE dan DELETE). Untuk mengabaikan perubahan retraksi untuk kolom, tentukan 'fields.<field-name>.ignore-retract' = 'true' dan ganti <field-name> dengan nama kolom.

partial-update

Jika Anda menentukan 'merge-engine' = 'partial-update', Anda dapat memperbarui kolom dalam catatan data yang ada secara bertahap dengan menggunakan nilai terbaru dari catatan yang memiliki kunci utama yang sama. Nilai null tidak akan menimpa nilai yang ada.

Catatan
  • Untuk memungkinkan konsumsi data dalam mode streaming, atur parameter changelog-producer ke lookup atau full-compaction.

  • Mesin partial-update tidak dapat memproses perubahan DELETE dan UPDATE_BEFORE. Untuk mengabaikan perubahan ini, tentukan 'partial-update.ignore-delete' = 'true'.

Dalam contoh ini, pernyataan DDL berikut digunakan untuk membuat tabel Paimon.

CREATE TABLE T (
  k INT,
  v1 DOUBLE,
  v2 BIGINT,
  v3 STRING,
  PRIMARY KEY (k) NOT ENFORCED
) WITH (
  'merge-engine' = 'partial-update'
);

Jika +I(1, 23.0, 10, NULL), +I(1, NULL, NULL, 'This is a book'), dan +I(1, 25.2, NULL, NULL) ditulis ke tabel secara berurutan, hasil dari query SELECT * FROM T WHERE k = 1 adalah (1, 25.2, 10, 'This is a book').Anda juga dapat menentukan parameter terkait grup urutan dan fungsi agregat dalam klausa WITH.

Anda juga dapat menentukan parameter terkait grup urutan dan fungsi agregat di dalam klausa WITH.

  • Gunakan grup urutan untuk menentukan urutan penggabungan

    Jika Anda menggabungkan kolom dari tabel yang berbeda untuk membuat tabel lebar, Anda dapat menggunakan grup urutan untuk menentukan urutan partial-update dari kolom yang berbeda untuk menangani catatan data yang tidak berurutan.

    Dalam contoh berikut, kolom a dan b diperbarui dalam urutan menaik dari nilai dalam kolom g_1, dan kolom c dan d diperbarui dalam urutan menaik dari nilai dalam kolom g_2.

    CREATE TABLE T (
      k INT,
      a STRING,
      b STRING,
      g_1 INT,
      c STRING,
      d STRING,
      g_2 INT,
      PRIMARY KEY (k) NOT ENFORCED
    ) WITH (
      'merge-engine' = 'partial-update',
      'fields.g_1.sequence-group' = 'a,b',
      'fields.g_2.sequence-group' = 'c,d'
    );
  • Gunakan grup urutan dan fungsi agregat bersama-sama

    Anda juga dapat menentukan fields.<field-name>.aggregate-function dalam klausa WITH untuk menerapkan fungsi agregat pada kolom yang ditentukan oleh <field-name>. Kolom yang ditentukan oleh <field-name> harus termasuk dalam grup urutan. Anda dapat menggunakan semua fungsi agregat yang didukung oleh mesin agregasi.

    Dalam contoh berikut, kolom a dan b diperbarui dalam urutan menaik dari nilai dalam kolom g_1. Hasil akhir berisi nilai non-null terbaru dalam kolom a dan nilai maksimum dalam kolom b. Kolom c dan d diperbarui dalam urutan menaik dari nilai dalam kolom g_2. Hasil akhir berisi nilai non-null terbaru dalam kolom c dan jumlah nilai dalam kolom b.

    CREATE TABLE T (
      k INT,
      a STRING,
      b INT,
      g_1 INT,
      c STRING,
      d INT,
      g_2 INT,
      PRIMARY KEY (k) NOT ENFORCED
    ) WITH (
      'merge-engine' = 'partial-update',
      'fields.g_1.sequence-group' = 'a,b',
      'fields.b.aggregate-function' = 'max',
      'fields.g_2.sequence-group' = 'c,d',
      'fields.d.aggregate-function' = 'sum'
    );

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.

Catatan

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 'bucket' = '-1' dalam klausa WITH saat Anda membuat tabel append-only, tabel tersebut adalah tabel scalable append.

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 'bucket' = '<num>' dalam klausa WITH saat Anda membuat tabel append-only, tabel tersebut adalah tabel antrian append.

Nilai <num> harus berupa bilangan bulat lebih besar dari 0, yang menentukan jumlah bucket yang digunakan untuk tabel tanpa partisi, atau jumlah bucket yang digunakan untuk setiap partisi dalam tabel berpartisi.

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 bucket-key dalam klausa WITH saat Anda membuat tabel antrian append. Pisahkan beberapa kolom dengan koma (,).

Sebagai contoh, jika Anda menentukan 'bucket-key' = 'c1,c2', Paimon menentukan bucket dari catatan data berdasarkan nilai dalam kolom c1 dan c2 dari catatan data tersebut.

Catatan

Kami merekomendasikan Anda menentukan parameter bucket-key. Ini mengurangi jumlah komputasi selama penugasan bucket dan meningkatkan efisiensi penulisan.

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.

  • Untuk dua catatan dari partisi yang berbeda:

    • Jika Anda menentukan 'scan.plan-sort-partition' = 'true', catatan yang memiliki nilai partisi lebih kecil dikonsumsi terlebih dahulu.

    • Jika tidak, catatan yang memiliki waktu pembuatan partisi lebih awal dikonsumsi terlebih dahulu.

  • Untuk dua catatan dari partisi yang sama dan bucket yang sama, catatan yang ditulis terlebih dahulu dikonsumsi terlebih dahulu.

  • Untuk dua catatan dari partisi yang sama tetapi bucket yang berbeda, urutan konsumsi tidak dijamin karena bucket yang berbeda mungkin diproses secara bersamaan oleh penerapan Flink yang berbeda.

Referensi

Untuk informasi tentang cara membuat katalog Paimon dan tabel Paimon, lihat Kelola Katalog Apache Paimon.