Tüm Ürünler
Search
Belge Merkezi

Realtime Compute for Apache Flink:Paimon connector

Son Güncelleme:Oct 04, 2026

Bu konu, akış veri göl evi için Paimon connector'ın nasıl kullanılacağını açıklar. En iyi sonuçlar için connector'ı Paimon Catalog ile birlikte kullanmanızı öneririz.

Arka plan bilgileri

Apache Paimon, yüksek aktarım hızında yazma ve düşük gecikme süresinde sorgu desteği sunan birleşik akış ve toplu iş veri gölü depolama biçimidir. Paimon, Alibaba Cloud E-MapReduce'ta bulunan Flink, Spark, Hive ve Trino gibi popüler hesaplama motorlarıyla iyi entegre olur. Apache Paimon'u kullanarak HDFS veya OSS üzerinde hızlıca bir veri gölü oluşturabilir ve bu hesaplama motorlarına bağlanarak veri gölü analitiği gerçekleştirebilirsiniz. Daha fazla bilgi için bkz. Apache Paimon.

Kategori

Açıklama

Desteklenen türler

Kaynak tablo, boyut tablosu, sonuç tablosu ve veri alımı hedefi

Çalışma modu

Akış modu ve toplu iş modu

Veri biçimi

Desteklenmiyor

İzleme ölçümleri

Yok

API türleri

Veri alımı için SQL ve YAML

Sonuç tablolarında güncelleme ve silme

Evet

Temel özellikler

Apache Paimon aşağıdaki temel yetenekleri sağlar:

  • HDFS veya nesne depolama üzerinde hafif, düşük maliyetli bir veri gölü oluşturun.

  • Büyük ölçekli veri kümelerini hem akış hem de toplu iş modlarında okuyun ve yazın.

  • Veri tazelikleri dakikalardan saniyelere inen toplu iş ve OLAP sorguları çalıştırın.

  • Artımlı verileri alıp üretin; hem geleneksel çevrimdışı hem de modern akış veri ambarları için depolama katmanı olarak hizmet edin.

  • Depolama maliyetlerini ve aşağı yönlü hesaplama yükünü azaltmak için verileri önceden toplayın.

  • Verilerin önceki sürümlerine erişin.

  • Verileri verimli bir şekilde filtreleyin.

  • Şema evrimini etkinleştirin.

Sınırlamalar ve öneriler

  • Paimon connector, Flink hesaplama motoru VVR 6.0.6 veya sonraki bir sürümü gerektirir.

  • Aşağıdaki tabloda Paimon ile VVR arasındaki sürüm uyumluluğu listelenmiştir.

    Apache Paimon sürümü

    VVR

    1.3.1

    11.5, 11.6, 11.7, 11.8

    1,3

    11,4

    1,2

    11.2, 11.3

    1,1

    11,1

    1,0

    8.0.11

  • Eşzamanlı yazmalar için depolama önerileri

    Birden çok iş aynı Paimon tablosuna eşzamanlı yazma yaptığında, standart OSS depolama (oss://) kullanmak atomik dosya işlemlerindeki sınırlamalar nedeniyle zaman zaman commit çakışmalarına veya iş hatalarına neden olabilir.

    Kararlı ve tutarlı yazmalar için güçlü atomik garantiler sağlayan bir meta veri veya depolama hizmeti kullanın. Tercih edilen seçenek, Paimon meta verileri ve depolamasının birleşik yönetimini sunan Data Lake Formation (DLF) hizmetidir. Alternatif olarak OSS-HDFS veya HDFS kullanabilirsiniz.

  • Yapılandırma değişikliklerinin etkili olma şekli

    Paimon tablosunun yapılandırma parametrelerinde yapılan değişiklikler, yalnızca ilgili işleri yeniden başlattığınızda etkili olur. Çalışan işler bu değişiklikleri dinamik olarak yüklemez.

  • Silinen bölümlerin fiziksel olarak geç temizlenmesi

    DROP PARTITION işlemi çalıştırdığınızda sistem altta yatan fiziksel veri dosyalarını hemen silmez.
    Bu işlem mantıksal bir silme gerçekleştirir. Paimon, hedef bölümün meta verilerini yalnızca en son anlık görüntüden kaldırır. Paimon time travel özelliğini desteklediğinden, önceki anlık görüntüler hala o bölümün veri dosyalarına referans verir. Fiziksel veri dosyaları, ancak bölüme referans veren tüm önceki anlık görüntüler saklama sınırına ulaştığında ve anlık görüntü süresi dolma mekanizması tarafından temizlendiğinde kalıcı olarak silinir.

SQL

SQL işlerinde kaynak tablo veya sonuç tablosu olarak Paimon connector'ı kullanın.

Sözdizimi

  • Bir Paimon Catalog içinde Paimon tablosu oluşturursanız connector parametresini belirtmeniz gerekmez. Sözdizimi şu şekildedir:

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

    Paimon Catalog'ta zaten bir Paimon tablosu oluşturduysanız bunu doğrudan kullanabilirsiniz.

  • Başka bir Catalog'ta geçici Paimon tablosu oluşturursanız 'connector' ve 'path' parametrelerini belirtmeniz gerekir. Sözdizimi şu şekildedir:

    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', -- If Paimon table data files do not exist at the specified path, they are automatically created.
      ...
    );
    Not
    • Yol örneği: 'path' = 'oss://<bucket>/test/order.db/orders'. .db son ekini atlamayın. Paimon veritabanını tanımlamak için bu son eke dayanır.

    • Aynı tabloya yazan birden çok iş aynı yol yapılandırmasını paylaşmalıdır.

    • İki yol yapılandırması farklıysa Paimon bunları aynı tablo olarak tanımaz. Fiziksel yol aynı olsa bile tutarsız Catalog yapılandırmaları eşzamanlı yazma çakışmalarına, sıkıştırma işlemlerinin başarısız olmasına ve veri kaybına yol açabilir. Örneğin, Paimon sondaki eğik çizgi nedeniyle oss://b/test ve oss://b/test/ yollarını farklı tablolar olarak kabul eder; oysa bu yollar aynı fiziksel konumu işaret edebilir.

WITH parametreleri

Parametre

Açıklama

Tür

Gerekli

Varsayılan

Açıklamalar

connector

Tablo için kullanılan bağlayıcıyı belirtir.

String

Hayır

Yok

  • Bir Paimon kataloğunda Paimon tablosu oluşturuyorsanız bu parametre gerekli değildir.

  • Başka bir katalogda geçici bir Paimon tablosu oluşturuyorsanız bu parametrenin değeri paimon olarak ayarlanmalıdır.

path

Tablonun depolama yoludur.

String

Hayır

Yok

  • Bir Paimon kataloğunda Paimon tablosu oluşturuyorsanız bu parametre gerekli değildir.

  • Başka bir katalogda geçici bir Paimon tablosu oluşturuyorsanız bu parametre, tablonun HDFS veya OSS üzerindeki depolama dizinini belirtir.

auto-create

Belirtilen yolda tablo dosyaları yoksa otomatik olarak oluşturulup oluşturulmayacağını belirtir.

Boolean

Hayır

false

Geçerli değerler:

  • false (varsayılan): Belirtilen yolda Paimon tablo dosyaları yoksa iş başarısız olur.

  • true: Belirtilen yol yoksa Flink Paimon tablo dosyalarını otomatik olarak oluşturur.

file.format

Veri dosyalarının biçimidir.

String

Hayır

parquet

Geçerli değerler:

  • orc

  • parquet

  • avro

  • lance (Realtime Compute for Apache Flink 11.6 ve sonraki sürümlerde desteklenir)

  • mosaic (Realtime Compute for Apache Flink 11.9 ve sonraki sürümlerde desteklenir)

bucket

Bölüm başına paket sayısıdır.

Integer

Hayır

1

Paimon, verileri bucket-key parametresine göre paketlere dağıtır.

Not

Her pakette 5 GB'dan az veri bulunmasını öneririz.

bucket-key

Paket anahtarı olarak kullanılan sütun(lar)dır.

String

Hayır

Yok

Verilerin paketlere nasıl dağıtılacağını belirleyen sütunları belirtir.

Birden fazla sütun adını virgülle (,) ayırın. Örneğin, 'bucket-key' = 'order_id,cust_id' ifadesi verileri order_id ve cust_id sütunlarına göre dağıtır.

Not
  • Bu parametre belirtilmezse Paimon verileri birincil anahtara göre dağıtır.

  • Tabloda birincil anahtar yoksa Paimon verileri tüm sütunların değerlerine göre dağıtır.

changelog-producer

Değişiklik günlüğü üretim mekanizmasıdır.

String

Hayır

none

Paimon, herhangi bir giriş akışı için eksiksiz bir değişiklik günlüğü üretebilir; bu, her update_after kaydının karşılık gelen bir update_before kaydına sahip olduğu anlamına gelir. Bu durum aşağı akış tüketimini basitleştirir. Geçerli değerler:

  • none (varsayılan): Ekstra bir değişiklik günlüğü üretilmez. Aşağı akış tüketicileri Paimon tablosunu akış modunda okumaya devam edebilir ancak değişiklik günlüğü eksiktir (yalnızca karşılık gelen update_before kayıtları olmadan update_after kayıtları içerir).

  • input: Giriş akışını, eksiksiz değişiklik günlüğü olarak görev yapan değişiklik günlüğü dosyalarına yazar.

  • full-compaction: Her tam sıkıştırma sırasında eksiksiz bir değişiklik günlüğü üretir.

  • lookup: Her anlık görüntü işlenmeden önce eksiksiz bir değişiklik günlüğü üretir.

Değişiklik günlüğü üreticisinin nasıl seçileceği hakkında daha fazla bilgi için bkz. Değişiklik Günlüğü Üretimi.

full-compaction.delta-commits

Art arda gelen iki tam sıkıştırma arasındaki maksimum işlem sayısıdır.

Integer

Hayır

Yok

Tam sıkıştırma tetiklenmeden önce izin verilen maksimum anlık görüntü işlem sayısını belirtir.

lookup.cache-max-memory-size

Paimon boyut tablosu için bellek önbelleği boyutudur.

String

Hayır

