【发布时间】:2019-07-27 22:58:15
【问题描述】:
我有两个(或更多)Kafka 主题,我需要加入它们。 我在 blogs/StackOverflow 上读到的问题......两个选项:
1) 将它们(Clickhouse Kafka 引擎/火花流)流式传输到单独的表,然后运行在 Clickhouse 中不推荐的连接?
2) 用所有列建一张表,并使用 Clickhouse Engine/spark streaming 更新同一个入口?
任何建议
【问题讨论】:
我有两个(或更多)Kafka 主题,我需要加入它们。 我在 blogs/StackOverflow 上读到的问题......两个选项:
1) 将它们(Clickhouse Kafka 引擎/火花流)流式传输到单独的表,然后运行在 Clickhouse 中不推荐的连接?
2) 用所有列建一张表,并使用 Clickhouse Engine/spark streaming 更新同一个入口?
任何建议
【问题讨论】:
与往常一样,这实际上取决于您导入的数据类型以及您将如何使用它,但我会说,在大多数情况下,最好将 2 个主题导入到一个表中(所以选项 2)。从那里您将能够快速过滤和汇总记录。根据您要执行的查询,您应该使用适当的ORDER BY 列导入数据,这将使您的查询更快。
如果您提供有关要加入的数据架构的更多详细信息,我可以更具体地提供答案。
【讨论】:
ORDER BY 中指定 x。还有一个ver 参数,它允许您指定一个版本列,该列将用于保存具有最大版本的记录。请记住,不会立即删除重复项。如果您运行OPTIMIZE TABLE ... FINAL,则会删除重复项,但完成优化可能需要一些时间。
在 ClickHouse 中从 Kafka 获取数据的标准方法是使用 Engine=Kafka 和 Materialized 视图创建“源”表,该表将使用 ReplicatedMergeTree 引擎将数据复制到最终表。
您可以创建多个将写入同一个目标表的物化视图,就像那样。
CREATE TABLE kafka_topic1 ( ... ) Engine=Kafka ...;
CREATE TABLE kafka_topic2 ( ... ) Engine=Kafka ...;
CREATE TABLE clickhouse_table ( ... ) Engine=MergeTree ...;
CREATE MATERIALIZED VIEW kafka_topic1_reader
TO clickhouse_table
AS SELECT * FROM kafka_topic1;
CREATE MATERIALIZED VIEW kafka_topic2_reader
TO clickhouse_table
AS SELECT * FROM kafka_topic2;
【讨论】: