- Doris實時數(shù)倉實戰(zhàn)
- 王春波
- 821字
- 2023-11-02 20:30:24
1.3.3 查詢優(yōu)化器
除了查詢執(zhí)行層面的優(yōu)化,Doris在查詢優(yōu)化器方面也做了大量改進。Doris中的查詢優(yōu)化器能夠同時進行基于規(guī)則和基于代價的查詢優(yōu)化。在基于規(guī)則的查詢優(yōu)化方面,Doris完成了包括但不限于以下方面的改進。
1)常量折疊。常量折疊可以預(yù)先對常量表達(dá)式進行計算,計算后的結(jié)果有助于規(guī)劃器進行分區(qū)分桶裁剪,以及執(zhí)行層利用索引進行數(shù)據(jù)過濾等。例如將where event_dt>=cast(add_months(now(),-1)as date)折疊成where event_dt>=2022-02-20。
2)子查詢改寫。將子查詢改寫為Join操作,從而利用Doris在Join算子上做的一系列優(yōu)化來提升查詢效率,例如將select*from tb1 where col1 in(select col2 from tb2)a改寫成select tb1.*from tb1 inner join tb2 on tb1.col1=tb2.col2。
3)提取公共表達(dá)式。提取公共表達(dá)式可以將SQL中的一些析取范式轉(zhuǎn)換成合取范式,而合取范式通常對執(zhí)行引擎是比較友好的,可以將查詢條件重組或者下推,減少數(shù)據(jù)掃描和讀取的行數(shù),例如將條件where(a>1 and b=2) or (a>1 and b=3) or (a>1 and b=4)轉(zhuǎn)化成where a>1 and b in (2,3,4),明顯后者的判斷速度比前者的快很多。
4)智能預(yù)過濾。智能預(yù)過濾可以將SQL中的析取范式轉(zhuǎn)換成合取范式并提煉出公共條件,以便預(yù)先過濾部分?jǐn)?shù)據(jù),從而減少數(shù)據(jù)處理量。
5)謂詞下推。Doris中的謂詞下推不僅可以穿透查詢層,還能進一步下推到存儲層,利用索引進行數(shù)據(jù)過濾,如圖1-15所示。

圖1-15 Doris中的謂詞下推示意圖
而在基于代價的查詢優(yōu)化方面,Doris主要針對Join算子進行了大量優(yōu)化。
Join Reorder可以通過一些表的統(tǒng)計信息,自動調(diào)整Join順序。而Join順序的調(diào)整可有效減小Join操作中生成的中間數(shù)據(jù)集的大小,從而加速查詢的執(zhí)行,如圖1-16所示。

圖1-16 Join Reorder優(yōu)化示意圖
Colocation Join可以利用數(shù)據(jù)的分布情況,將原本需要去重后才能進行關(guān)聯(lián)的數(shù)據(jù),在本地完成關(guān)聯(lián),從而避免去重時大量的數(shù)據(jù)傳輸,如圖1-17所示。

圖1-17 Colocation Join優(yōu)化示意圖
Bucket Join是Colocation Join的通用版本。Colocation Join需要用戶在建表時就指定表的分布,以保證需要關(guān)聯(lián)查詢的若干表有相同的數(shù)據(jù)分布。而Bucket Join會更智能地判斷SQL中關(guān)聯(lián)條件和數(shù)據(jù)分布之間的關(guān)系,將原本需要同時去重左右兩張表中數(shù)據(jù)的操作,變成將右表數(shù)據(jù)重分布到左表所在節(jié)點,從而減少數(shù)據(jù)的移動,如圖1-18所示。

圖1-18 Bucket Join優(yōu)化示意圖
- 數(shù)據(jù)產(chǎn)品經(jīng)理高效學(xué)習(xí)手冊:產(chǎn)品設(shè)計、技術(shù)常識與機器學(xué)習(xí)
- 達(dá)夢數(shù)據(jù)庫編程指南
- 復(fù)雜性思考:復(fù)雜性科學(xué)和計算模型(原書第2版)
- Neural Network Programming with TensorFlow
- 大數(shù)據(jù):從概念到運營
- Hadoop集群與安全
- 大數(shù)據(jù)數(shù)學(xué)基礎(chǔ)(Python語言描述)
- 大數(shù)據(jù)分析:R基礎(chǔ)及應(yīng)用
- 云計算
- Google Cloud Platform for Architects
- 數(shù)據(jù)庫技術(shù)與應(yīng)用:SQL Server 2008
- 從零進階!數(shù)據(jù)分析的統(tǒng)計基礎(chǔ)(第2版)
- C# 7 and .NET Core 2.0 High Performance
- 一本書講透數(shù)據(jù)治理:戰(zhàn)略、方法、工具與實踐
- Hadoop與大數(shù)據(jù)挖掘