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
connectorparametresini 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 ( ... );NotPaimon 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. ... );NotYol örneği:
'path' = 'oss://<bucket>/test/order.db/orders'..dbson 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/testveoss://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 |
|
|
path |
Tablonun depolama yoludur. |
String |
Hayır |
Yok |
|
|
auto-create |
Belirtilen yolda tablo dosyaları yoksa otomatik olarak oluşturulup oluşturulmayacağını belirtir. |
Boolean |
Hayır |
false |
Geçerli değerler:
|
|
file.format |
Veri dosyalarının biçimidir. |
String |
Hayır |
parquet |
Geçerli değerler:
|
|
bucket |
Bölüm başına paket sayısıdır. |
Integer |
Hayır |
1 |
Paimon, verileri 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, Not
|
|
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
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 |
|
merge-engine |
Aynı birincil anahtara sahip kayıtları birleştirme mekanizmasıdır. |
String |
Hayır |
deduplicate |
Geçerli değerler:
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:
Not
|
|
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
|
|
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.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 |
|
write-mode |
Paimon tablosu için yazma modudur. |
String |
Hayır |
change-log |
Geçerli değerler:
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:
|
|
scan.parallelism |
Paimon kaynak tablosu için paralelliktir. |
Integer |
Hayır |
Yok |
Not
İşin 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 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, 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ışı:
Not
|
|
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. |
Yapılandırma seçenekleri hakkında daha fazla bilgi için Apache Paimon Resmi Belgeleri adresine bakın.
Vektör tablosu parametreleri
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 |
|
|
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. |
|
|
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. |
|
|
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. |
|
|
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. |
|
|
Lumina DiskANN arama ışın genişliği. |
Integer |
Hayır |
4 |
— |
|
|
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:
İlk sütun birincil anahtar ise nihai birleştirilmiş kayıt <1, 25.2, 10, 'This is a book'> olur. Not
|
|
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
Not
|
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 |
Ö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. Not
Veritabanı gibi downstream tüketiciniz |
|
Input |
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 |
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 |
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 |
|
|
Append-only |
|
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 |
|
|
false |
Variant okuma budamasını etkinleştirmek için |
Ö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-descriptorseç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 |
|
|
STRING literal |
Blob sütununu içeren Paimon tablosu. Format: |
|
|
BYTES |
BlobDescriptor baytları. |
|
|
INTERVAL |
URL'nin geçerlilik süresi. Değer pozitif bir saniye sayısı olmalıdır. Örnek: |
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') */;
descriptor_to_presigned_urlsatır düzeyindeki bir hatada özel durum fırlatır.try_descriptor_to_presigned_urlsatı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 |
|
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 |
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. |
-- 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öğesinitrueolarak ayarlayın. Bunun bedeli iş başlatma sırasında daha ağır bir taramadır.Artımlı aşama: İş,
deltadalından yeni commitleri sürekli olarak okur.
SET 'execution.runtime-mode' = 'streaming';
INSERT INTO downstream_sink SELECT * FROM `default`.`t`;
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.
bucketvebucket-keybelirtmeniz gerekir.Her dalın şeması tutarlı olmalıdır.
Zincir tablo
sequence.fieldgerektirir.first-rowveaggregationbirleştirme motorları desteklenmez.Akış okuma ve arama birleşimi,
deltadalınındeduplicatebirleştirme motorunu (varsayılan değer) kullanmasını gerektirir. Toplu okuma bundan etkilenmez.Silme vektörleri yalnızca
deduplicatebirleştirme motorunu kullanan zincir tablolar için desteklenir.changelog-produceriçin yalnızcanone(varsayılan değer) veinputdesteklenir.lookupvefull-compactionmodları desteklenmez. Değernoneise 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-Dve-Ukayıtları atılır. Downstream tüketicilerin çapraz bölüm değişiklik günlüğü kayıtlarını alması gerekiyorsa değeriinputolarak ayarlayın.Akış okuma ve arama birleşimi yalnızca varsayılan başlangıç modunu (
latest-full) destekler.scan.snapshot-id,scan.timestamp-millisgibi bir başlangıç konumu belirtirseniz,scan.modeöğesinilatestolarak ayarlarsanız veyaconsumer-idkullanırsanız hata oluşur. Zincir tablo mantığı olmadan standart bir akış okuma gerçekleştirmek içint$branch_deltagibi belirli bir dal tablosunu okuyun.Zincir tablo akış okumalarında ve arama birleşimlerinde bölüm filtreleri desteklenmez. Buna
WHEREyan tümcesindeki bölüm sütunları vescan.partitionsseç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-formattereksiksiz 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,mves) 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 |
|
|
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. |
|
|
(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. |
|
|
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. |
|
|
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, |
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 |
|
|
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;
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 |
|
name |
Havuz adı. |
Hayır |
STRING |
Yok |
|
|
catalog.properties.metastore |
Paimon katalog türü. |
Hayır |
STRING |
filesystem |
Geçerli değerler:
|
|
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:
|
|
catalog.properties.warehouse |
Dosya depolama için kök dizin. |
Hayır |
STRING |
Yok |
Bu parametre yalnızca |
|
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 |
|
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.
Önemli
|
|
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 |
|
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:
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.
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.
İş 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
Paimon işi neden "Heartbeat of TaskManager timed out" hatasıyla başarısız olabilir?
Paimon işi neden "Sink materializer must not be used with Paimon sink" hatasıyla başarısız olabilir?
Paimon işi neden "File xxx not found, Possible causes" hatasıyla başarısız olabilir?
Paimon bağlayıcı verisi görünürlüğü kontrol noktası aralıklarıyla ilgili midir?