256 MB

Bu parametre, hem boyut tablosu aramaları hem de lookup değişiklik günlüğü üreticisi için önbellek boyutunu kontrol eder.

merge-engine

Aynı birincil anahtara sahip kayıtları birleştirme mekanizmasıdır.

String

Hayır

deduplicate

Geçerli değerler:

  • deduplicate: Yalnızca en son kaydı tutar.

  • partial-update: Mevcut kaydı, en son kayıttaki null olmayan değerlerle günceller. Diğer sütunlar değişmez.

  • aggregation: Belirtilen toplama işlevlerini kullanarak ön toplama gerçekleştirir.

Birleştirme motorlarının ayrıntılı analizi için bkz. Birleştirme Motoru.

partial-update.ignore-delete

Silme (-D) mesajlarının yoksayılıp yoksayılmayacağını belirtir.

Boolean

Hayır

false

Geçerli değerler:

  • true: Silme mesajlarını yoksayar.

  • false: Silme mesajlarını işler. Olası IllegalStateException veya IllegalArgumentException hatalarını önlemek için sequence.field gibi parametreleri kullanarak silmeleri işleme stratejisi yapılandırmanız gerekir.

Not
  • Realtime Compute for Apache Flink 8.0.6 ve önceki sürümlerde bu parametre yalnızca merge-engine = 'partial-update' olan kısmi güncelleme senaryolarında etkili olur.

  • Realtime Compute for Apache Flink 8.0.7 ve sonraki sürümlerde bu parametre kısmi güncelleme dışı senaryolarla da uyumludur ve ignore-delete parametresiyle aynı işleve sahiptir. Bunun yerine ignore-delete kullanmanızı öneririz.

  • Bu parametreyi etkinleştirip etkinleştirmeyeceğinize iş gereksinimlerinize ve silme mesajlarının beklenip beklenmediğine göre karar verin. Silme mesajları işinizin amaçlanan anlambilimiyle eşleşmiyorsa hızlı hata almak genellikle daha iyi bir seçimdir.

ignore-delete

Silme (-D) mesajlarının yoksayılıp yoksayılmayacağını belirtir.

Boolean

Hayır

false

Geçerli değerler, partial-update.ignore-delete parametresiyle aynıdır.

Not
  • Bu parametre yalnızca Realtime Compute for Apache Flink 8.0.7 ve sonraki sürümlerde desteklenir.

  • Bu parametre partial-update.ignore-delete ile aynı işleve sahiptir. ignore-delete kullanmanızı ve her iki parametreyi aynı anda yapılandırmamanızı öneririz.

partition.default-name

Varsayılan bölüm adıdır.

String

Hayır

__DEFAULT_PARTITION__

Bir bölüm sütununun değeri null veya boş dize olduğunda kullanılacak bölüm adıdır.

partition.expiration-check-interval

Sistemin süresi dolmuş bölümleri ne sıklıkla denetlediğini belirtir.

String

Hayır

1h

Ayrıntılar için bkz. Otomatik bölüm sona erme nasıl yapılandırılır.

partition.expiration-time

Bölümlerin süresinin dolacağı süredir.

String

Hayır

Yok

Yaşı bu değeri aşan bir bölümün süresi dolar. Varsayılan olarak bölümlerin süresi asla dolmaz.

Sistem, bir bölümün yaşını bölüm değerinden hesaplar. Ayrıntılar için bkz. Otomatik bölüm sona erme nasıl yapılandırılır.

partition.timestamp-formatter

Bir zaman dizesini zaman damgasına dönüştürmek için kullanılan biçim dizesidir.

String

Hayır

Yok

Bölüm değerinden bölüm yaşını çıkarmak için kullanılan biçimi belirtir. Ayrıntılar için bkz. Otomatik bölüm sona erme nasıl yapılandırılır.

partition.timestamp-pattern

Bir bölüm değerini zaman dizesine dönüştürmek için kullanılan biçim dizesidir.

String

Hayır

Yok

Bölüm değerinden bir zaman dizesi çıkarmak için kullanılan deseni belirtir. Ayrıntılar için bkz. Otomatik bölüm sona erme nasıl yapılandırılır.

scan.bounded.watermark

Taramanın sonunu sinyal eden su işareti değeridir. Kaynak tablo, su işareti bu değeri aştığında veri üretmeyi durdurur.

Long

Hayır

Yok

Yok

scan.mode

Paimon kaynak tablosu için tüketim konumunu belirtir.

String

Hayır

default

Ayrıntılar için bkz. Paimon kaynak tablosu için tüketim konumu nasıl ayarlanır.

scan.snapshot-id

Paimon kaynak tablosunun tüketimi başlatacağı anlık görüntüyü belirtir.

Integer

Hayır

Yok

Ayrıntılar için bkz. Paimon kaynak tablosu için tüketim konumu nasıl ayarlanır.

scan.timestamp-millis

Paimon kaynak tablosunun tüketimi başlatacağı zaman noktasını belirtir.

Integer

Hayır

Yok

Ayrıntılar için bkz. Paimon kaynak tablosu için tüketim konumu nasıl ayarlanır.

snapshot.num-retained.max

Tutulacak en son anlık görüntülerin maksimum sayısıdır.

Integer

Hayır

2147483647

Anlık görüntü sona erme işlemi, bu koşul veya snapshot.time-retained koşulu karşılandığında ve snapshot.num-retained.min koşulu da karşılandığında tetiklenir.

snapshot.num-retained.min

Tutulacak en son anlık görüntülerin minimum sayısıdır.

Integer

Hayır

10

Yok

snapshot.time-retained

Anlık görüntüler için saklama süresidir.

String

Hayır

1h

Anlık görüntü sona erme işlemi, bu koşul veya snapshot.num-retained.max koşulu karşılandığında ve snapshot.num-retained.min koşulu da karşılandığında tetiklenir.

write-mode

Paimon tablosu için yazma modudur.

String

Hayır

change-log

Geçerli değerler:

  • change-log: Paimon tablosu, birincil anahtara dayalı ekleme, silme ve güncelleme işlemlerini destekler.

  • append-only: Paimon tablosu yalnızca ekleme işlemlerini kabul eder ve birincil anahtarı desteklemez. Bu mod, change-log modundan daha verimlidir.

Yazma modları hakkında daha fazla bilgi için bkz. Yazma Modu.

scan.infer-parallelism

Paimon kaynak tablosu için paralelliğin otomatik olarak tahmin edilip edilmeyeceğini belirtir.

Boolean

Hayır

true

Geçerli değerler:

  • true: Paket sayısına göre Paimon kaynak tablosunun paralelliğini otomatik olarak tahmin eder.

  • false: Realtime Compute for Apache Flink'te yapılandırılan varsayılan paralelliği kullanır. Uzman modu etkinleştirilirse iş, bunun yerine yapılandırdığınız paralelliği kullanır.

scan.parallelism

Paimon kaynak tablosu için paralelliktir.

Integer

Hayır

Yok

Not

İşin Configuration > Resources sekmesinde Resource Mode değeri Mode olarak ayarlanırsa bu parametre yoksayılır.

sink.parallelism

Paimon hedef tablosu için paralelliktir.

Integer

Hayır

Yok

Not

İşin Configuration > Resources sekmesinde Resource Mode değeri Mode olarak ayarlanırsa bu parametre yoksayılır.

sink.clustering.by-columns

Paimon hedef tablosuna yazmak için kullanılan kümeleme sütunlarını belirtir.

String

Hayır

Yok

Paimon salt ekleme tabloları (birincil anahtarı olmayan tablolar) için bu parametre, toplu işlerde kümelendirilmiş yazmayı etkinleştirir. Bu işlem, verileri belirtilen sütunlarda gruplandırarak sorgu performansını iyileştirir.

Birden fazla sütun adını virgülle (,) ayırın; örneğin, 'col1,col2'.

Kümeleme hakkında daha fazla bilgi için Apache Paimon Resmi Belgelerine bakın.

sink.delete-strategy

Sistemin geri çekme mesajlarını (-D/-U) doğru şekilde işlediğinden emin olmak için bir doğrulama stratejisi belirtir.

​​

Enum

Hayır

NONE

Geri çekme mesajlarını işlerken hedef işlecinin geçerli değerleri ve beklenen davranışı:

  • NONE (varsayılan): Doğrulama gerçekleştirmez.

  • IGNORE_DELETE: Hedef işleci -U ve -D mesajlarını yoksaymalıdır. Geri çekme gerçekleşmez.

  • NON_PK_FIELD_TO_NULL: Hedef işleci -U mesajlarını yoksaymalıdır. -D mesajları için birincil anahtarı korur ve diğer birincil anahtar dışı tüm alanları null olarak ayarlar.

    Bu durum çoğunlukla birden çok hedefin aynı tabloya yazdığı kısmi güncellemeler için kullanılır.

  • DELETE_ROW_ON_PK: Hedef işleci -U mesajlarını yoksaymalı ancak -D mesajları için birincil anahtara karşılık gelen satırı silmelidir.

  • CHANGELOG_STANDARD: Hedef işleci hem -U hem de -D mesajları için birincil anahtara karşılık gelen satırı silmelidir.

Not
  • Bu parametre yalnızca Realtime Compute for Apache Flink 8.0.8 ve sonraki sürümlerde desteklenir.

  • Geri çekmeler için gerçek hedef davranışı, ignore-delete ve merge-engine gibi diğer parametreler tarafından belirlenir. Bu parametre yalnızca gerçek davranışın seçilen stratejiyle eşleşip eşleşmediğini doğrular. Eşleşmeme durumunda iş, düzeltme öneren bir hata mesajıyla başarısız olur.

blob-as-descriptor

Bir Blob sütunu okunduğunda Blob tanımlayıcı baytlarının çıktılanıp çıktılanmayacağını belirtir.

Boolean

Hayır

false

Bu parametre true olarak ayarlandığında sorgular, gerçek Blob içeriği yerine BlobDescriptor'ün serileştirilmiş baytlarını döndürür. Bu parametreyi Blob önceden imzalanmış URL işleviyle birlikte kullanın. Tablo oluşturma sırasında bu parametreyi ayarlamanız gerekmez. Bir SQL ipucu kullanarak okuma sırasında dinamik olarak ayarlayabilirsiniz. Bu parametre VVR 11.9-preview1 ve sonraki sürümlerde desteklenir.

Not

Yalnızca VVR 11.9-preview1 ve sonraki sürümlerde desteklenir.

Not

Yapılandırma seçenekleri hakkında daha fazla bilgi için Apache Paimon Resmi Belgeleri adresine bakın.

Vektör tablosu parametreleri

Önemli

Aşağıdaki parametreler yalnızca VVR 11.8 ve sonraki sürümlerde desteklenir.

Parametre

Açıklama

Veri türü

Gerekli

Varsayılan değer

Açıklamalar

ivf.nprobe

Arama sırasında prob edilecek IVF kümesi sayısı.

Integer

Hayır

16

Daha yüksek değerler genellikle geri çağırmayı iyileştirir ancak gecikme süresini artırır.

ivf.refine_factor

En üstteki_k × refine_factor IVF adaylarını alır ve Paimon tablosunda depolanan orijinal vektörleri kullanarak yeniden sıralar.

Float

Hayır

Devre dışı

Tüm IVF varyantları için varsayılan olarak devre dışıdır. Gecikme süresinden ziyade geri çağırmanın öncelikli olduğu senaryolarda sıkıştırılmış dizinler (ivf-pq ve ivf-hnsw-sq gibi) için en uygun seçenektir.

hnsw.ef_search

Arama sırasında HNSW arama genişliği.

Integer

Hayır

0

Daha yüksek değerler genellikle geri çağırmayı iyileştirir ancak gecikme süresini artırır. 0 değeri, yerel kitaplık varsayılanının kullanıldığını gösterir.

diskann.search.list_size

Lumina DiskANN arama listesi boyutu.

Integer

Hayır

max(1.5 × top_k, 16)

Daha yüksek değerler genellikle geri çağırmayı iyileştirir ancak gecikme süresini artırır.

diskann.search.beam_width

Lumina DiskANN arama ışın genişliği.

Integer

Hayır

4

—

search.parallel_number

Paralel Lumina arama sayısı.

Integer

Hayır

5

—

Özellik ayrıntıları

Veri güncelliği ve tutarlılığı

Paimon sink tablosu, her Flink iş kontrol noktası (checkpoint) sırasında verileri işlemek için iki aşamalı commit protokolünü kullanır. Bu nedenle veri güncelliği, Flink işinin kontrol noktası aralığı tarafından belirlenir. Her commit işlemi en fazla iki anlık görüntü üretir.

İki Flink işi aynı Paimon tablosuna eşzamanlı olarak yazdığında, işler farklı paketlere (bucket) yazıyorsa seri hale getirilebilir tutarlılık sağlanır. İşler aynı pakete yazıyorsa yalnızca anlık görüntü yalıtımı sağlanır. Bu durumda tablodaki veriler her iki işin sonuçlarının bir karışımı olabilir ancak veri kaybı yaşanmaz.

Birleştirme motoru

Bir Paimon sink tablosu aynı birincil anahtara sahip birden çok kayıt aldığında, benzersizliği korumak amacıyla bu kayıtları tek bir kayıtta birleştirir. Bu davranışı merge-engine parametresini ayarlayarak kontrol edebilirsiniz. Aşağıdaki tabloda kullanılabilir birleştirme motorları açıklanmaktadır.

Birleştirme motoru

Açıklama

Deduplicate

Yinelemeyi kaldırma motoru varsayılan ayardır. Aynı birincil anahtara sahip birden çok kayıt bulunduğunda Paimon sink tablosu yalnızca en son kaydı tutar ve diğerlerini atar.

Not

En son kayıt bir silme mesajıysa bu birincil anahtara ait tüm kayıtlar atılır.

Partial Update

Kısmi güncelleme motoru, bir kaydı birden çok mesajla kademeli olarak güncelleyerek eksiksiz bir kayıt oluşturmanıza olanak tanır. Aynı birincil anahtara sahip yeni bir kayıt geldiğinde, null olmayan değerleri mevcut kayıttaki ilgili alanların üzerine yazar. Motor, yeni kayıtta null olan alanları yok sayar ve mevcut değerleri korur.

Örneğin, bir Paimon sink tablosunun aşağıdaki üç kaydı sırasıyla aldığını varsayalım:

  • <1, 23.0, 10, NULL>

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

  • <1, 25.2, NULL, NULL>

İlk sütun birincil anahtar ise nihai birleştirilmiş kayıt <1, 25.2, 10, 'This is a book'> olur.

Not
  • Kısmi güncelleme sonuçlarını akış modunda okumak için changelog-producer parametresini lookup veya full-compaction olarak ayarlamanız gerekir.

  • Kısmi güncelleme motoru silme mesajlarını işleyemez. Silme mesajlarını yok saymak için partial-update.ignore-delete parametresini true olarak ayarlayabilirsiniz.

Aggregation

Bazı kullanım durumlarında yalnızca kayıtların toplu değerine ihtiyacınız olabilir. Toplama motoru, belirttiğiniz toplama işlevlerini kullanarak aynı birincil anahtara sahip kayıtları birleştirir. Birincil anahtar olmayan her sütun için fields.<field-name>.aggregate-function seçeneğini kullanarak bir toplama işlevi belirtmeniz gerekir. Aksi takdirde sütun varsayılan olarak last_non_null_value toplama işlevini kullanır. Örneğin aşağıdaki Paimon tablo tanımını ele alalım.

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'
);

price sütunu max işlevi kullanılarak, sales sütunu ise sum işlevi kullanılarak toplanır. <1, 23.0, 15> ve <1, 30.2, 20> olmak üzere iki giriş kaydı verildiğinde nihai sonuç <1, 30.2, 35> olur. Desteklenen toplama işlevleri ve karşılık gelen veri türleri şunlardır:

  • sum: DECIMAL, TINYINT, SMALLINT, INTEGER, BIGINT, FLOAT ve DOUBLE veri türlerini destekler.

  • min ve max: DECIMAL, TINYINT, SMALLINT, INTEGER, BIGINT, FLOAT, DOUBLE, DATE, TIME, TIMESTAMP ve TIMESTAMP_LTZ veri türlerini destekler.

  • last_value ve last_non_null_value: Tüm veri türlerini destekler.

  • listagg: STRING veri türünü destekler.

  • bool_and ve bool_or: BOOLEAN veri türünü destekler.

Not
  • Yalnızca sum işlevi geri çekmeleri (retraction) ve silmeleri destekler; diğer toplama işlevleri desteklemez. Belirli sütunların geri çekme ve silme mesajlarını yok saymasını istiyorsanız 'fields.${field_name}.ignore-retract'='true' ayarını yapabilirsiniz.

  • Toplama sonuçlarını akış modunda okumak için changelog-producer parametresini lookup veya full-compaction olarak ayarlamanız gerekir.

Değişiklik günlüğü üreticisi

Herhangi bir giriş akışı için eksiksiz bir değişiklik günlüğü (her update_after kaydının karşılık gelen bir update_before kaydına sahip olduğu günlük) oluşturacak şekilde Paimon'u yapılandırmak amacıyla changelog-producer parametresini ayarlayın. Aşağıdaki tabloda kullanılabilir değişiklik günlüğü üreticileri açıklanmaktadır. Daha fazla ayrıntı için Apache Paimon resmi belgelerine

Üretici

Açıklama

None

changelog-producer öğesini none (varsayılan) olarak ayarladığınızda, downstream Paimon source tabloları yalnızca belirli bir birincil anahtar için verinin en son durumunu görür. Bu eksik değişiklik günlüğü, tüketicilerin önceki durumu belirleyememesi nedeniyle doğru hesaplamalar yapmasını zorlaştırır; tüketiciler yalnızca verinin silinip silinmediğini veya en son durumunu bilebilir.

Örneğin, downstream bir tüketici bir sütunun toplamını hesaplaması gerektiğinde ve yalnızca 5 olan en son değeri gördüğünde toplamı nasıl güncelleyeceğini belirleyemez. Önceki değer 4 ise toplam 1 artmalıdır; önceki değer 6 ise toplam 1 azalmalıdır. update_before kayıtlarına duyarlı olan tüketiciler none üreticisini kullanmamalıdır ancak diğer değişiklik günlüğü üreticileri performans ek yüküne neden olur.

Not

Veritabanı gibi downstream tüketiciniz update_before verilerine duyarlı değilse none üreticisini kullanabilirsiniz. Değişiklik günlüğü üreticisini özel gereksinimlerinize göre yapılandırın.

Input

changelog-producer öğesini input olarak ayarladığınızda, sink tablosu giriş akışını değişiklik günlüğü dosyalarına çift yazar.

Bu üreticiyi yalnızca giriş akışının kendisi zaten eksiksiz bir değişiklik günlüğü olduğunda (örneğin Change Data Capture (CDC) verileri) kullanın.

Lookup

changelog-producer öğesini lookup olarak ayarladığınızda, sink tablosu dimension tablosu aramasına benzer bir nokta sorgusu mekanizması kullanarak commit edilmeden önce geçerli anlık görüntü için eksiksiz bir değişiklik günlüğü oluşturur. Bu üretici, herhangi bir giriş akışından eksiksiz bir değişiklik günlüğü üretir.

full-compaction üreticisine kıyasla lookup üreticisi değişiklik günlüğü için daha iyi güncellik sağlar ancak genel olarak daha fazla kaynak tüketir.

Yüksek veri güncelliği (örneğin dakika düzeyinde) gerektiren kullanım durumları için bu seçeneği kullanın.

Full Compaction

changelog-producer öğesini full-compaction olarak ayarladığınızda, sink tablosu her tam sıkıştırma (full compaction) sırasında eksiksiz bir değişiklik günlüğü oluşturur. Bu üretici, herhangi bir giriş akışından eksiksiz bir değişiklik günlüğü üretir. Tam sıkıştırma aralığı full-compaction.delta-commits parametresi ile belirtilir.

lookup üreticisine kıyasla full-compaction üreticisi daha yüksek gecikme süresine sahiptir ancak ekstra hesaplama eklemeden mevcut tam sıkıştırma sürecinden yararlanır. Bu da genel kaynak tüketimini düşürür.

