列裁剪(分區裁剪):將為查詢的字段以及分區過濾,從而減少加載的數據量。
Map端聚合配置:在map端驚醒聚合,減少shuffle過程;
謂詞下推:限制條件進行提前過濾,減少下游處理的數據量;
空值過濾:提前驚醒空值過濾,避免空值引起傾斜;
目前,hive中謂詞下推、map端聚合參數是默認開啟的。本文中簡單的介紹sql優化方式中的謂詞下推的方式及適用的場景。
謂詞下推的原理是將sql 中的限制條件的邏輯盡可能的提前在sql 中執行,從而減少加載的數據量,提升下游數據處理的效率以及減少內存消耗。該種方式在hive,MySQL,Doris的語法中均適用 。在hive中,對應的邏輯優化器是PredicatePushDown,打開謂詞下推可以通過命令 hive (default)> set hive.optimize.ppd = true;在hive中,默認是true。Doris中,從CBO優化器 tree ReWrite中也可以實現該優化。
sql中常用的謂詞及即sql查詢條件中返回值為true的函數或是隱式轉換為boolean的函數。如”where”、”on”、”limit”、”and”、”like”、”is null”等常用函數。其出現在多表關聯的場景中,關聯又left join,right join ,inner join以及full join。
下推場景總結
| where | on | |||
| 左表 | 右表 | 左表 | 右表 | |
| left join | 下推 | 否 | 下推 | 下推 |
| join | 下推 | 下推 | 下推 | 下推 |
| right join | 否 | 下推 | 下推 | 下推 |
| full join | 否 | 否 | 否 | 否 |