ClickHouse Kafka 数据接入 —— Schema 修改流程

这个流程针对 Kafka 数据实时接入 ClickHouse 的情况下,

Schema 增加字段的同时,能够保证实时数据进入 ClickHouse 的 EOS。


DETACH 物化视图

停止 Kakfa 数据的消费

1
DETACH TABLE source_target_mv;

删除 kafka_source 表

因为后续要 ATTACH 物化视图,所以先删掉 kafka_source

防止消费 kafka_source 的数据

1
DROP table kafka_source;

修改 target 表

1
2
-- 增加字段
alter table target add column jg String;

ATTACH 物化视图

这里 ATTACH 物化视图看起来很奇怪

不直接删除物化视图,而是先 ATTACH 物化视图

因为在 DETACH 状态的物化视图是不能执行删除操作的

1
ATTACH TABLE source_target_mv;

删除物化视图

1
DROP VIEW source_target_mv;

重建 kafka_source

在重建物化视图前先重建 kafka_source,因为创建物化视图会检查 kafka_source 是否存在

如果 kafka_source 不存在,物化视图创建会报错

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE kafka_source (
ts UInt64,
level String,
message String,
jg String
)
ENGINE = Kafka
SETTINGS kafka_broker_list = '10.0.15.130:9092,10.0.15.131:9092,10.0.15.132:9092',
kafka_topic_list = 'ck_test',
kafka_group_name = 'test01',
kafka_format = 'JSONEachRow',
kafka_num_consumers = 2;

重建物化视图

1
2
3
4
5
6
7
CREATE MATERIALIZED VIEW source_target_mv TO target AS
SELECT
toDateTime(ts) AS ts,
level,
message,
jg
FROM kafka_source;