【发布时间】:2020-12-11 03:51:12
【问题描述】:
如果是平面 JSON 文档,Clickhouse 绝对可以从 Kafka 读取 JSON 消息。
我们在 Clickhouse 中使用kafka_format = 'JSONEachRow' 表示这一点。
这是我们目前使用它的方式:
CREATE TABLE topic1_kafka
(
ts Int64,
event String,
title String,
msg String
) ENGINE = Kafka
SETTINGS kafka_broker_list = 'kafka1test.intra:9092,kafka2test.intra:9092,kafka3test.intra:9092',
kafka_topic_list = 'topic1', kafka_num_consumers = 1, kafka_group_name = 'ch1',
kafka_format = 'JSONEachRow'
只要生产者将平面 JSON 发送到 topic1_kafka 就可以了。但并非所有生产者都发送平面 JSON,大多数应用程序会生成这样的嵌套 JSON 文档:
{
"ts": 1598033988,
"deviceId": "cf060111-dbe6-4aa8-a2d0-d5aa17f45663",
"location": [39.920515, 32.853708],
"stats": {
"temp": 71.2,
"total_memory": 32,
"used_memory": 21.2
}
}
很遗憾,上面的 JSON 文档与 JSONEachRow 不兼容,因此 ClickHouse 无法将 JSON 文档中的字段映射到表中的列。
有没有办法进行这种映射?
编辑:我们想将嵌套的 json 映射到这样的平面表:
CREATE TABLE topic1
(
ts Int64,
deviceId String,
location_1 Float64,
location_2 Float64,
stats_temp Float64,
stats_total_memory Float64,
stats_used_memory Float64
) ENGINE = MergeTree()
【问题讨论】:
标签: json apache-kafka clickhouse