Düşük veri güncelliği gereksinimi olan (örneğin saatlik) kullanım durumları için bu seçeneği kullanın.

Yazma modu

Paimon tabloları aşağıdaki yazma modlarını destekler.

Mod

Açıklama

Change-log

change-log yazma modu, Paimon tabloları için varsayılan ayardır. Bu mod, birincil anahtara dayalı ekleme, silme ve güncelleme işlemlerini destekler. Ayrıca bu modda birleştirme motorlarını ve değişiklik günlüğü üreticilerini de kullanabilirsiniz.

Append-only

append-only yazma modu yalnızca veri eklemelerini destekler ve birincil anahtar kullanmaz. Bu mod, change-log modundan daha verimlidir ve orta düzeyde veri güncelliği gereksinimi olan senaryolarda (örneğin dakika düzeyinde güncellik) mesaj kuyruğu alternatifi olarak kullanılabilir.

append-only yazma modunun ayrıntılı açıklaması için Apache Paimon resmi belgelerine bakın. Bu modu kullanırken aşağıdaki hususlara dikkat edin:

  • Gereksinimlerinize göre bucket-key parametresini ayarlayın. Aksi takdirde Paimon tablosu verileri tüm sütunların değerlerine göre paketler; bu da hesaplama açısından verimsizdir.

  • append-only yazma modu, verinin çıkış sırasını belirli bir ölçüde garanti edebilir. Spesifik çıkış sırası şu şekildedir:

    1. Farklı bölümlerden gelen kayıtlar için: scan.plan-sort-partition parametresi ayarlanmışsa daha küçük değere sahip bölümden gelen kayıt önce çıktılanır. Aksi takdirde daha erken oluşturulan bölümden gelen kayıt önce çıktılanır.

    2. Aynı bölüm ve paketten gelen kayıtlar için daha erken yazılan kayıt önce çıktılanır.

    3. Aynı bölümden ancak farklı paketlerden gelen kayıtlar için çıkış sırası garanti edilmez çünkü farklı paketler farklı eşzamanlı görevler tarafından işlenir.

Flink CDC veri alımı hedefi

Paimon tabloları, tek tabloların veya tüm veritabanlarının verilerinin gerçek zamanlı olarak eşitlenmesini destekler. Upstream şema değişiklikleri Paimon tablolarına gerçek zamanlı olarak yansıtılır. Daha fazla bilgi için Veri alımı bölümüne bakın.

Variant okuma budaması

Sorgu tarafından başvurulan Variant alanlarını yalnızca okuyarak G/Ç ve bellek ek yükünü azaltır.

Nasıl etkinleştirilir

Parametre

Varsayılan değer

Açıklama

variant.read.pushdown.enabled

false

Variant okuma budamasını etkinleştirmek için true olarak ayarlayın.

Ön koşullar

  • Variant verileri yalnızca VVR 11.6 veya sonraki sürümler tarafından yazılabilir. Daha önceki sürümler veya diğer motorlar tarafından yazılan Variant verileri okuma budamasını desteklemez.

  • Upstream verilerin etkili olması için otomatik Variant parçalama çıkarımını etkinleştirmek üzere variant.inferShreddingSchema seçeneğini etkinleştirmeniz veya hangi Variant üyelerinin parçalamaya uygun olduğunu belirtmek için variant.shreddingSchema ve ilgili seçenekleri açıkça yapılandırmanız gerekir. Daha fazla bilgi için Coreoptions bölümüne bakın.

Desteklenen senaryolar

SQL, Variant alanlarına dize anahtarı aracılığıyla eriştiğinde okuma budaması etkili olur. Örneğin:

SELECT v['a']            FROM t;   -- Single level
SELECT v['a']['b']       FROM t;   -- Nested
SELECT v['a'], v['b']    FROM t;   -- Multiple fields
SELECT id, v['a']        FROM t;   -- Mixed with regular columns
SELECT v['a'] + 1        FROM t;   -- Referenced in expressions

Desteklenmeyen senaryolar

  • Tüm Variant'a doğrudan başvuru yapılması. Örnek: SELECT v FROM t.

  • Doğrudan başvurunun alan erişimiyle birleştirilmesi. Örnek: SELECT v, v['a'] FROM t.

  • Dizi dizini erişimi. Örnek: v[0].

  • Tablo şeması iç içe Row alanları içeriyorsa okuma budaması tablodaki hiçbir Variant alanı için uygulanmaz.

Blob önceden imzalı URL'ler

Paimon, OSS'de depolanan Blob sütun verileri için kısa ömürlü, herkese açık HTTPS GET önceden imzalı URL'ler oluşturabilir. Çok modlu model hizmetleri gibi harici hizmetler, Flink işi içinde dosya baytlarını aktarmadan dosya içeriğini doğrudan almak için bu URL'leri kullanabilir.

Sınırlamalar

  • Bu özelliği yalnızca Flink compute engine VVR 11.9-preview1 ve sonraki sürümler destekler.

  • Yalnızca OSS'de depolanan Paimon tabloları desteklenir. Meta depo türü önemli değildir. Filesystem, DLF ve diğer meta depo türlerinin tümü desteklenir.

  • Oluşturulan URL herkese açık bir HTTPS URL'sidir ve genel ağ erişimi olan bir harici hizmet tarafından tüketilmelidir. Katalog dahili bir uç nokta kullanıyorsa harici hizmetin oluşturulan URL'ye erişebilmesi için bunu genel HTTPS uç noktasına değiştirmenizi öneririz.

  • Normal bir Blob sütununu okumak için önce blob-as-descriptor seçeneğini kullanarak BlobDescriptor baytlarını almalı ve ardından bu baytları işleve iletmeniz gerekir.

Sözdizimi

descriptor_to_presigned_url(source_table, descriptor, validity)
try_descriptor_to_presigned_url(source_table, descriptor, validity)

Parametreler

Parametre

Tür

Açıklama

source_table

STRING literal

Blob sütununu içeren Paimon tablosu. Format: database.table. Tablonun kataloğu işlevin ait olduğu katalogla aynıysa catalog.database.table formatını da kullanabilirsiniz. Değer boş olmayan bir literal olmalıdır. Tablo alanları, dinamik sütunlar ve CASE ifadeleri desteklenmez.

descriptor

BYTES

BlobDescriptor baytları. blob-as-descriptor = 'true' etkinleştirildikten sonra Blob sütunu okunduğunda elde edilen sonuçtur.

validity

INTERVAL

URL'nin geçerlilik süresi. Değer pozitif bir saniye sayısı olmalıdır. Örnek: INTERVAL '5' MINUTE.

Dönüş değeri

Tür

Açıklama

STRING

Kısa ömürlü, herkese açık bir HTTPS GET önceden imzalı URL.

Örnek

-- Use an SQL hint to read the Blob column as a descriptor and generate a presigned URL
SELECT sys.descriptor_to_presigned_url(
    'default.image_table',
    image,
    INTERVAL '5' MINUTE)
FROM image_table /*+ OPTIONS('blob-as-descriptor'='true') */;

-- Fault-tolerant mode: returns NULL on row-level errors, with other behavior unchanged
SELECT sys.try_descriptor_to_presigned_url(
    'default.image_table',
    image,
    INTERVAL '5' MINUTE)
FROM image_table /*+ OPTIONS('blob-as-descriptor'='true') */;
Not
  • descriptor_to_presigned_url satır düzeyindeki bir hatada özel durum fırlatır. try_descriptor_to_presigned_url satır düzeyindeki bir hatada NULL döndürür.

  • Oluşturulan URL dosya uzantısı içermez ve URL'nin işaret ettiği baytlar Blob verileriyle aynıdır. Downstream hizmetler dosya biçimini URL sonekine göre değil döndürülen baytlara göre tanımlamalıdır.

  • Önceden imzalı bir URL geçici erişim kimlik bilgilerine eşdeğerdir. Önceden imzalı bir URL oluşturulduktan sonra bunu hemen downstream hizmete iletin. Günlüklere veya sonuç tablolarına yazmayın ve kalıcı hale getirmeyin.

Zincir tablo

Zincir tablo, bir anlık görüntü dalından ve bunu delta dalında izleyen değişikliklerden eksiksiz bir veri kümesini yeniden oluşturur. Periyodik olarak tam verileri snapshot dalına, iki tam yükleme arasındaki değişiklikleri ise delta dalına yazın. Okuma işlemi, en son anlık görüntü bölümünü referans noktası olarak alır ve daha sonraki delta bölümlerini birleştirerek tam veriyi yeniden oluşturur; böylece tüm tabloyu yeniden yazmanıza gerek kalmaz. Çalışmalar arasında satırların yalnızca küçük bir kısmının değiştiği durumlarda (örneğin bir ODS binlog dökümü) bu yaklaşım kullanışlıdır. Daha fazla bilgi için Apache Paimon belgelerindeki Chain Table bölümüne bakın. Zincir tablolar yalnızca VVR 11.9 ve sonraki sürümlerde desteklenir.

Zincir tabloyu etkinleştirme

Tabloyu oluştururken chain-table.enabled öğesini true olarak ayarlayın, snapshot ve delta dallarını oluşturun ve ardından hem ana tablo hem de her iki dal tablosu için dal geri dönüş seçeneklerini yapılandırın.

CREATE TABLE `default`.`t` (
  `t1` STRING,
  `t2` STRING,
  `t3` STRING,
  `date` STRING,
  PRIMARY KEY (`date`, `t1`) NOT ENFORCED
) PARTITIONED BY (`date`) WITH (
  'chain-table.enabled' = 'true',
  'sequence.field' = 't2',
  'bucket-key' = 't1',
  'bucket' = '2',
  'partition.timestamp-pattern' = '$date',
  'partition.timestamp-formatter' = 'yyyyMMdd'
);

-- mycat is the name of the Paimon catalog.
CALL `mycat`.sys.create_branch('default.t', 'snapshot');
CALL `mycat`.sys.create_branch('default.t', 'delta');

