Tüm Ürünler
Search
Belge Merkezi

Realtime Compute for Apache Flink:ClickHouse connector

Son Güncelleme:Oct 04, 2026

Bu konu, ClickHouse connector kullanarak verilerin ClickHouse'a nasıl yazılacağını açıklar.

Arka plan bilgileri

ClickHouse, Çevrimiçi Analitik İşleme (OLAP) için kullanılan sütun tabanlı bir veritabanı yönetim sistemidir. Daha fazla bilgi için bkz. ClickHouse Nedir?.

Aşağıdaki tabloda ClickHouse connector'ın yetenekleri açıklanmaktadır.

Kategori

Ayrıntılar

Desteklenen tür

Yalnızca sonuç tablosu

Çalıştırma modu

Toplu iş ve akış modları

Veri formatı

Uygulanabilir değil

Connectora özel ölçümler

  • numRecordsOut

  • numRecordsOutPerSecond

  • currentSendTime

Not

Bu ölçümler hakkında daha fazla bilgi için bkz. İzleme ölçümleri.

API türü

SQL

Sonuç tablosundaki verilerin güncellenmesini veya silinmesini destekleme

Flink sonuç tablosunun DDL'sinde birincil anahtar belirtirseniz ve ignoreDelete parametresini false olarak ayarlarsanız connector güncellemeleri ve silmeleri destekler. Ancak bu seçenek performansı önemli ölçüde düşürür.

Özellikler

  • Verileri doğrudan ClickHouse dağıtılmış tablosunun yerel tablolarına yazın.

  • Alibaba Cloud E-MapReduce (EMR) üzerindeki ClickHouse'a yazarken tam olarak bir kez (exactly-once) semantiği elde edin.

Ön koşullar

Sınırlamalar

  • sink.parallelism parametresi desteklenmez.

  • Varsayılan olarak ClickHouse sink en az bir kez (at-least-once) semantiği sağlar.

  • ClickHouse connector yalnızca Ververica Runtime (VVR) 3.0.2 ve sonraki sürümlerde desteklenir.

  • ignoreDelete seçeneği yalnızca VVR 3.0.3, VVR 4.0.7 ve sonraki sürümlerde desteklenir.

  • ClickHouse Nested veri türü yalnızca VVR 4.0.10 ve sonraki sürümlerde desteklenir.

  • Dağıtılmış bir tablonun yerel tablolarına doğrudan yazma işlemi yalnızca VVR 4.0.11 ve sonraki sürümlerde desteklenir.

  • EMR üzerindeki ClickHouse'a yazmak için tam olarak bir kez (exactly-once) semantiği yalnızca VVR 4.0.11 ve sonraki sürümlerde kullanılabilir. Ancak ürün yeteneklerindeki değişiklikler nedeniyle bu semantik, ClickHouse on EMR v3.45.1 ve v5.11.1'den sonraki sürümler için kullanılamaz.

  • Verileri yerel tablo düğümleri arasında eşit şekilde dağıtan balance yazma modu yalnızca VVR 8.0.7 ve sonraki sürümlerde kullanılabilir.

  • ClickHouse yerel tabloya yazma işlemi yalnızca ApsaraDB for ClickHouse Community uyumlu Sürüm için desteklenir.

  • Bir ClickHouse kataloğu kaydederken varsayılan veritabanı adı tire (-) içeremez. Aksi takdirde JDBC URL doğrulaması başarısız olur.

Söz dizimi

CREATE TABLE clickhouse_sink (
  id INT,
  name VARCHAR,
  age BIGINT,
  rate FLOAT
) WITH (
  'connector' = 'clickhouse',
  'url' = '<yourUrl>',
  'userName' = '<yourUsername>',
  'password' = '<yourPassword>',
  'tableName' = '<yourTablename>',
  'maxRetryTimes' = '3',
  'batchSize' = '8000',
  'flushIntervalMs' = '1000',
  'ignoreDelete' = 'true',
  'shardWrite' = 'false',
  'writeMode' = 'partition',
  'shardingKey' = 'id'
);

WITH parametreleri

Parametre

Açıklama

Tür

Gerekli

Varsayılan

