Tüm Ürünler
Search
Belge Merkezi

Realtime Compute for Apache Flink:Flink CDC Transform module

Son Güncelleme:Oct 04, 2026

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

source-table

Dönüştürülecek kaynak tabloyu belirtir.

Evet

Normal ifadeleri destekler.

projection

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.

filter

Satır filtreleme kuralı.

Hayır

Sözdizimi SQL WHERE ifadesine benzer.

Bu parametre belirtilmezse hiçbir satır filtrelenmez.

primary-keys

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 (,) ayrılır.

Önemli

Varsayılan olarak kaynaktaki birincil anahtar sütunlarını silemezsiniz. Kaynak birincil anahtar sütunu sayısını azaltmak için transform.allow.trimming.pk-columns parametresini pipeline: yapılandırmasına ekleyin.

Ö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.

partition-keys

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 (,) ayrılır.

Ö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.

table-options

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 (,) ayrılır. Her öğenin anahtarı ve değeri eşittir işaretiyle (=) ayrılır.

Örnek yapılandırma:

key1=value1,key2=value2

description

Transform kuralının açıklaması.

Hayır

Yok.

converter-after-transform

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 projection ve filter ifadelerinin 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
Önemli

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.

Not

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.

Not

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:

Önemli

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

__namespace_name__

String

Bu değişiklik kaydı için kaynak tablonun ad alanı adı.

__schema_name__

String

Bu değişiklik kaydı için kaynak tablonun şema adı.

__table_name__

String

Bu değişiklik kaydı için kaynak tablonun tablo adı.

__data_event_type__

String

Bu değişiklik kaydı için işlem türü (+I, -U, +U veya -D).

Ö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 __data_event_type__ içeriği sırasıyla -U ve +U olur. Bunu birincil anahtar olarak kullanmayın.

Ö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 table-id.include-database parametresi etkinleştirildiğinde geçerlidir.

Ş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.

Not

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.


Dönüştürücü adı


Özellik


Desteklenen sürümler


SOFT_DELETE


Silme değişikliklerini ekleme işlemlerine dönüştürür.


VVR 8.0.11 ve sonraki sürümler.


FIELD_NAME_LOWER_CASE


Tüm tablo alan adlarını küçük harfe dönüştürür.


VVR 11.1 ve sonraki sürümler.

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