ALTER TABLE `default`.`t` SET (
  'scan.fallback-snapshot-branch' = 'snapshot',
  'scan.fallback-delta-branch' = 'delta');

ALTER TABLE `default`.`t$branch_snapshot` SET (
  'scan.fallback-snapshot-branch' = 'snapshot',
  'scan.fallback-delta-branch' = 'delta');

ALTER TABLE `default`.`t$branch_delta` SET (
  'scan.fallback-snapshot-branch' = 'snapshot',
  'scan.fallback-delta-branch' = 'delta');

Veri yazma

Tam verileri t$branch_snapshot dalına yazın. Bu dalın her bölümü, belirli bir zamandaki eksiksiz bir görünümü temsil eder. Artımlı verileri t$branch_delta dalına yazın. Bu dalın her bölümü yalnızca o dönemdeki değişiklikleri içerir.

-- Full write
INSERT OVERWRITE `default`.`t$branch_snapshot` PARTITION (date = '20250810') VALUES ('1', '1', '1');

-- Incremental write
INSERT INTO `default`.`t$branch_delta` PARTITION (date = '20250811') VALUES ('2', '1', '1');

Veri okuma

Okuma yolu

İşlem

Sonuç

Tam sorgu

Ana tablonun bir bölümünü sorgulayın.

Bölümün tam verisi. Anlık görüntü dalı bölümü içeriyorsa bölüm doğrudan okunur. Aksi takdirde referans noktası anlık görüntüsü ve sonraki delta bölümlerinden yeniden oluşturulur.

Artımlı sorgu

t$branch_delta bölümünü sorgulayın.

Yalnızca seçilen delta bölümünde saklanan değişiklikler. Tam durum yeniden oluşturulmaz.

Hibrit sorgu

Tam sorgu ve artımlı sorguyu UNION ALL ile birleştirin.

Tam ve artımlı sonuçların birleşimi. Aynı satır iki kez görünebilir.

Akış okuma

Ana tabloyu akış modunda okuyun.

İlk yükleme aşamasının sonucu önce yayımlanır, ardından delta dalının yeni commitleri sürekli olarak tüketilir.

Arama birleşimi (Lookup join)

Zincir tabloyu dimension tablosu olarak kullanın.

Her grubun en son anlık görüntü bölümü ve sonraki delta bölümlerinin birleştirilmiş durumu. continuous.discovery-interval temel alınarak artımlı olarak yenilenir.

-- Full query
SELECT t1, t2, t3 FROM `default`.`t` WHERE date = '20250811';

-- Incremental query
SELECT t1, t2, t3 FROM `default`.`t$branch_delta` WHERE date = '20250811';

-- Hybrid query
SELECT t1, t2, t3 FROM `default`.`t` WHERE date = '20250811'
UNION ALL
SELECT t1, t2, t3 FROM `default`.`t$branch_delta` WHERE date = '20250811';

Akış okuma

Akış okuma işi iki aşamada çalışır:

  • İlk yükleme aşaması: İş varsayılan olarak her grubun en son anlık görüntü bölümünü ve ondan sonra gelen delta bölümlerini okur. Daha eski anlık görüntü bölümleri hariç tutulur. Bu aşamada anlık görüntü ve delta verilerini referans noktasına göre birleştirmek ve çapraz dal SİLME kayıtlarını çözmek için chain-table.streaming.merge-snapshot öğesini true olarak ayarlayın. Bunun bedeli iş başlatma sırasında daha ağır bir taramadır.

  • Artımlı aşama: İş, delta dalından yeni commitleri sürekli olarak okur.

SET 'execution.runtime-mode' = 'streaming';

INSERT INTO downstream_sink SELECT * FROM `default`.`t`;
Not

Artımlı aşama yalnızca delta dalını izler. Anlık görüntü dalına yapılan yazılar iş yeniden başlatılana kadar algılanmaz. Bir bölümün artımlı verilerini anlık görüntü dalıyla birleştirmek için compact_chain_table yordamını düzenli olarak çalıştırın. Sıkıştırma sonrasında ilk yükleme aşamasında yalnızca sıkıştırma sonrası gelen delta değişikliklerinin birleştirilmesi gerekir.

Birden çok bölüm anahtarı

Tabloda birden fazla bölüm anahtarı varsa zincir boyutunu grup boyutundan ayırmak için chain-table.chain-partition-keys öğesini kullanın. Değer, bölüm anahtarlarının bitişik bir soneki olmalıdır. Son ek alanları zaman sıralı zinciri oluşturur ve bunlardan önceki bölüm alanları grup boyutu haline gelir. Her grup bölüm değeri grubu kendi zincirini ve referans noktasını korur. Bu seçenek ayarlanmazsa tüm bölümler tek bir örtülü gruba ait olur.

CREATE TABLE `default`.`t` (
  `t1` STRING,
  `t2` STRING,
  `t3` STRING,
  `region` STRING,
  `date` STRING,
  PRIMARY KEY (`region`, `date`, `t1`) NOT ENFORCED
) PARTITIONED BY (`region`, `date`) WITH (
  'chain-table.enabled' = 'true',
  'sequence.field' = 't2',
  'bucket-key' = 't1',
  'bucket' = '2',
  'partition.timestamp-pattern' = '$date',
  'partition.timestamp-formatter' = 'yyyyMMdd',
  -- Only date forms the chain. Each region has its own chain.
  'chain-table.chain-partition-keys' = 'date'
);

Sınırlamalar

  • Zincir tablolar yalnızca birincil anahtarlı tablolar için desteklenir. bucket ve bucket-key belirtmeniz gerekir.

  • Her dalın şeması tutarlı olmalıdır.

  • Zincir tablo sequence.field gerektirir. first-row ve aggregation birleştirme motorları desteklenmez.

  • Akış okuma ve arama birleşimi, delta dalının deduplicate birleştirme motorunu (varsayılan değer) kullanmasını gerektirir. Toplu okuma bundan etkilenmez.

  • Silme vektörleri yalnızca deduplicate birleştirme motorunu kullanan zincir tablolar için desteklenir.

  • changelog-producer için yalnızca none (varsayılan değer) ve input desteklenir. lookup ve full-compaction modları desteklenmez. Değer none ise kayıtlar zincir bölümünü içeren tam birincil anahtara göre normalleştirilir ve orijinal kayıtları başka bir bölümde bulunan -D ve -U kayıtları atılır. Downstream tüketicilerin çapraz bölüm değişiklik günlüğü kayıtlarını alması gerekiyorsa değeri input olarak ayarlayın.

  • Akış okuma ve arama birleşimi yalnızca varsayılan başlangıç modunu (latest-full) destekler. scan.snapshot-id, scan.timestamp-millis gibi bir başlangıç konumu belirtirseniz, scan.mode öğesini latest olarak ayarlarsanız veya consumer-id kullanırsanız hata oluşur. Zincir tablo mantığı olmadan standart bir akış okuma gerçekleştirmek için t$branch_delta gibi belirli bir dal tablosunu okuyun.

  • Zincir tablo akış okumalarında ve arama birleşimlerinde bölüm filtreleri desteklenmez. Buna WHERE yan tümcesindeki bölüm sütunları ve scan.partitions seçeneği dahildir çünkü filtre çapraz dal birleştirme mantığını engeller. Belirli bir bölümü okumak için toplu modu kullanın.

  • Arama birleşiminin birleştirme anahtarı bölüm anahtarlarını içermemelidir. Aksi takdirde hata döndürülür.

  • partition.timestamp-formatter eksiksiz bir tarih (yıl-ay-gün veya yıl-yılın günü) belirtmeli, yalnızca gidiş-dönüş uyumlu tarih ve saat alanlarını (y/u, M/L, d, D, H, k, m ve s) kullanmalı ve minimum adımı en az bir saniye olmalıdır.

Mosaic dosya biçimi

Mosaic, binlerce veya on binlerce sütun içeren geniş tablolar için optimize edilmiş sütunsal-paket hibrit bir biçimdir. Sütunlar isme göre sıralanır ve aralığa göre paketlere dağıtılır; her paket içinde sütun yönelimli olarak depolanır ve ZSTD kullanılarak bağımsız şekilde sıkıştırılır. Projeksiyon aşağı itme (projection pushdown) paket düzeyinde çalışır, bu sayede bir sorgu yalnızca istenen sütunları içeren paketleri okur. Benzer ad önekine sahip sütunlar aynı pakette yer alır; bu durum hem sıkıştırma oranını hem de projeksiyonların yerelliğini iyileştirir. Daha fazla bilgi için bkz. Mosaic. Mosaic biçimi yalnızca VVR 11.9 ve sonraki sürümlerde desteklenir.

Biçimi etkinleştirin

Tabloyu oluştururken file.format değerini mosaic olarak ayarlayın. Veri alımı işinde karşılık gelen seçenek table.properties.file.format şeklindedir.

CREATE TABLE `default`.`wide_table` (
  `id` BIGINT,
  `col_a` STRING,
  `col_b` DOUBLE
) WITH (
  'file.format' = 'mosaic'
);

Biçim seçenekleri

Seçenek

Varsayılan değer

Açıklama

mosaic.num-buckets

auto

Paralel G/Ç için sütun paketi sayısı. Değer 0 ise veya seçenek belirtilmemişse paket sayısı otomatik olarak belirlenir.

mosaic.stats-columns

(boş)

Yüklem aşağı itme (predicate pushdown) için min/max istatistiklerinin toplandığı sütun adları; virgül (,) ile ayrılır. Değer boşsa istatistik toplanmaz.

mosaic.read.prefetch-row-groups

8

Bir okuyucunun tüketilen satır grubundan önce açtığı satır grubu sayısı. Önden getirme (prefetching), aralık okuma gecikmesini kod çözme işlemiyle örtüştürür. Her önden getirilen satır grubu, kodu çözülmüş yığınını bellekte tutar ve ayrı bir giriş akışı kullanır. 0 değeri önden getirmeyi devre dışı bırakır.

mosaic.read.prefetch-max-bytes

64 mb

Önden getirilen satır gruplarının tahmini kodu çözülmüş boyutunun üst sınırı; satır sayıları ve projeksiyona alınan sütun türlerinden hesaplanır. Geniş bir projeksiyon veya büyük bir satır grubu, mosaic.read.prefetch-row-groups değerinin etkin değerini düşürür.

