Clickhouse 中的物化视图未填充

Materialised View in Clickhouse not populating

我目前正在做一个项目,需要从 Kafka 主题(JSON 格式)中提取数据,并将其直接写入 Clickhouse。我按照 Clickhouse documentation:

中建议的方法进行操作

第 1 步:创建了一个写入 table(例如,level1)的 clickhouse 消费者。

第 2 步:我在 'level1' 上执行了 select 查询,它给了我一组结果,但不是特别有用,因为它可以只读一次。

第 3 步:我创建了一个物化视图,它转换来自引擎 (level1) 的数据并将其放入先前创建的 table(例如,level2)。在写入 'level2' 时,聚合是在一天级别(通过将级别 1 中的时间戳转换为日期时间来完成)。

因此,'level2' 中的数据:- 天 + 'level1'

中的所有列

我打算使用此视图(级别 2)作为任何未来聚合(例如,级别 3)的基础

问题 1: 'level2' 正在创建,但数据未填充其中,即,当我执行基本 select 查询时(select * 从 level2 limit 10) 在视图上,输出是“0 rows in set”。

是不是因为天级别聚合,可能会在一天结束时填充?我可以从 'level2' 实时提取数据吗?

问题 2: 有没有办法多次从我的引擎 'level1' 读取相同的数据?

问题 3: 有没有办法在读取 kafka 主题时将 Avro 转换为 JSON?或者 Clickhouse 可以直接将数据(Avro 格式)写入 'level1' 而不进行任何转换吗?

编辑:从 Kafka 检索数据时,Clickhouse 存在延迟。必须在我的 Clickhouse 服务器的 user.xml 文件中创建 (更改 max_block_size)。

Problem 1: 'level2' is being created but data is not being populated in it, i.e., when I perform a basic select query (select * from level2 limit 10) on the view, the output is "0 rows in set".

这可能与kafka存储的默认设置有关,它总是从最新的offset开始消费数据。您可以通过添加此

来更改行为
<kafka>
    <auto_offset_reset>earliest</auto_offset_reset>
</kafka>

config.xml

Problem 2: Is there a way of reading the same data from my engine 'level1', multiple times?

你最好避免直接从kafka存储读取。您可以为 'level1' 设置一个专用的物化视图 M1 并使用它来填充 'level2'。然后从 M1 读取是可重复的。

Problem 3: Is there a way to convert Avro to JSON while reading from a kafka topic? Or can Clickhouse write data (in Avro format) directly into 'level1' without any conversion?

不,尽管您可以尝试使用 Cap'n Proto,它应该提供与 Avro 类似的性能,并且由 ClickHouse 直接支持。