Açıklamalar

connector

Sonuç tablosunun türü.

String

Evet

Yok

Değeri clickhouse olarak ayarlayın.

url

ClickHouse kümenizin JDBC URL'si.

String

Evet

Yok

URL formatı jdbc:clickhouse://<yourNetworkAddress>:<port>/<yourDatabaseName>. Doğrudan yerel bir tabloya yazarken, ClickHouse'ta select * from system.clusters komutunu çalıştırarak düğüm IP adresini alabilirsiniz. Bir veritabanı adı belirtmezseniz default veritabanı kullanılır.

Not

Verileri bir ClickHouse dağıtılmış tablosuna yazmak istiyorsanız url, dağıtılmış tabloyu barındıran kümedeki bir düğümün JDBC URL'si olmalıdır.

userName

ClickHouse'a erişmek için kullanılan kullanıcı adı.

String

Evet

Yok

Yok

password

ClickHouse'a erişmek için kullanılan parola.

String

Evet

Yok

Yok

tableName

ClickHouse tablosunun adı.

String

Evet

Yok

Yok

maxRetryTimes

Sonuç tablosuna veri ekleme girişiminin başarısız olması durumunda gerçekleştirilecek maksimum yeniden deneme sayısı.

Int

Hayır

3

Yok

batchSize

Tek bir toplu işte yazılacak kayıt sayısı.

Int

Hayır

100

Önbellekteki veri girişi sayısı batchSize parametresinin değerine ulaştığında veya bekleme süresi flushIntervalMs değerini aştığında sistem verileri önbellekten ClickHouse tablosuna otomatik olarak yazar.

flushIntervalMs

Arabelleğin boşaltılması için milisaniye cinsinden zaman aralığı.

Long

Hayır

1000

Birim milisaniyedir.

ignoreDelete

Silme mesajlarının yoksayılıp yoksayılmayacağını belirtir.

Boolean

Hayır

true

Geçerli değerler:

  • true (varsayılan): Silme mesajlarını yoksayar.

  • false: Silme mesajlarını yoksaymaz.

    Bu seçenek false olarak ayarlanır ve DDL'de birincil anahtar tanımlanırsa connector ClickHouse'taki verileri silmek için bir ALTER ifadesi kullanır.

Not

ignoreDelete değerini false olarak ayarlarsanız partition yazma modunu kullanamazsınız.

shardWrite

Bir ClickHouse dağıtılmış tablosu için verilerin doğrudan alttaki yerel tablolara yazılıp yazılmayacağını belirtir.

Boolean

Hayır

false

Geçerli değerler:

  • false (varsayılan): Connector verileri dağıtılmış tabloya yazar ve dağıtılmış tablo verileri ilgili yerel tablolara yönlendirir. tableName parametresi dağıtılmış tablonun adı olmalıdır.

  • true: Connector verileri dağıtılmış tabloyu atlayarak doğrudan yerel tablolara yazar.

    Yazma aktarım hızını artırmak için bu yöntem önerilir.

    • url içinde hangi yerel tablolara yazılacağını manuel olarak belirtmek istiyorsanız tableName yerel tablonun adı olmalıdır. Örnek:

      'url' = 'jdbc:clickhouse://192.XX.XX.1:3002,192.XX.XX.2:3002/default'
          'tableName' = 'local_table'
    • Düğümleri manuel olarak belirtmek istemiyorsanız Flink'in yerel tablo düğümlerini otomatik olarak keşfetmesini sağlamak için inferLocalTable parametresini true olarak ayarlayabilirsiniz. Bu durumda tableName dağıtılmış tablonun adı olmalı ve url kümedeki bir düğümün JDBC URL'si olmalıdır. Örnek:

      'url' = 'jdbc:clickhouse://192.XX.XX.1:3002/default' // Kümedeki bir düğümün JDBC URL'si.
          'tableName' = 'distribute_table'

inferLocalTable

Bir ClickHouse dağıtılmış tablosuna yazarken alttaki yerel tabloların otomatik olarak keşfedilip edilmeyeceğini ve doğrudan bunlara yazılıp yazılmayacağını belirtir.

Boolean

Hayır

false