Sınırlamalar

Mosaic karmaşık türleri desteklemez: ARRAY, MAP, MULTISET, ROW, VARIANT, BLOB ve VECTOR.

Paimon'u boyut tablosu olarak kullanma

Paimon tabloları boyut tablosu olarak kullanılabilir. JOIN sözdizimi için bkz. Boyut tablosu JOIN deyimleri.

Varsayılan olarak arama (lookup), her paralel örnekteki tüm verileri yükler. Bu yaklaşım yalnızca küçük boyut tabloları için uygundur. Büyük boyut tabloları için aşağıda açıklanan Shuffle Lookup çözümlerini kullanın.

Bölümlenmiş boyut tabloları

Boyut tablonuz bölümlenmişse ve yalnızca en son bir veya iki bölümden verilere ihtiyacınız varsa dinamik bölüm yükleme özelliğini kullanabilirsiniz:

SELECT * FROM T
JOIN DIM /*+ OPTIONS('lookup.dynamic-partition'='max_pt()', 'lookup.dynamic-partition.refresh-interval'='1 h') */
FOR SYSTEM_TIME AS OF T.proc_time AS D
ON T.col = D.col;

Parametre

Veri türü

Varsayılan değer

Açıklama

lookup.dynamic-partition

String

Yok

max_pt(): Yalnızca en son bölümü yükler. max_two_pt(): Yalnızca en son iki bölümü yükler.

lookup.dynamic-partition.refresh-interval

Duration

1 h

Sistemin boyut tablosundaki bölüm güncellemelerini denetleme aralığı.

Büyük boyut tabloları: sabit paketli tablolar

Yalnızca VVR 8.0.8 ve sonraki sürümlerde desteklenir. Sabit paketli tablolar (paket > 0) için Shuffle Lookup kullanarak verileri paket anahtarına göre paralel örnekler arasında dağıtabilirsiniz; böylece her örnek yalnızca kendisine atanan paketlerdeki verileri yükler:

SELECT /*+ LOOKUP('table'='D', 'shuffle'='true') */ T.col1, D.col2
FROM T
JOIN DIM FOR SYSTEM_TIME AS OF T.proc_time AS D
ON T.col1 = D.col1;
Not
  • Birleştirme anahtarı, paket anahtarı olmalıdır. Paket anahtarı varsayılan olarak birincil anahtardır.

  • Bu özellik yalnızca sabit paketli tablolar (paket > 0) tarafından desteklenir.

Büyük boyut tabloları: sabit paketli olmayan tablolar

Yalnızca VVR 8.0.10 ve sonraki sürümlerde desteklenir. Dinamik paketli tablolar veya ekleme tabloları için SHUFFLE_HASH veya REPLICATED_SHUFFLE_HASH kullanabilirsiniz; böylece her paralel örnek tüm verileri okur ancak yalnızca ihtiyaç duyduğu kısmı saklar:

-- Shuffle Hash
SELECT /*+ SHUFFLE_HASH(D) */ T.col1, D.col2
FROM T
JOIN DIM FOR SYSTEM_TIME AS OF T.proc_time AS D
ON T.col1 = D.col1;

-- Replicated Shuffle Hash
SELECT /*+ REPLICATED_SHUFFLE_HASH(D) */ T.col1, D.col2
FROM T
JOIN DIM FOR SYSTEM_TIME AS OF T.proc_time AS D
ON T.col1 = D.col1;

SHUFFLE_HASH ve REPLICATED_SHUFFLE_HASH hakkında daha fazla bilgi için bkz. Boyut tablosu JOIN deyimleri.

Veri alımı

Paimon bağlayıcısını veri alımı YAML işlerinde havuz (sink) olarak kullanabilirsiniz.

Sözdizimi

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

Parametreler

Parametre

Açıklama

Gerekli

Tür

Varsayılan

Notlar

type

Bağlayıcı türü.

Evet

STRING

Yok

Değer paimon olmalıdır.

name

Havuz adı.

Hayır

STRING

Yok

catalog.properties.metastore

Paimon katalog türü.

Hayır

STRING

filesystem

Geçerli değerler:

  • filesystem (varsayılan)

  • rest (yalnızca Data Lake Formation (DLF) desteklenir, DLF-Legacy desteklenmez)

catalog.properties.*

Paimon kataloğu oluşturma parametreleri.

Hayır

STRING

Yok

Daha fazla bilgi için bkz. Paimon Kataloğunu Yönetme.

table.properties.*

Paimon tablosu oluşturma parametreleri.

Hayır

STRING

Yok

Daha fazla bilgi için bkz. Paimon tablo seçenekleri.

table.properties.file.format

Tablodaki veri dosyalarının depolama biçimi.

String

Hayır

parquet

Geçerli değerler:

  • orc

  • parquet

  • avro

  • lance (VVR 11.6 ve sonrası)

  • mosaic (VVR 11.9 ve sonrası)

catalog.properties.warehouse

Dosya depolama için kök dizin.

Hayır

STRING

Yok

Bu parametre yalnızca catalog.properties.metastore değeri filesystem olarak ayarlandığında geçerlidir.

commit.user-prefix

Veri dosyalarını göndermek için kullanılan kullanıcı adı ön eki.

Hayır

STRING

Yok

Not

Farklı işler için farklı kullanıcı adları ayarlamanızı öneririz. Bu sayede gönderme çakışmasına neden olan işi belirlemek daha kolay olur.

partition.key

Bölümlenmiş bir tablo için bölüm anahtarları.

Hayır

STRING

Yok

Farklı tablolar ; ile, farklı alanlar , ile ayrılır; tablolar ve alanlar : ile ayrılır. Örnek: testdb.table1:id1,id2;testdb.table2:name.

sink.cross-partition-upsert.tables

Birincil anahtarın tüm bölüm anahtarlarını içermediği, bölümler arası upsert gerektiren tabloları listeler.

Hayır

STRING

Yok

Bölümler arası güncellemeleri olan tablolar için geçerlidir.

  • Biçim: Tablo adlarını ayırmak için noktalı virgül ; kullanın.

  • Performans önerisi: Bu işlem kaynak yoğunluklu olduğundan bu tablolar için ayrı işler oluşturun.

Önemli
  • Kriterleri karşılayan tüm tabloları listelemelisiniz. Bir tablo adının atlanması veri çoğaltmaya neden olur.

sink.commit.parallelism

Commit işlecisinin paralellik değerini belirtir.

Hayır

INTEGER

Yok

Commit işlecisi darboğaz oluşturuyorsa paralelliğini artırmak ve performansı iyileştirmek için bu parametreyi kullanın.

Bu parametre yalnızca Realtime Compute for Apache Flink 11.6 ve sonraki sürümlerde desteklenir.

Not

Bu parametrenin ayarlanması işlecin paralellik değerini değiştirir. Durumlu bir işi yeniden başlatırken işin kısmi işleci durumunu yoksayabilmesi için AllowNonRestoredState belirtmeniz gerekir.

sink.existing-table.schema-check.enabled

Önceden oluşturulmuş bir tabloya veri yazılırken mevcut tablo şemasının uyumluluğunun denetlenip denetlenmeyeceğini ve şemanın otomatik olarak uyarlanıp uyarlanmayacağını belirtir.

Boolean

Hayır

true

Aşağıdaki listede geçerli değerler ve önceden oluşturulmuş bir tabloya veri yazıldığında izlenen davranış açıklanmaktadır:

  • true (varsayılan): Mevcut tabloda sütun türlerinin uyumluluğunu ve eksik veya gereksiz NOT NULL sütunları denetler; ayrıca upstream tabloda bulunan ancak downstream tabloda eksik olan null yapılabilir sütunları otomatik olarak ekler. Otomatik olarak uyarlanamayan bir durum oluşursa iş başarısız olur ve sorunu gidermek için çalıştırabileceğiniz SQL deyimlerini döndürür.

  • false: Önceki denetimi ve otomatik sütun eklemeyi atlar; verileri downstream tablonun mevcut şemasına göre yazar. Yalnızca ilk CREATE TABLE deyimi yürütüldüğünde gerçekleştirilen otomatik sütun ekleme atlanır. Sonraki şema değişiklikleri otomatik olarak uygulanır.

Not

Bu parametre yalnızca Realtime Compute for Apache Flink VVR 11.8 ve sonraki sürümlerde desteklenir.

Mevcut bir kataloğu yeniden kullanma

Realtime Compute for Apache Flink 11.5'ten başlayarak Flink CDC veri alımı işinde Veri Yönetimi sayfasından yerleşik bir Paimon kataloğunu doğrudan referans alabilirsiniz. Bu yaklaşım manuel yapılandırmayı azaltır.

sink:
  type: paimon
  using.built-in-catalog: paimon_dlf_catalog
  catalog.properties.fs.oss.endpoint: oss-cn-beijing-internal.aliyuncs.com

Veri alımı işleri bir Paimon kataloğundaki tüm parametreleri otomatik olarak yeniden kullanabilir. Bu durum, bir YAML işinde catalog.properties. ön ekine sahip parametreleri manuel olarak yapılandırmaya eşdeğerdir.

Otomatik olarak yeniden kullanılan bir parametreyi geçersiz kılmak için YAML işinde açıkça ayarlayın. Açık YAML yapılandırması daha yüksek önceliğe sahiptir. Örneğin önceki örnekte fs.oss.endpoint parametresi paimon_dlf_catalog içindeki değeri geçersiz kılarak YAML işindeki değeri kullanır.

Şema Değişiklikleri

CDC YAML pipeline işi şema değişikliklerini işlemek için farklı stratejiler kullanabilir. Stratejiyi yapılandırmak için Şema evrimi yapılandırmaları bölümünde açıklandığı gibi pipeline düzeyindeki schema.change.behavior parametresini ayarlayın. schema.change.behavior parametresi IGNORE, LENIENT, TRY_EVOLVE, EVOLVE veya EXCEPTION olarak ayarlanabilir. Aşağıdaki bölümlerde şema değişikliklerini içeren LENIENT ve EVOLVE modlarının farklı şema değişikliği olaylarını nasıl işlediği açıklanmaktadır.

