Clickhouse的Join

本文详细介绍了Clickhouse的Join操作,包括单机join实现、分布式Join的策略如Broadcast JOIN、Shuffle JOIN和Colocate JOIN,以及Global JOIN的原理和最佳实践。强调了在join操作中选择小表作为右表的重要性,以及如何利用数据预分布实现高效的colocate join。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值