Bu konu, Flink CDC veri alım işleri için Transform modülünün sözdizim kurallarını ve yerleşik işlevlerini açıklar.
Transform kuralı parametreleri
Transform modülü, veri sütunlarının doğrudan işlenmesini destekler. Veri senkronizasyonu sırasında mevcut sütunları silebilir veya genişletebilir ve istenmeyen verileri filtreleyebilirsiniz. Transform kurallarını tanımlamak için aşağıdaki parametreleri kullanın:
|
Parametre |
Açıklama |
Gerekli |
Notlar |
|
|
Dönüştürülecek kaynak tabloyu belirtir. |
Evet |
Normal ifadeleri destekler. |
|
|
Kaynak tablo için projeksiyon kuralını belirtir. Bu kural, dönüşüm sonrası tüm veri sütunlarını belirler. |
Hayır |
Sözdizimi SQL SELECT ifadesine benzer. Bu parametre belirtilmezse hiçbir sütun eklenmez veya silinmez. Daha fazla bilgi için bkz. Veri tarama. Kullanılabilir yerleşik işlevler hakkında bilgi için bkz. Flink CDC yerleşik işlevleri. |
|
|
Satır filtreleme kuralı. |
Hayır |
Sözdizimi SQL WHERE ifadesine benzer. Bu parametre belirtilmezse hiçbir satır filtrelenmez. |
|
|
Dönüşüm sonrası birincil anahtar sütunlarını belirtir. |
Hayır |
Bu parametre belirtilmezse orijinal şemadaki birincil anahtar tanımı korunur. Birincil anahtarlar virgülle ( Önemli
Varsayılan olarak kaynaktaki birincil anahtar sütunlarını silemezsiniz. Kaynak birincil anahtar sütunu sayısını azaltmak için Özel birincil anahtar sütunları tanımlarken, kaynak tablodan gelen verilerin PRIMARY KEY kısıtlamasına uyduğundan emin olun. Bölümler arası yazma işlemleri sırasında veri karışıklığı sorunlarını önlemek için kaynak tablonun birincil anahtar sütunlarını özel birincil anahtar sütunlarına dahil etmenizi öneririz. |
|
|
Dönüşüm sonrası bölüm anahtarı sütunlarının listesini belirtir. |
Hayır |
Bu parametre belirtilmezse orijinal şemadaki bölüm anahtarı tanımı korunur. Bölüm anahtarları virgülle ( Önemli
Özel bölüm anahtarı sütunları tanımlarken, bölümler arası yazma işlemleri sırasında veri karışıklığı sorunlarını önlemek için kaynak tablodan gelen verilerin PRIMARY KEY kısıtlamasına uyduğundan emin olun. |
|
|
Ekstra yapılandırma bilgilerini sink'e (hedefe) iletir. |
Hayır |
Paimon sink için paket sayısı veya açıklamalar gibi isteğe bağlı özelliklerin listesi. Yapılandırma öğeleri virgülle ( Örnek yapılandırma:
|
|
|
Transform kuralının açıklaması. |
Hayır |
Yok. |
|
|
Dönüşüm tamamlandıktan sonra verilerde ek işlemler yapan dönüştürücü. |
Hayır |
Daha fazla bilgi için bkz. Transform Sonrası Dönüştürücü. |
Notlar
Transform modülündeki bir ifadeyi değiştirdikten sonra işi durum içermeyen ilk başlangıç durumundan yeniden başlatmanız gerekir.
-
Genellikle
projectionvefilterifadelerinin tırnak içine alınması gerekmez.transform: - projection: a, b, c # Equivalent to - projection: "a, b, c"Ancak bir projeksiyon ifadesi
*veya'gibi özel bir karakterle başlıyorsa ifadenin tamamı geçerli bir YAML dize değişmezi olarak ayrıştırılamayabilir. Bu durumda ifadenin tamamını tek (') veya çift (") tırnak içine almanız veya karakterden kaçmak için ters eğik çizgi (\) kullanmanız gerekir.transform: - projection: *, 42 # Not valid YAML - projection: '*, 42' # OK - projection: \*, 42 # OK -
Ververica Runtime (VVR) 11,6 sürümünden itibaren kaynaktan çıkarılan birincil anahtar ayarlarını temizleyebilir ve tabloyu birincil anahtarı olmayan bir tabloya dönüştürebilirsiniz. Sözdizimi aşağıdaki gibidir:
transform: - source-table: db.tbl primary-keys: '' # Clears the PRIMARY KEY setting for the db.tbl table
Veri tarama
Transform modülü, veri tarama (projeksiyon) kurallarını tanımlamak için SQL benzeri bir sözdizimi kullanır. Bu kurallar belirli sütunları seçmenize, hesaplanan sütunlar eklemenize ve meta veri sütunları eklemenize olanak tanır.
Sütun budama
Kaynak tablodan belirli sütunları çıkarmak ve bunları hedefe senkronize etmek için projeksiyon kuralında istenen sütunları belirtebilirsiniz. Belirtilmeyen sütunlar hedefe gönderilmez.
transform:
- source-table: db.tbl
projection: col_1, col_3, col_4 # col_2 is pruned
Sütunların budanması, kaynak tablo şeması değişirse kaynak ve hedef tablo şemalarının tutarsız hale gelmesine neden olabilir.
Joker karakterler
Kaynak tablodaki tüm sütunları, sonradan eklenen yeni sütunlar da dahil olmak üzere değiştirilmeden hedefe göndermek için projeksiyon kuralında yıldız işareti (*) joker karakterini kullanabilirsiniz.
Bir projeksiyon kuralı joker karakter (*) kullanmazsa ortaya çıkan şema sabittir. Şema, projeksiyon kuralında belirtilen sürümle tutarlı kalır ve şema evrimi senkronize edilemez.
Örneğin *, 'extras' AS extras ifadesi, kaynak şemadaki sütunlardan sonra fazladan bir sütun eklendiğini gösterir. Kaynak şema evrimi yine de hedefe senkronize edilir.
transform:
- source-table: db.tbl
projection: \*, 'extras' AS extras
Hesaplanan sütunlar
Projeksiyon kuralında hesaplanan bir sütun eklemek için <Expression> AS <ColName> sözdizimini kullanabilirsiniz. İfade, kaynaktaki her kayıt için değerlendirilir ve sonuç ilgili sütunu doldurur.
Hesaplanan bir sütunun ifadesi, referans alınan sütun ondan önce gelse bile başka bir hesaplanan sütunun değerine referans veremez. Örneğin a, b AS c, c AS d geçerli bir ifade değildir.
Örneğin kaynak tablo db.tbl [+I, id = 1] veri kaydını gönderdiğinde kayıt [+I, id = 1, inc_id = 2] veri satırına dönüştürülür ve ardından hedefe gönderilir.
transform:
- source-table: db.tbl
projection: id, id + 1 AS inc_id
Meta veri sütunları
Projeksiyon kuralları yazarken aşağıdaki önceden tanımlanmış meta veri sütunlarını normal veri sütunlarıyla aynı şekilde kullanabilirsiniz:
Meta veri sütunlarıyla aynı ada sahip normal veri sütunları tanımlamayın.
Aşağıdaki meta veri sütunları tüm bağlayıcılara uygulanır.
|
Meta veri sütunu adı |
Veri türü |
Açıklama |
|
|
String |
Bu değişiklik kaydı için kaynak tablonun ad alanı adı. |
|
|
String |
Bu değişiklik kaydı için kaynak tablonun şema adı. |
|
|
String |
Bu değişiklik kaydı için kaynak tablonun tablo adı. |
|
|
String |
Bu değişiklik kaydı için işlem türü ( Önemli
CDC olayı her zaman bir güncelleme için Güncelleme Öncesi ve Güncelleme Sonrası kayıtlarını tek bir olayda paketler. Bu nedenle aynı güncelleme olayı içinde |
Örneğin kaynak tablonun tam nitelikli adını hesaplanan bir sütuna yazabilir ve hedefe gönderebilirsiniz.
transform:
- source-table: \.*.\.*
projection: \*, __namespace_name__ || __schema_name__ || __table_name__ AS identifier
Aşağıdaki tabloda veritabanı bağlayıcıları ile Ad Alanı, Şema ve Tablo adları arasındaki eşleme ilişkileri gösterilmektedir.
|
Veritabanı türü |
Ad alanı adı |
Şema adı |
Tablo adı |
|
MySQL |
- |
Veritabanı |
Tablo |
|
Kafka |
- |
- |
Konu |
|
SLS |
- |
Proje |
LogStore |
|
MongoDB |
- |
Veritabanı |
Koleksiyon |
|
Paimon |
- |
Veritabanı |
Tablo |
|
Hologres |
- |
Şema |
Tablo |
|
StarRocks |
- |
Veritabanı |
Tablo |
|
Doris |
- |
Veritabanı |
Tablo |
|
Postgres |
Veritabanı Not
Bu yalnızca |
Şema |
Tablo |
Veri filtreleme
Transform modülü, satır filtreleme kurallarını tanımlamak için SQL benzeri bir sözdizimi kullanır.
Filtre kuralı BOOLEAN değeri döndüren bir ifade olmalıdır. Kaynak tablodaki herhangi bir sütuna ve hesaplanan sütunlara referans verebilir.
Bir değişiklik kaydı filtreye sahip bir transform kuralıyla eşleşirse ve filtre ifadesi FALSE olarak değerlendirilirse veri satırı hedefe gönderilmez.
Projeksiyon kuralında mevcut bir kaynak sütunun üzerine yazmak için hesaplanan bir sütun kullanırsanız filtre ifadesi hesaplanan sütuna referans verir.
Örneğin aşağıdaki transform kuralı geçerlidir:
transform:
- source-table: db.tbl
projection: CAST(id AS VARCHAR) AS id
filter: CHAR_LENGTH(id) > 5
filter ifadesinde başvurulan id VARCHAR türüne dönüştürülen hesaplanan sütundur.
Dize deseni eşleştirme
Dize deseni eşleştirme gerçekleştirmek için filtre ifadelerinde LIKE ve NOT LIKE kullanın. Uygulama, SQL standardı LIKE'tan iki önemli açıdan farklı olan Java regex find() semantiğini kullanır:
• Desen bir Java düzenli ifadesidir. % ve _ joker karakter yerine regex değişmezleri olarak değerlendirilir.
• Eşleştirme alt dize semantiğini kullanır. TRUE döndürmek için desenin dizide herhangi bir konumda görünmesi yeterlidir; tüm dize eşleşmesi gerekli değildir.
Örnek: code sütunu HSRS ile başlayan kayıtları filtreleyin.
Aşağıdaki desen yanlış eşleşir — ABC_HSRS123 da eşleşir:
transform:
- source-table: db.orders
filter: code LIKE 'HSRS.*'
Doğru desen başlangıç çapası ^ kullanır:
transform:
- source-table: db.orders
filter: code LIKE '^HSRS'
Yaygın desen eşdeğerleri aşağıdaki gibidir:
| SQL sözdizimi | Eşdeğer CDC regex | Anlam |
|---|---|---|
col LIKE 'HSRS%' |
col LIKE '^HSRS' |
HSRS ile başlar |
col LIKE '%HSRS' |
col LIKE 'HSRS$' |
HSRS ile biter |
col LIKE '%HSRS%' |
col LIKE 'HSRS' |
HSRS içerir |
col LIKE 'HSRS' |
col LIKE '^HSRS$' |
Tamamen HSRS'ye eşittir |
Tam LIKE semantiği ve daha fazla regex eşdeğeri için bkz. Flink CDC yerleşik işlevleri.
Gelişmiş yapılandırma kuralları
Budanmamış sütunlara ve meta verilere referans verme
Örnek 1: Budanmış bir sütuna göre filtreleme
Kaynak tablo şemasının [INT a, INT b, BOOLEAN c] olduğunu varsayalım. a ve b sütunlarını çıktı olarak almak ve yalnızca c değeri true olan satırları tutmak için aşağıdaki yapılandırma kuralını kullanabilirsiniz:
transform:
- source-table: ...
projection: a, b
filter: c
Örnek 2: Meta veri sütunlarına göre filtreleme
Meta veri sütunlarını projection içinde açıkça tanımlamadan doğrudan filtre koşulu olarak kullanabilirsiniz. Örneğin DELETE türündeki değişiklik verilerini filtreleyebilirsiniz.
transform:
- source-table: db.tbl
projection: a, b
filter: __data_event_type__ <> '-D'
Mevcut sütunların üzerine yazma
projection içinde kaynak sütunla aynı ada sahip bir alan tanımlayarak o sütunun değerini veya türünü üzerine yazabilirsiniz. Bu yöntem şema evriminin doğru şekilde senkronize edilmesini sağlar.
Örnek: Zorla tür dönüştürme
Kaynak tablo şemasının [INT a, INT b, BOOLEAN c] olduğunu varsayalım. Sütun adlarını değiştirmeden tutarken a sütununu dize türüne zorla dönüştürmek için aşağıdaki yapılandırmayı kullanabilirsiniz:
transform:
- source-table: db.tbl
projection: \*, CAST(a AS VARCHAR) AS a
Hedef tablo şeması [STRING a, INT b, BOOLEAN c] haline gelir. Orijinal a sütunu yeni tanım tarafından üzerine yazılır.
Filtre koşullarında hesaplanan sütunları yeniden kullanma
Bir filter, bir projection içinde tanımlanan hesaplanan bir sütunun takma adına doğrudan referans verebilir.
Örnek: Hesaplanan sonuca referans verme
projection içinde yeni bir d sütunu tanımlayabilir ve bunu filter içinde doğrudan kullanabilirsiniz.
transform:
- source-table: db.tbl
projection: a, b, c, a + b + c AS d
filter: d > 100
Bu yapılandırma aşağıdakine aynı etkiye sahiptir ancak daha okunabilirdir:
transform:
- source-table: ...
projection: a, b, c, a + b + c AS d
filter: a + b + c > 100
Transform Sonrası Dönüştürücü
converter-after-transform tüm transform kuralları uygulandıktan sonra veri değişikliklerini işlemek için kullanılır. Birden çok dönüştürücüyü virgülle (,) ayırarak belirtebilirsiniz. Dönüştürücüler listelendikleri sırayla uygulanır. Aşağıdaki yapılandırma değerleri desteklenir.
|
|
|
|
|
|
|
|
|
|
|
|
Soft delete
SOFT_DELETE dönüştürücüsü, mantıksal silmeleri uygulamak için __data_event_type__ meta veri sütunuyla birlikte çalışır. Bu, verilerin hedef sistemde fiziksel olarak silinmediği anlamına gelir. Örneğin aşağıdaki transform yapılandırması mantıksal bir silme uygular. Bir silme işlemi ekleme işlemine dönüştürülür ve karşılık gelen veriler için op_type silmeyi belirtmek üzere -D olarak güncellenir.
transform:
- source-table: db.tbl
projection: \*, __data_event_type__ AS op_type
converter-after-transform: SOFT_DELETE
SOFT_DELETE dönüştürücüsü yalnızca __data_event_type__ değeri -D olan verileri dönüştürür. __data_event_type__ değeri -U olan verileri de yoksaymak için filter: op_type <> '-U' yapılandırmasını ekleyin.
transform:
- source-table: db.tbl
projection: \*, __data_event_type__ AS op_type
filter: op_type <> '-U'
converter-after-transform: SOFT_DELETE