Geçerli değerler:

  • false (varsayılan): Dağıtılmış bir tabloya yazıyorsanız ve url parametresinde yalnızca bir düğüm belirtiyorsanız connector yerel tabloları keşfetmeye çalışmaz. Verileri dağıtılmış tabloya yazar ve dağıtılmış tablo verileri yerel tablolara yönlendirir.

  • true: Flink yerel tabloları keşfetmeye çalışır ve doğrudan bunlara yazar. Bunun için shardWrite değerinin true, tableName değerinin dağıtılmış tablonun adı ve url değerinin kümedeki bir düğümün JDBC URL'si olarak ayarlanmış olması gerekir.

Not

Dağıtılmamış bir tabloya yazarken bu parametre yoksayılır.

writeMode

Dağıtılmış bir tablonun yerel tablolarına veri yazma stratejisi.

Enum

Hayır

default

Geçerli değerler:

  • default (varsayılan): Her zaman URL'de belirtilen ilk düğümdeki yerel tabloya yazar.

  • partition: Verileri bir parçalama anahtarına göre dağıtır ve aynı anahtara sahip kayıtların aynı yerel tablo düğümüne yazılmasını sağlar.

  • random: Verileri rastgele seçilen bir yerel tablo düğümüne yazar.

  • balance: Verileri tüm yerel tablo düğümlerine eşit şekilde dağıtmak için round-robin stratejisi kullanır.

Not

writeMode değerini partition olarak ayarlarsanız ignoreDelete değerini true olarak ayarlamanız gerekir.

shardingKey

Verileri yerel tablo düğümleri arasında bölmek için kullanılan anahtar.

String

Hayır

Yok

writeMode değeri 'partition' olarak ayarlandığında shardingKey parametresi gereklidir. Virgülle (,) ayrılmış birden çok alan içerebilir.

exactlyOnce

Tam olarak bir kez (exactly-once) semantiğinin etkinleştirilip etkinleştirilmeyeceğini belirtir.

Boolean

Hayır

false

Geçerli değerler:

  • true: Tam olarak bir kez semantiğini etkinleştirir.

  • false (varsayılan): Tam olarak bir kez semantiğini devre dışı bırakır.

Not
  • Tam olarak bir kez semantiği yalnızca EMR üzerindeki ClickHouse'a yazmak için desteklenir. Bu parametreyi yalnızca sink'iniz EMR üzerinde bir ClickHouse kümesi ise true olarak ayarlayın.

  • Parçalama stratejisiyle ClickHouse yerel tablolarına yazmak için tam olarak bir kez semantiği desteklenmez. Bu nedenle exactlyOnce değeri true olarak ayarlanırsa writeMode değeri partition olarak ayarlanamaz.

Veri türü eşlemesi

Flink türü

ClickHouse türü

BOOLEAN

UInt8 / Boolean

Not

ClickHouse v21.12 ve sonraki sürümler Boolean türünü destekler. Daha önceki sürümler için Flink BOOLEAN türü ClickHouse UInt8 türüne eşlenir.

TINYINT

Int8

SMALLINT

Int16

INTEGER

Int32

BIGINT

Int64

BIGINT

UInt32

FLOAT

Float32

DOUBLE

Float64

CHAR

FixedString

VARCHAR

String

BINARY

FixedString

VARBINARY

String

DATE

Date

TIMESTAMP(0)

DateTime

TIMESTAMP(x)

Datetime64(x)

DECIMAL

DECIMAL

ARRAY

ARRAY

Nested

Not

ClickHouse connector Flink TIME, MAP, MULTISET ve ROW türlerini desteklemez.

ClickHouse Nested veri türünü kullanmak için bunu Flink'te bir ARRAY türüne eşlemeniz gerekir. Örneğin:

-- ClickHouse
CREATE TABLE visits (
  StartDate Date,
  Goals Nested
  (
    ID UInt32,
    OrderID String
  )
  ...
);

Türleri aşağıdaki gibi eşleyin:

-- Flink
CREATE TABLE visits (
  StartDate DATE,
  `Goals.ID` ARRAY<LONG>,
  `Goals.OrderID` ARRAY<STRING>
);
Not

6.0.6'dan önceki VVR sürümlerinde resmi ClickHouse JDBC sürücüsü ile DateTime64 verileri yazıldığında değerler saniyeye kırpıldığı için hassasiyet kaybı yaşanıyordu. Bu nedenle yalnızca TIMESTAMP(0) gibi saniye düzeyinde hassasiyete sahip TIMESTAMP verileri başarıyla yazılabiliyordu. VVR 6.0.6 ve sonraki sürümler bu sorunu çözer ve doğru DateTime64 veri yazmaya olanak tanır.

Örnekler

  • Örnek 1: Tek düğümlü bir tabloya yazma.

    CREATE TEMPORARY TABLE clickhouse_source (
      id INT,
      name VARCHAR,
      age BIGINT,
      rate FLOAT
    ) WITH (
      'connector' = 'datagen',
      'rows-per-second' = '50'
    );
    
    CREATE TEMPORARY TABLE clickhouse_output (
      id INT,
      name VARCHAR,
      age BIGINT,
      rate FLOAT
    ) WITH (
      'connector' = 'clickhouse',
      'url' = '<yourUrl>',
      'userName' = '<yourUsername>',
      'password' = '<yourPassword>',
      'tableName' = '<yourTablename>'
    );
    
    INSERT INTO clickhouse_output
    SELECT
      id,
      name,
      age,
      rate
    FROM clickhouse_source;
  • Örnek 2: Dağıtılmış bir tabloya yazma.

    192.XX.XX.1, 192.XX.XX.2 ve 192.XX.XX.3 düğümlerinde bulunan local_table_test adlı üç yerel tablodan oluşturulan distributed_table_test adlı bir dağıtılmış tablo olduğunu varsayalım.

    • Flink'in verileri doğrudan yerel tablolara yazmasını ve verileri bir anahtara göre bölmesini istiyorsanız aşağıdaki DDL'yi kullanın:

      CREATE TEMPORARY TABLE clickhouse_source (
        id INT,
        name VARCHAR,
        age BIGINT,
        rate FLOAT
      ) WITH (
        'connector' = 'datagen',
        'rows-per-second' = '50'
      );
      
      CREATE TEMPORARY TABLE clickhouse_output (
        id INT,
        name VARCHAR,
        age BIGINT,
        rate FLOAT
      ) WITH (
        'connector' = 'clickhouse',
        'url' = 'jdbc:clickhouse://192.XX.XX.1:3002,192.XX.XX.2:3002,192.XX.XX.3:3002/default',
        'userName' = '<yourUsername>',
        'password' = '<yourPassword>',
        'tableName' = 'local_table_test',
        'shardWrite' = 'true',
        'writeMode' = 'partition',
        'shardingKey' = 'name'
      );
      
      INSERT INTO clickhouse_output
      SELECT
        id,
        name,
        age,
        rate
      FROM clickhouse_source;
    • Flink'in yerel tablo düğümlerini URL'de manuel olarak belirtmek yerine otomatik olarak keşfetmesini istiyorsanız aşağıdaki DDL'yi kullanın:

      CREATE TEMPORARY TABLE clickhouse_source (
        id INT,
        name VARCHAR,
        age BIGINT,
        rate FLOAT
      ) WITH (
        'connector' = 'datagen',
        'rows-per-second' = '50'
      );
      
      CREATE TEMPORARY TABLE clickhouse_output (
        id INT,
        name VARCHAR,
        age BIGINT,
        rate FLOAT
      ) WITH (
        'connector' = 'clickhouse',
        'url' = 'jdbc:clickhouse://192.XX.XX.1:3002/default', -- The JDBC URL of a node in the cluster.
        'userName' = '<yourUsername>',
        'password' = '<yourPassword>',
        'tableName' = 'distributed_table_test', -- The name of the distributed table.
        'shardWrite' = 'true',
        'inferLocalTable' = 'true', -- Set inferLocalTable to true.
        'writeMode' = 'partition',
        'shardingKey' = 'name'
      );
      
      INSERT INTO clickhouse_output
      SELECT
        id,
        name,
        age,
        rate
      FROM clickhouse_source;

SSS