字节跳动内部已经将ClickHouse广泛应用,并在原引擎基础上重构了技术架构,本系列文章将从Upsert、多表关联查询、可用性提升等多方面介绍字节跳动基于ClickHouse的能力增强实践。

文 | Dash 来自字节跳动数据平台分析型数据库团队
-
缺少完整的upsert和delete操作
-
多表关联查询能力弱
-
集群规模较大时可用性下降(对字节尤其如此)
-
没有资源隔离能力
-
ClickHouse增强计划之Upsert
-
ClickHouse增强计划之多表关联查询 -
ClickHouse增强计划之查询优化 -
ClickHouse增强计划之高可用 -
ClickHouse增强计划之资源隔离
大宽表的局限
-
生成每一张大宽表都需要数据开发人员不小的工作量,而且生成过程也需要一定的时间
-
生成宽表会产生大量的数据冗余
如何强化多表关联查询能力

-
按照单(多)个 key 进行 Shuffle
-
由 1 个或者多个节点汇聚到一个节点 (我们称为 gather)
-
同一份数据复制到多个节点(也称为 broadcast 或者说广播)
-
各个模块约定好接口,尽量减少彼此的依赖和耦合。一旦某个模块有变动不会影响别的模块,例如 Stage 生成逻辑的调整不影响调度的逻辑。
-
模块采用插件的架构,允许模块根据配置灵活支持不同的策略。
-
Shuffle Join,最通用的 Join
-
Broadcast Join,针对大表 Join 小表的场景,通过把右表广播到左表的所有 worker 节点来减少左表的传输
-
Colocate Join,针对左右表按照 Join key 保持相通分布的场景,减少左右表数据传输

改善后的效果

Case1:Hash Join 右表为大表
SELECTsum(LO_REVENUE) - sum(LO_SUPPLYCOST) AS profitFROMcustomerINNER JOIN(SELECTLO_REVENUE,LO_SUPPLYCOST,LO_CUSTKEYfromlineorderWHERE toYear(LO_ORDERDATE) = 1997 and toMonth(LO_ORDERDATE) = 1) as lineorderON LO_CUSTKEY = C_CUSTKEYWHERE C_REGION = 'AMERICA'
Case2:5张表 Join(未开启runtime filter)
经优化后,query 执行时间从8.583s降低至4.464s。
所有的右表可同时开始数据读取和构建。为了和现有模式做对比,ByteHouse这里并没有开启 runtime filter,开启 runtime filter 后效果会更快。
SELECTD_YEAR,S_CITY,P_BRAND,sum(LO_REVENUE) - sum(LO_SUPPLYCOST) AS profitFROM ssb1000.lineorderINNER JOIN(SELECT C_CUSTKEYFROM ssb1000.customerWHERE C_REGION = 'AMERICA') AS customer ON LO_CUSTKEY = C_CUSTKEYINNER JOIN(SELECTD_DATEKEY,D_YEARFROM dateWHERE (D_YEAR = 1997) OR (D_YEAR = 1998)) AS dates ON LO_ORDERDATE = toDate(D_DATEKEY)INNER JOIN(SELECTS_SUPPKEY,S_CITYFROM ssb1000.supplierWHERE S_NATION = 'UNITED STATES') AS supplier ON LO_SUPPKEY = S_SUPPKEYINNER JOIN(SELECTP_PARTKEY,P_BRANDFROM ssb1000.partWHERE P_CATEGORY = 'MFGR#14') AS part ON LO_PARTKEY = P_PARTKEYGROUP BYD_YEAR,S_CITY,P_BRANDORDER BYD_YEAR ASC,S_CITY ASC,P_BRAND ASCSETTINGS enable_distributed_stages = 1, exchange_source_pipeline_threads = 32


扫码加入官方交流群
产品介绍
火山引擎ByteHouse
统一的大数据分析平台。目前提供企业版和云数仓两种版本,企业版是基于开源的企业级分析型数据库,支持用户交互式分析PB级别数据,通过多种自研表引擎,灵活支持各类数据分析和应用;云数仓版作为云原生的数据分析平台,实现统一的离线和实时数据分析,并通过弹性扩展的计算层和分布式存储层,有效降低企业大数据分析。后台回复数字“6”了解产品
点击阅读原文,跳转ByteHouse官网试用产品

