Clickhouse单机join实现
clickhouse单机join操作默认采用hash join算法,可选用merge join。其中merge join算法数据会溢出到磁盘,性能相比前者差。本文主要介绍hashjoin实现的join操作。
- 从right table读取该全量表数据,在内存中构建hashmap,从left table分批读取数据,根据join key到hash map中进行查找,如果命中,则该数据作为join输出。从实现可以看出,如果right table数据量超过单机可用内存限制时候,则join操作无法完成。通常,两表join时,将较小的作为right join
Clickhouse 分布式Join
join中涉及到的left_table和right_table是分布式表
有以下几种方式:
- Broadcast JOIN
- Shuffle Join
- Colocate JOIN
clickhouse集群并未实现完整意义上的shuffle join,实现了类似broadcast join,通过事先完成数据重分布,能够实现colocate join
clickhouse的分布式join查询可以分为两类,带global关键字的,和不带global关键字的情况。
普通join实现
无global关键字的join如何实现:
- initiator将sql左表分布式表 S 替换成本地表,形成 S‘
- 将S’分发到集群的每个节点
- 当集群节点执行S‘,并将结果汇总到ini

本文详细介绍了Clickhouse的Join操作,包括单机join实现、分布式Join的策略如Broadcast JOIN、Shuffle JOIN和Colocate JOIN,以及Global JOIN的原理和最佳实践。强调了在join操作中选择小表作为右表的重要性,以及如何利用数据预分布实现高效的colocate join。
最低0.47元/天 解锁文章
1510

被折叠的 条评论
为什么被折叠?



