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‘,并将结果汇总到initiator节点
  • initiator节点将结果返回给客户端。如果右表是分布式表,则及群众每个节点会去执行分布式查询,就会存在一个非常严重的读放大现象。假设集群有N个节点,则右表查询会在集群中执行N*N次。

select a_.i,a_.s,b_.t from a_all as a_ join b_all as b_ on a_.i = b_.i
其中a_all,b_all是分布式表,对应本地表名为a_local,b_cloal。则该sql在分布式查询执行的时间顺序为:

  • initiator收到查询请求
  • initiator执行分布式查询,本届点和其他节点执行select a_.i,a_.s,b_.t from a_local as a_ join b_all as b_ on a_.i = b_.i,即左表更改为本地表
  • 集群节点收到请求后,分析出右表分布式表,在本地b_local查询结果,并计作subquery
  • 查到subquery后,在与a本地表进行join
  • 各节点执行完毕后,向initiator发送数据

shuflle join简化版,right表全量

Global join实现

global join计算过程如下:

  1. 若右表为子查询,则initiator完成子查询计算
  2. initiator将右表数据发送到其他集群节点
  3. 集群节点将本地左表与右表数据进行join计算
  4. 集群其他节点将结果发回给initiator节点计算
  5. initiator将结果汇总,发给客户端

global join可以看作一个不完整的broadcast join实现,如果join的右表数据量比较大,就会占用大量网络带宽,导致查询性能下降

global join将右表的查询在initiator节点上完成后,通过网络发送到其他节点,避免其他节点重复计算,从而避免查询方法。

分布式join最佳实践

  • 减少join右表数据量,小表作为右表,尽可能增加过滤条件
  • 利用global join避免查询放大带来性能损失
  • 数据预分布实现colocate join。将涉及join的表按join key分片
  • 查询时候将右边的表换成本地表

Clickhouse的Join相关推荐

  1. 趣头条基于Flink+ClickHouse的实时数据分析平台

    导读:趣头条一直致力于使用大数据分析指导业务发展.目前在实时化领域主要使用 Flink+ClickHouse 解决方案,覆盖场景包括实时数据报表.Adhoc 即时查询.事件分析.漏斗分析.留存分析等精 ...

  2. clickhouse 航空数据_趣头条基于Flink+ClickHouse的实时数据分析平台

    原标题:趣头条基于Flink+ClickHouse的实时数据分析平台 分享嘉宾:王金海 趣头条 编辑整理:王彦 内容来源:Flink Forward Asia 出品平台:DataFunTalk 导读: ...

  3. 看云上 ClickHouse 如何做计算存储分离

    2020年12月6日-7日,由InfoQ 中国主办的综合性技术盛会QCon全球软件开发大会深圳站召开.QCon 内容源于实践并面向社区,演讲嘉宾依据热点话题,面向资深的技术团队负责人.架构师.工程总监 ...

  4. Doris 与 ClickHouse 的深度对比

    一.背景介绍 Apache Doris是由百度贡献的开源MPP分析型数据库产品,亚秒级查询响应时间,支持实时数据分析:分布式架构简洁,易于运维,可以支持10PB以上的超大数据集:可以满足多种数据分析需 ...

  5. clickHouse分区和分片详解

    文章目录 1. 什么是clickhouse? 2. 分区和分片 2.1 分区 2.2 分片 3. 分区相关操作 3.1 创建分区表 3.2 删除分区 3.3 查询分区信息 4. 分片原理 5. cli ...

  6. ClickHouse学习笔记(二):执行计划、建表优化、语法优化规则、查询优化、数据一致性

    本文档基于目前较新稳定版21.7.3.14 一.Explain查看执行计划 在ClickHouse 20.6版本之前要查看SQL语句的执行计划需要设置日志级别为trace才能可以看到,并且只能真正执行 ...

  7. 最强OLAP分析引擎-Clickhouse快速精通-上

    最强OLAP分析引擎-Clickhouse快速精通一 ==楼兰== 文章目录 一.Clickhouse简介 1.什么是Clickhouse 2.Clickhouse适用场景. 二.Clickhouse ...

  8. clickhouse doris 实时OLAP数据库的对比与选型

    背景介绍 ClickHouse 是俄罗斯的搜索公司 Yandex 开源的 MPP 架构的分析引擎,号称比事务数据库快 100-1000 倍,团队有计算机体系结构的大牛,最大的特色是高性能的向量化执行引 ...

  9. Apache Doris 和 ClickHouse 的选型比较

    背景介绍 Apache Doris是由百度贡献的开源MPP分析型数据库产品,亚秒级查询响应时间,支持实时数据分析:分布式架构简洁,易于运维,可以支持10PB以上的超大数据集:可以满足多种数据分析需求, ...

最新文章

  1. 并查集 HDOJ 1232 畅通工程
  2. 2019年,我终于知道86版西游记到底好在哪里了
  3. 永远退出机器学习界!从业八年,Reddit网友放弃高薪转投数学:风气太浮夸
  4. vs 2019编写汇编并运行调试
  5. 2012年7月份第4周51Aspx源码发布详情
  6. UI设计素材|动画的妙处,有助于吸引你的用户
  7. 伺服扭矩模式怎么控制_气液增压缸是怎么增压的?气液增压缸好用吗?气液增压缸的原理及其伺服控制...
  8. C语言基础教程之如何定义变量
  9. No matching distribution found for docx(配置cmd控制台代理)
  10. 高速公路坐标高程计算软件3.1版发布
  11. 客户管理系统哪个好用 crm客户管理系统排名
  12. office 2016 官方完整版
  13. 零基础学CocosCreator·第八季-双人对战五子棋
  14. C语言--小学生计算机辅助教学系统
  15. 学以致用——微博文章内容统计分析之一(Excel+GraphLab)
  16. Android关系型数据库应用——电话(短信)黑名单
  17. [精简]托福核心词汇100
  18. 帝国备份王mysql导入_使用帝国备份王EmpireBak备份与恢复网站的MySQL数据库
  19. Swift语言中的感叹号是什么意思?
  20. 仿阿姨帮|58到家上门O2O系统源码( BAOCMS二次开发 )

热门文章

  1. HeadFirst设计模式(中文第一版) pdf
  2. oracle倍数四舍五入,Oracle 的 Round 函數(四舍五入)函数
  3. Android面试——Handler 机制
  4. 电线平方表示什么意思 电线有多少平方的
  5. 2020自行车哪些品牌好全世界十大顶级碳纤维自行车品牌排行榜
  6. [C++] atoi()和stoi()函数
  7. 向前欧拉公式 matlab_史上最完美的数学公式,你知道是什么吗
  8. 数字转人民币金额大写
  9. C++ decltype的使用
  10. 2022 年江西省职业院校技能大赛高职组信息安全管理与评估赛题 02