LENIENT (varsayılan)

LENIENT modunda aşağıdaki şema değişiklikleri desteklenir:

  • Null yapılabilir bir sütun ekleme: Sütun sonuç tablosunun şemasına otomatik olarak eklenir ve yeni sütunun verileri otomatik olarak senkronize edilir.

  • Null yapılabilir bir sütunu kaldırma: Sütun sonuç tablosundan kaldırılmaz. Bunun yerine sütunun verileri otomatik olarak NULL değerleriyle değiştirilir.

  • NOT NULL bir sütun ekleme: Sütun sonuç tablosunun şemasına otomatik olarak eklenir ve yeni sütunun verileri otomatik olarak senkronize edilir. Yeni sütun varsayılan olarak null yapılabilir olup sütun eklenmeden önce üretilen veriler NULL olarak ayarlanır.

  • Sütunu yeniden adlandırma: İşlem bir sütun ekleme ve bir sütun kaldırma olarak değerlendirilir. Yeniden adlandırılan sütun sonuç tablosunun sonuna eklenir ve özgün sütunun verileri otomatik olarak NULL değerleriyle değiştirilir. Örneğin col_a, col_b olarak yeniden adlandırılırsa col_b sonuç tablosunun sonuna eklenir ve col_a verileri NULL değerleriyle değiştirilir.

  • Sütun türünü değiştirme: Sonuç tablosundaki ilgili sütunun veri türünü değiştirir.

  • Aşağıdaki şema değişiklikleri desteklenmez:

    • Birincil anahtar türlerinde yapılan değişiklikler.

    • NULLABLE'dan NOT NULL'a yapılan değişiklikler.

EVOLVE

EVOLVE modunda aşağıdaki şema değişiklikleri desteklenir:

  • Null yapılabilir bir sütun ekleme: Desteklenir.

  • Null yapılabilir bir sütunu kaldırma: Desteklenmez.

  • NOT NULL bir sütun ekleme: Sonuç tablosuna null yapılabilir bir sütun eklenir.

  • Sütunu yeniden adlandırma: Desteklenir. Özgün sütun sonuç tablosunda yeniden adlandırılır.

  • Sütun türünü değiştirme: Sonuç tablosundaki ilgili sütunun veri türünü değiştirir.

  • Aşağıdaki şema değişiklikleri desteklenmez:

    • Birincil anahtar türlerinde yapılan değişiklikler.

    • NULLABLE'dan NOT NULL'a yapılan değişiklikler.

EVOLVE modunu etkinleştirmeye ilişkin bir örnek için bkz. EVOLVE modunu etkinleştirme.

Not

Downstream Paimon tablosu zaten varsa iş mevcut tablo şemasına veri yazar ve tabloyu yeniden oluşturmaya çalışmaz. Mevcut tablo şeması upstream tablonun şemasından farklıysa upstream tabloda bulunan ancak downstream tabloda eksik olan null yapılabilir sütunlar mevcut tabloya otomatik olarak eklenir. Uyumsuz sütun türü veya eksik/gereksiz NOT NULL sütun gibi otomatik olarak uyarlanamayan bir durum oluşursa denetim başarısız olur ve hata bildirilir. Tablo şemasını değiştirmek için hata iletisinde önerilen SQL deyimlerini çalıştırabilirsiniz. Alternatif olarak havuzda sink.existing-table.schema-check.enabled değerini false olarak ayarlayarak denetimi ve otomatik sütun eklemeyi atlayabilir; bu sayede veriler downstream tablonun şemasına göre yazılır.

Örnekler

Aşağıdaki örnekler tipik senaryolardaki yapılandırmaları göstermektedir.

Rest Kataloğuna Yazma

Aşağıdaki örnekte Paimon kataloğu rest türündeyken Data Lake Formation (DLF) üzerine veri yazma işlemi gösterilmektedir:

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
  #(Optional) Synchronize data from newly added tables during the incremental phase.
  scan.binlog.newly-added-table.enabled: true
  #(Optional) Synchronize table and field comments.
  include-comments.enabled: true
  #(Optional) Prioritize the distribution of unbounded shards to prevent potential Out Of Memory (OOM) issues on TaskManagers.
  scan.incremental.snapshot.unbounded-chunk-first.enabled: true
  #(Optional) Enable parsing and filtering to accelerate data reads.
  scan.only.deserialize.captured.tables.changelog.enabled: true

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
  #(Optional) Specify a commit user. We recommend that you use a different commit user for each job to avoid conflicts.
  commit.user: your_job_name
  #(Optional) Enable deletion vectors to improve read performance.
  table.properties.deletion-vectors.enabled: true

catalog.properties ön ekine sahip parametreler hakkında bilgi için bkz. Flink CDC Katalog yapılandırma parametreleri.

FileSystem Kataloğuna Yazma

filesystem Paimon kataloğuyla Object Storage Service (OSS) üzerine yazmaya ilişkin örnek yapılandırma:

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
  #(Optional) Synchronize data from newly added tables during the incremental phase.
  scan.binlog.newly-added-table.enabled: true
  #(Optional) Synchronize table and field comments.
  include-comments.enabled: true
  #(Optional) Prioritize the distribution of unbounded shards to prevent potential Out Of Memory (OOM) issues on TaskManagers.
  scan.incremental.snapshot.unbounded-chunk-first.enabled: true
  #(Optional) Enable parsing and filtering to accelerate data reads.
  scan.only.deserialize.captured.tables.changelog.enabled: true

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
  #(Optional) Specify a commit user. We recommend that you use a different commit user for each job to avoid conflicts.
  commit.user: your_job_name
  #(Optional) Enable deletion vectors to improve read performance.
  table.properties.deletion-vectors.enabled: true

catalog.properties ön ekine sahip parametreler hakkında bilgi için bkz. Paimon FileSystem Kataloğu Oluşturma.

Bölümlenmiş bir tabloya yazma

Upstream tablodaki TIMESTAMP türündeki create_time alanını DATE alanına dönüştürür; bu alan Paimon tablosunun bölüm anahtarı olarak kullanılır.

source:
  type: mysql
  name: MySQL Source
  hostname: <yourHostname>
  port: 3306
  username: flink
  password: ${secret_values.password}
  tables: test_db.test_source_table
  server-id: 5401-5499
  #(Optional) Synchronize data from newly added tables during the incremental phase.
  scan.binlog.newly-added-table.enabled: true
  #(Optional) Synchronize table and field comments.
  include-comments.enabled: true
  #(Optional) Prioritize the distribution of unbounded shards to prevent potential Out Of Memory (OOM) issues on TaskManagers.
  scan.incremental.snapshot.unbounded-chunk-first.enabled: true
  #(Optional) Enable parsing and filtering to accelerate data reads.
  scan.only.deserialize.captured.tables.changelog.enabled: true

sink:
  type: paimon
  name: Paimon Sink
  using.built-in-catalog: paimon_dlf_catalog
  #(Optional) Specify a commit user. We recommend that you use a different commit user for each job to avoid conflicts.
  commit.user: your_job_name
  #(Optional) Enable deletion vectors to improve read performance.
  table.properties.deletion-vectors.enabled: true
 
transform:
  - source-table: test_db.test_source_table
    projection: \*, DATE_FORMAT(CAST(create_time AS TIMESTAMP), 'yyyy-MM-dd') as partition_key
    primary-keys: id, create_time, partition_key
    partition-keys: partition_key
    description: add partition key 

pipeline:
  name: MySQL to Paimon Pipeline

Tek bir tabloyu senkronize etme

Gerçek zamanlı performans ve kararlılık gereksinimleri yüksek olan tablolar için tek tablo senkronizasyon işlerini yapılandırmanızı öneririz. Tek tablo senkronizasyonu, çoklu tablo senkronizasyonunun karmaşıklığını ortadan kaldırır. Aşağıdaki örnek yapılandırmayı göstermektedir:

source:
  type: mysql
  name: MySQL Source
  hostname: <yourHostname>
  port: 3306
  username: flink
  password: ${secret_values.password}
  tables: test_db.test_source_table
  server-id: 5401-5499
  #(Optional) Synchronize table and field comments.
  include-comments.enabled: true
  #(Optional) Prioritize the distribution of unbounded shards to prevent potential Out Of Memory (OOM) issues on TaskManagers.
  scan.incremental.snapshot.unbounded-chunk-first.enabled: true
  #(Optional) Enable parsing and filtering to accelerate data reads.
  scan.only.deserialize.captured.tables.changelog.enabled: true


sink:
  type: paimon
  name: Paimon Sink
  using.built-in-catalog: paimon_dlf_catalog
  #(Optional) Specify a commit user. We recommend that you use a different commit user for each job to avoid conflicts.
  commit.user: your_job_name
  #(Optional) Enable deletion vectors to improve read performance.
  table.properties.deletion-vectors.enabled: true

pipeline:
  name: MySQL to Paimon Pipeline

Tüm bir veritabanını senkronize etme

Tüm bir veritabanının senkronize edilmesi, yapılandırmanız ve çalıştırmanız gereken iş sayısını azaltarak bakım ve işletim maliyetlerini düşürür. Aşağıdaki örnek yapılandırmayı göstermektedir:

source:
  type: mysql
  name: MySQL Source
  hostname: <yourHostname>
  port: 3306
  username: flink
  password: ${secret_values.password}
  tables: test_db.\.*
  server-id: 5401-5499
  #(Optional) Synchronize data from newly added tables during the incremental phase.
  scan.binlog.newly-added-table.enabled: true
  #(Optional) Synchronize table and field comments.
  include-comments.enabled: true
  #(Optional) Prioritize the distribution of unbounded shards to prevent potential Out Of Memory (OOM) issues on TaskManagers.
  scan.incremental.snapshot.unbounded-chunk-first.enabled: true
  #(Optional) Enable parsing and filtering to accelerate data reads.
  scan.only.deserialize.captured.tables.changelog.enabled: true


sink:
  type: paimon
  name: Paimon Sink
  using.built-in-catalog: paimon_dlf_catalog
  #(Optional) Specify a commit user. We recommend that you use a different commit user for each job to avoid conflicts.
  commit.user: your_job_name
  #(Optional) Enable deletion vectors to improve read performance.
  table.properties.deletion-vectors.enabled: true

