我目前正在从事一个项目,该项目需要从Kafka主题(JSON格式)中提取数据,并将其直接写入Clickhouse。我遵循了Clickhouse documentation中建议的方法:
第1步:创建了一个Clickhouse使用者,该使用者可以写入表格(例如,level1)。
第2步:我对“ level1”执行了选择查询,它给了我一系列结果,但并不是特别有用,因为它只能读取一次。
第3步:我创建了一个物化视图,该视图将来自引擎(级别1)的数据转换为原始数据(例如,级别2)。在写入“ level2”时,聚合处于一天级别(通过将level1中的时间戳转换为日期时间来完成)。
因此,“ level2”中的数据:-天+“ level1”中的所有列
我打算将此视图(级别2)用作将来任何聚合(例如,级别3)的基础
问题1:正在创建“ level2”,但未在其中填充数据,即,当我在视图上执行基本的select查询(从level2限制10中选择*)时,输出为“集合中有0行”。
是因为日级汇总,还是可能在一天结束时填充?我可以实时从“ level2”中提取数据吗?
问题2:是否可以从引擎“ level1”多次读取相同的数据?
问题3:是否可以在从kafka主题中读取内容时将Avro转换为JSON?还是Clickhouse可以将数据(以Avro格式)直接写入“ level1”而不进行任何转换?
编辑:从Kafka检索数据时,Clickhouse中存在延迟。必须在我的Clickhouse服务器的user.xml文件中制作changes(更改max_block_size)。
答案 0 :(得分:0)
问题1:正在创建“ level2”,但未在其中填充数据,即,当我在视图上执行基本选择查询(从level2限制10中选择*)时,输出为“集合中有0行“。
这可能与kafka存储的默认设置有关,该默认设置总是开始使用最新偏移量的数据。您可以通过添加此行为来更改行为
<kafka>
<auto_offset_reset>earliest</auto_offset_reset>
</kafka>
到config.xml
问题2:是否可以从引擎“ level1”中多次读取相同的数据?
您最好避免直接从kafka存储中读取。您可以为“ level1”设置专用的物化视图M1
,并使用它来填充“ level2”。然后从M1
读取是可重复的。
问题3:在从kafka主题中读取内容时,是否可以将Avro转换为JSON?还是Clickhouse可以将数据(以Avro格式)直接写入“ level1”而不进行任何转换?
不是,尽管您可以尝试使用Cap'n Proto,它应该提供与Avro类似的性能,并且ClickHouse直接支持。