Doris


Doris

基本概念

Doris 是基於 MPP 架構的交互式 SQL 數據倉庫,主要用於解決近實時的報表和多維分析。

Doris 分成兩部分 FE 和 BE ,FE 負責存儲以及維護集群元數據、接收、解析、查詢、設計規划整體查詢流程,BE 負責數據存儲和具體的實施過程。

在 Doris 的存儲引擎中,用戶數據被水平划分為若干個數據分片(Tablet,也稱作數據分桶)。每個 Tablet 包含若干數據行。多個 Tablet 在邏輯上歸屬於不同的分區 Partition。一個 Tablet 只屬於一個 Partition。而一個 Partition 包含若干個 Tablet。Tablet 是數據移動、復制等操作的最小物理存儲單元。

原理解析

SQL解析

SQL解析在這篇文章中指的是將一條 sql 語句經過一系列的解析最后生成一個完整的物理執行計划的過程。
這個過程包括以下四個步驟:詞法分析,語法分析,生成邏輯計划,生成物理計划。

  1. 詞法分析:將字符串形式的 sql 識別成一個個 token,為語法分析做准備。

  2. 語法分析:語法分析主要負責根據語法規則,將詞法分析生成的 token 轉成抽象語法樹(Abstract Syntax Tree)。

  1. 邏輯計划:邏輯計划負責將抽象語法樹轉換為代數關系。代數關系是一棵算子樹,每個節點代表一種對數據的計算方式,整棵樹代表了數據的計算方式和流動方向。

  1. 物理計划:物理計划是在邏輯計划的基礎上,根據機器的分布,數據的分布,決定去哪些機器上執行哪些計算操作。Doris 系統的 SQL 解析也是采用這些步驟,只不過根據 Doris 系統結構的特點和數據的存儲方式,進行了細化和優化,最大化發揮機器的計算能力。

設計目標

Doris SQL解析架構的設計有以下目標:

  1. 最大化計算的並行性

  2. 最小化數據的網絡傳輸

  3. 最大化減少需要掃描的數據

總體架構

Doris SQL解析具體包括了五個步驟:詞法分析,語法分析,生成單機邏輯計划,生成分布式邏輯計划,生成物理執行計划。

具體代碼實現上包含以下五個步驟:Parse, Analyze, SinglePlan, DistributedPlan, Schedule。

Parse 階段本文不詳細講,Analyze 負責對 AST 進行前期的一些處理,SinglePlan 根據 AST 進行優化生成單機查詢計划,DistributedPlan 將單機的查詢計划拆成分布式的查詢計划,Schedule 階段負責決定查詢計划下發到哪些機器上執行。

注:AST 抽象語法樹 Abstract Syntax Tree

由於SQL類型有很多,本文側重介紹查詢 SQL 的解析。

下圖展示了一個簡單的查詢 SQL 在 Doris 的解析實現。

Parse階段

詞法分析采用 jflex 技術,語法分析采用 java cup parser 技術,最后生成抽象語法樹(Abstract Syntax Tree)AST,這些都是現有的、成熟的技術,在這里不進行詳細介紹。

AST 是一種樹狀結構,代表着一條 SQL。不同類型的查詢 select, insert, show, set, alter table, create table 等經過 Parse 階段后生成不同的數據結構(SelectStmt, InsertStmt, ShowStmt, SetStmt, AlterStmt, AlterTableStmt, CreateTableStmt等),但他們都繼承自 Statement,並根據自己的語法規則進行一些特定的處理。例如:對於 select 類型的 sql,Parse 之后生成了 SelectStmt 結構。

SelectStmt 結構包含了 SelectList,FromClause,WhereClause,GroupByClause,SortInfo等結構。這些結構又包含了更基礎的一些數據結構,如 WhereClause 包含了 BetweenPredicate(between表達式),BinaryPredicate(二元表達式),CompoundPredicate(and-or組合表達式),InPredicate(in表達式)等。

AST 中所有結構都是由基本結構表達式 Expr 通過多種組合而成,如下圖所示。

Doris中抽象語法樹AST的實現

Analyze階段

文檔勘誤

  1. 透明 -> 不透明

鏈接

  1. 一下 -> 以下

鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM