SparkSQL的解析詳解

2021-09-07 03:04:45 字數 1667 閱讀 8938

sparksql繼承自hive的介面,由於hive是基於mapreduce進行計算的,在計算過程中大量的中間資料要落地於磁碟,從而消耗了大量的i/o,降低了執行的效率,從而基於記憶體運算的sparksql應運而生。

首先說下傳統資料庫的解析,傳統資料庫的解析過程是按rusult、data source、operation的次序來解析的。傳統資料庫先將讀入的sql語句進行解析,分辨出sql語句中哪些詞是關鍵字(如select,from,where),哪些是表示式,哪些是projection,哪些是data source等等。進一步判斷sql語句是否規範,不規範就報錯,規範則按照下一步過程繫結(bind)。過程繫結是將sql語句和資料庫的資料字典(列,表,檢視等)進行繫結,如果相關的projection、data source等都存在,就表示這個sql語句是可以執行的。在執行過程中,有時候甚至不需要讀取物理表就可以返回結果,比如重新執行剛執行過的sql語句,直接從資料庫的緩衝池中獲取返回結果。 在資料庫解析的過程中sql語句時,將會把sql語句轉化成乙個樹形結構來進行處理,會形成乙個或含有多個節點(treenode)的tree,然後再後續的處理政對該tree進行一系列的操作。 

spark sql對sql語句的處理和關聯式資料庫對sql語句的解析採用了類似的方法,首先會將sql語句進行解析,然後形成乙個tree,後續如繫結、優化等處理過程都是對tree的操作,而操作方法是採用rule,通過模式匹配,對不同型別的節點採用不同的操作。sparksql有兩個分支,sqlcontext和hivecontext。sqlcontext現在只支援sql語法解析器(catalyst),hivecontext支援sql語法和hivecontext語法解析器。

sqlcontext的解析過程:

(1)sql語句經過sqlparse解析成unresolved logicalplan。

(2)使用analyzer結合資料字典(cataqlog)進行繫結,生成resolved logicalplan。

(3)使用optimizer對resolved logicalplan進行優化,生成optimized logicalplan。

(4)使用sparkplan將logicalplan轉換成physicalplan。

(5)使用prepareforexecution()將physicalplan轉換成可執行物理計畫。

(6)使用execute()執行物理計畫。

(7)生成schemardd。

然而並沒有什麼卵用,catalyst解析做的有些簡陋,很多不支援,所以在寫程式的時候,還是宣告的hivecontext物件。

hivecontext的解析過程:

(1)sql語句經過hiveql.parsesql解析成了unresolved logicalplan。

(2)使用analyzer結合hive的metastore進行繫結,生成resolved logicalplan。

(3)使用optimizer對resolved logicalplan進行優化,生成optimized logicalplan。

(4)使用hiveplanner將logicalplan轉換成physicalplan。

(5)shiyong prepareforexecution()將physicalplan轉換成可執行物理計畫。

(6)使用execute()執行可執行物理計畫。

(7)執行後,使用map(_.copy)將結果匯入schemardd。 (最終轉化為rdd)

Spark SQL中開窗函式詳解

row number 開窗函式 其實就是給每個分組的資料,按照其排序的順序,打上乙個分組內的行號,相當於grouptopn,在實際應用中非常廣泛。deptname name salary dept 1 michael 3000 dept 2 andy 5000 dept 1 alex 4500 de...

Spark SQL執行流程解析之 sql執行順序

一.spark sql模板解析 spark sql 關鍵字執行順序跟sql執行順序類似 1.先將from前兩表做笛卡爾積載入進來形成虛擬表vt1,2.on條件後為真的插入虛擬表形成vt2,如果包含多個表,重複操作,完成所有資料載入後,開始對形成的大虛擬表vt2進行處理,3.where 後為真的插入v...

SparkSQL底層執行的原理詳解 面試必備

檢視執行計畫 explain 簡介 spark sql的核心是catalyst優化器,它以一種新穎的方式利用高階程式語言功能 例如scala的模式匹配和quasiquotes 來構建可擴充套件的查詢優化器 sparksql的catalyst優化器是整個sparksql pipeline的中間核心部分...