pipeline:
  name: MySQL to Paimon Pipeline

Tüm bir veritabanını senkronize etme ve veritabanı ile tablo adlarını değiştirme

Veritabanı ve tablo adlarını toplu olarak değiştirmek için tüm veritabanı senkronizasyon işine route bölümünü ekleyin. Aşağıdaki örnek yapılandırmayı göstermektedir:

source:
  type: mysql
  name: MySQL Source
  hostname: <yourHostname>
  port: 3306
  username: flink
  password: ${secret_values.password}
  tables: test_db.\.*
  server-id: 5401-5499
  #(Optional) Synchronize data from newly added tables during the incremental phase.
  scan.binlog.newly-added-table.enabled: true
  #(Optional) Synchronize table and field comments.
  include-comments.enabled: true
  #(Optional) Prioritize the distribution of unbounded shards to prevent potential Out Of Memory (OOM) issues on TaskManagers.
  scan.incremental.snapshot.unbounded-chunk-first.enabled: true
  #(Optional) Enable parsing and filtering to accelerate data reads.
  scan.only.deserialize.captured.tables.changelog.enabled: true


sink:
  type: paimon
  name: Paimon Sink
  using.built-in-catalog: paimon_dlf_catalog
  #(Optional) Specify a commit user. We recommend that you use a different commit user for each job to avoid conflicts.
  commit.user: your_job_name
  #(Optional) Enable deletion vectors to improve read performance.
  table.properties.deletion-vectors.enabled: true
  
route:
  # Synchronize all tables in the MySQL test_db database to the Paimon test_db2 database and retain the table names.
  - source-table: test_db.\.*
    sink-table: test_db2.<>
    replace-symbol: <>

pipeline:
  name: MySQL to Paimon Pipeline

Parçalanmış veritabanlarını ve tabloları birleştirme

Birden çok parçalanmış tablodan gelen verileri tek bir aşağı akış tablosuna yazmak için aşağıdaki şablonu kullanın:

source:
  type: mysql
  name: MySQL Source
  hostname: <yourHostname>
  port: 3306
  username: flink
  password: ${secret_values.password}
  tables: test_db.user\.*
  server-id: 5401-5499
  #(Optional) Synchronize data from newly added tables during the incremental phase.
  scan.binlog.newly-added-table.enabled: true
  #(Optional) Synchronize table and field comments.
  include-comments.enabled: true
  #(Optional) Prioritize the distribution of unbounded shards to prevent potential Out Of Memory (OOM) issues on TaskManagers.
  scan.incremental.snapshot.unbounded-chunk-first.enabled: true
  #(Optional) Enable parsing and filtering to accelerate data reads.
  scan.only.deserialize.captured.tables.changelog.enabled: true


sink:
  type: paimon
  name: Paimon Sink
  using.built-in-catalog: paimon_dlf_catalog
  #(Optional) Specify a commit user. We recommend that you use a different commit user for each job to avoid conflicts.
  commit.user: your_job_name
  #(Optional) Enable deletion vectors to improve read performance.
  table.properties.deletion-vectors.enabled: true
  
route:
  # All sharded tables in the MySQL test_db database are merged into a single Paimon test_db.user table.
  - source-table: test_db.user\.*
    sink-table: test_db.user

pipeline:
  name: MySQL to Paimon Pipeline

İşi yeniden başlatırken mevcut tabloları ekleme

Mevcut tabloları senkronizasyona eklemek için scan.newly-added-table.enabled = true değerini ayarlayın ve işi yeniden başlatın.

Önemli

İş ilk olarak yeni tabloları yakalamak üzere scan.binlog.newly-added-table.enabled değerini true olarak ayarladıysa, mevcut tabloları yakalamak için scan.newly-added-table.enabled değerini true olarak ayarlayıp işi yeniden başlatmayın. Aksi takdirde veriler birden fazla kez teslim edilir.

source:
  type: mysql
  name: MySQL Source
  hostname: <yourHostname>
  port: 3306
  username: flink
  password: ${secret_values.password}
  tables: test_db.\.*
  server-id: 5401-5499
  scan.startup.mode: initial
  # On job restart, check the new tables captured by the tables parameter and take a snapshot.
  # Note: Must be used together with scan.startup.mode: initial.
  scan.newly-added-table.enabled: true
  #(Optional) Synchronize data from newly added tables during the incremental phase.
  scan.binlog.newly-added-table.enabled: true
  #(Optional) Synchronize table and field comments.
  include-comments.enabled: true
  #(Optional) Prioritize the distribution of unbounded shards to prevent potential Out Of Memory (OOM) issues on TaskManagers.
  scan.incremental.snapshot.unbounded-chunk-first.enabled: true
  #(Optional) Enable parsing and filtering to accelerate data reads.
  scan.only.deserialize.captured.tables.changelog.enabled: true


sink:
  type: paimon
  name: Paimon Sink
  using.built-in-catalog: paimon_dlf_catalog
  #(Optional) Specify a commit user. We recommend that you use a different commit user for each job to avoid conflicts.
  commit.user: your_job_name
  #(Optional) Enable deletion vectors to improve read performance.
  table.properties.deletion-vectors.enabled: true

pipeline:
  name: MySQL to Paimon Pipeline

Tüm veritabanı senkronizasyonunda belirli tabloları hariç tutma

Test tabloları veya tekrarlayan iş yük devretmelerine neden olan tablolar gibi belirli tabloları tüm veritabanı senkronizasyon işinden hariç tutmak için aşağıdaki yapılandırmayı kullanın:

source:
  type: mysql
  name: MySQL Source
  hostname: <yourHostname>
  port: 3306
  username: flink
  password: ${secret_values.password}
  tables: test_db.\.*
  # Tables that match this regular expression are not synchronized.
  tables.exclude: test_db.table1
  server-id: 5401-5499
  #(Optional) Synchronize data from newly added tables during the incremental phase.
  scan.binlog.newly-added-table.enabled: true
  #(Optional) Synchronize table and field comments.
  include-comments.enabled: true
  #(Optional) Prioritize the distribution of unbounded shards to prevent potential Out Of Memory (OOM) issues on TaskManagers.
  scan.incremental.snapshot.unbounded-chunk-first.enabled: true
  #(Optional) Enable parsing and filtering to accelerate data reads.
  scan.only.deserialize.captured.tables.changelog.enabled: true

sink:
  type: paimon
  name: Paimon Sink
  using.built-in-catalog: paimon_dlf_catalog
  #(Optional) Specify a commit user. We recommend that you use a different commit user for each job to avoid conflicts.
  commit.user: your_job_name
  #(Optional) Enable deletion vectors to improve read performance.
  table.properties.deletion-vectors.enabled: true

pipeline:
  name: MySQL to Paimon Pipeline

Tüm bir veritabanını Lance dosya biçimindeki Paimon tablolarına senkronize etme

Lance, vektör ve çok modlu veriler için tasarlanmış bir veri depolama biçimidir. Verileri Lance dosya biçimini kullanan Paimon tablolarına yazmak için file.format tablo oluşturma parametresini ayarlayın. Aşağıdaki örnek yapılandırmayı göstermektedir:

source:
  type: mysql
  name: MySQL Source
  hostname: <yourHostname>
  port: 3306
  username: flink
  password: ${secret_values.password}
  tables: test_db.\.*
  server-id: 5401-5499
  #(Optional) Synchronize data from newly added tables during the incremental phase.
  scan.binlog.newly-added-table.enabled: true
  #(Optional) Synchronize table and field comments.
  include-comments.enabled: true
  #(Optional) Prioritize the distribution of unbounded shards to prevent potential Out Of Memory (OOM) issues on TaskManagers.
  scan.incremental.snapshot.unbounded-chunk-first.enabled: true
  #(Optional) Enable parsing and filtering to accelerate data reads.
  scan.only.deserialize.captured.tables.changelog.enabled: true


sink:
  type: paimon
  name: Paimon Sink
  using.built-in-catalog: paimon_dlf_catalog
  #(Optional) Specify a commit user. We recommend that you use a different commit user for each job to avoid conflicts.
  commit.user: your_job_name
  #(Optional) Enable deletion vectors to improve read performance.
  table.properties.deletion-vectors.enabled: true
  # Specify the file format of output files as lance 
  table.properties.file.format: lance
pipeline:
  name: MySQL to Paimon Pipeline

EVOLVE modunu etkinleştirme

EVOLVE modu, aşağı akış tablosunun şemasını alan silme ve tablo silme gibi işlemler dahil olmak üzere yukarı akış tablosunun şemasıyla kesin olarak tutarlı hale getirir. Bu modda, aşağı akış tüm şema değişikliği olaylarını uygulayamazsa iş yük devredebilir ve müdahale olmadan kurtarılamayabilir. Aşağıdaki örnek iş yapılandırmasını göstermektedir:

source:
  type: mysql
  name: MySQL Source
  hostname: <yourHostname>
  port: 3306
  username: flink
  password: ${secret_values.password}
  tables: test_db.test_source_table
  server-id: 5401-5499
  #(Optional) Synchronize data from newly added tables during the incremental phase.
  scan.binlog.newly-added-table.enabled: true
  #(Optional) Synchronize table and field comments.
  include-comments.enabled: true
  #(Optional) Prioritize the distribution of unbounded shards to prevent potential Out Of Memory (OOM) issues on TaskManagers.
  scan.incremental.snapshot.unbounded-chunk-first.enabled: true
  #(Optional) Enable parsing and filtering to accelerate data reads.
  scan.only.deserialize.captured.tables.changelog.enabled: true

sink:
  type: paimon
  name: Paimon Sink
  using.built-in-catalog: paimon_dlf_catalog
  #(Optional) Specify a commit user. We recommend that you use a different commit user for each job to avoid conflicts.
  commit.user: your_job_name
  #(Optional) Enable deletion vectors to improve read performance.
  table.properties.deletion-vectors.enabled: true

pipeline:
  name: MySQL to Paimon Pipeline
  schema.change.behavior: evolve

SSS