使用物化視圖將kafka數據導入到clickhouse


--------------------kafka通過物化視圖導入clickhouse--------------
step1: 啟動zk和kafka
step2:創建一個topic
./kafka-topics.sh --zookeeper localhost:2181 --create --topic test --replication-factor 3 --partitions 2

step3:創建一個生產者用於生產數據
./kafka-console-producer.sh --broker-list localhost:9092 --topic test

step4:創建一個消費之用於查看數據
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test         #不加--from-beginning 從最新的一條消息開始消費

step5:在clickhouse中創建一個物理表
create table kafka_table (
    id Int16,
    code String,
    name Nullable(String),
    insert_time DateTime DEFAULT now(),
    update_time Date  DEFAULT toDate(now())
    ) engine = MergeTree () order by id;

step6:在clickhouse中創建一個kafka引擎表
create table kafka_queue
(
 id   Int16,
 code String,
 name String
  ) engine = Kafka ()
  settings
  kafka_broker_list = '192.168.235.140:9092',
  kafka_topic_list = 'test',
  kafka_group_name = 'test_group',
  kafka_format = 'JSONEachRow',
  kafka_skip_broken_messages = 10;

step7:在clickhouse中創建一個物化視圖
 create materialized view consumer TO kafka_table 
 as
 select id,code,name from kafka_queue;

step8:在生產中生產數據
{"id":12,"code":"12","name":null}
{"id":2,"code":"2","name":"2"}
{"id":3,"code":"3","name":""}
{"id":4,"code":null,"name":""}

--結論:在生產者發送數據后,當所有字段都非null時會寫入ch,
當某個字段為null時,該條數據不能寫入ch,即使在創建物理表時設定了Nullable,但不會導致程序異常,只是不能寫入這條記錄。
但是當創建物理表是設定了Nullable並且kafka引擎表在創建時也給定這個字段Nullable()時,此時這個字段為null值時,該條記錄才會被成功寫入,但是ch中該字段為null值。
當缺失某個字段,這條記錄一樣會被同步到ch,缺失的字段value為null,
當json消息多出一些字段,這條記錄一樣會被同步到ch,多余的字段會被忽略。
ch物理表中的字段如果有Nullable修飾,則kafka引擎表中對應的字段也需要有Nullable修飾。如果不一致會停止接受數據。

停止接收主題數據或更改轉換邏輯,請 detach 物化視圖:
 DETACH TABLE consumer;
修改完成后重新創建視圖,可繼續進行作業
create materialized view consumer TO kafka_table as select id,code,name from kafka_queue;



ref:https://blog.csdn.net/ffb920724/article/details/113114629

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM