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 |
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 |
Ö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
Bir ClickHouse tablosu oluşturun. Daha fazla bilgi için bkz. Yeni tablo oluşturma.
-
Bir izin listesini yapılandırın.
ApsaraDB for ClickHouse kullanıyorsanız bkz. İzin listesi yapılandırma.
Alibaba Cloud E-MapReduce (EMR) üzerinde ClickHouse kullanıyorsanız bkz. Güvenlik gruplarını yönetme.
Bir ECS örneğinde kendi yönettiğiniz bir ClickHouse kümesi kullanıyorsanız bkz. Güvenlik grubuna genel bakış.
Diğer tüm kurulumlar için, ClickHouse'un dağıtıldığı makinede Realtime Compute for Apache Flink dağıtımından erişime izin vermek üzere izin listesini yapılandırın.
NotRealtime Compute for Apache Flink için vSwitch ağ segmentini görüntülemek üzere bkz. İzin listesi nasıl yapılandırılır?.
Sınırlamalar
sink.parallelismparametresi 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.
ignoreDeleteseç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
balanceyazma 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ı Not
Verileri bir ClickHouse dağıtılmış tablosuna yazmak istiyorsanız |
|
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:
Not
|
|
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:
|
|
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:
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:
Not
|
|
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:
Not
|
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 |
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>
);
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;
-