[Hive]Hive中表連線的優化,加快查詢速度
1、多表連線的執行順序和MapReduce job優化
select
a.ymd
,a.price_close
,b.price_close
,c.price_close
from stocks a join stocks b on a.ymd = b.ymd
join stocks c on a.ymd = c.ymd
where a.symbol = 'APPL' and b.symbol = 'IBM' and c.symbol = 'GE'
大多數情況下Hive會對每對 JOIN 連線物件啟動一個MapReduce任務。上例中會首先啟動一個MapReduce job對錶 a 和表 b 進行連線操作,
然後會啟動一個MapReuce job將第一個MapReduce job的輸出和表 c 進行連線操作。
當對3個或者更多個表進行 JOIN 連線時,如果每個 ON 子句都使用相同的連線鍵的話,那麼只會產生一個 Map Reduce job。
即Hive通過一個優化可以在同一個Map Reduce job 中連線多個表(需要每個子句中有相同的連線鍵)。
2、JOIN連線時表的順序(內連線)
Hive假定查詢中最後一個表是最大的那個表,在對每行記錄進行連線操作時,它會嘗試將其他表快取起來,然後掃描最後那個表進行計算。
因此使用者需要保證連續查詢中表的大小從左往右是依次增加的。
使用者也可以人為顯示告訴查詢優化器哪張表是大表,即使它在查詢中不是位於最後面的,使用方式如下:
select /*+STREAMTABLE(s)*/s.ymd, s.symbol,s.price_close,d.dividend
from stocks s JOIN dividends d ON s.ymd = d.ymd and s.symbol = d.symbol
where s.symbol='APPL'
3、連線前通過WHERE過濾資料加快查詢資料
最直接了當的方式是使用巢狀SELECT語句:
select
s.ymd,s.symbol,s.price_close,d.dividends
from
(
select * from stocks
where symbol = 'AAPL' and exchange = 'NASDAQ'
)s
left outer join
(
select * from dividends
where symbol = 'AAPL' and exchange = 'NASDAQ'
)d
on s.ymd = d.ymd
4、map-side JOIN 優化含有小表的連線
如果所有表中只有一張表是小表,則可以在最大的表通過mapper的時候將小表完全放到記憶體中。Hive可以在map端執行連線過程(稱為mao-side JOIN),這是因為
Hive可以和記憶體中的小表逐一匹配,從而省略常規連線操作需要的reduce過程。不僅減少了reduce過程,有時也可以同時減少map過程的執行步驟。
set hive.auto.convert.join=true; --讓Hive在必要的時候啟動優化
hive.mapjoin.smalltable.filesize=25000000; --設定能夠使用這個優化的小表的大小(單位是位元組)
相關文章
- Hive --------- hive 的優化Hive優化
- Hive之Hive快捷查詢(避免Mapruduce查詢)Hive
- [Hive]Hive排序優化Hive排序優化
- Hive篇---Hive使用優化Hive優化
- [Hive]Hive實現抽樣查詢Hive
- Hive -------- hive常見查詢練習Hive
- hive的優化Hive優化
- Hive優化Hive優化
- hive查詢注意事項和調優Hive
- Hive學習筆記 6 Hive的JDBC連線Hive筆記JDBC
- hive、spark優化HiveSpark優化
- Hive效能優化Hive優化
- 優化sql查詢速度優化SQL
- Hive學習筆記 5 Hive的資料查詢、函式Hive筆記函式
- Hive高階優化Hive優化
- Hive高階操作-查詢操作Hive
- 【資料庫】查詢優化之子連線優化資料庫優化
- 優化sql提高查詢速度優化SQL
- impala查詢不到hive裡建立的表Hive
- hive學習之三:專案中的hive優化實踐Hive優化
- hive優化-資料傾斜優化Hive優化
- Hive||beeline連線的InvalidURLHive
- Hadoop(五)C#連線HiveHadoopC#Hive
- Hive企業級效能優化Hive優化
- Hive優化相關設定Hive優化
- 加快dba_hist_active_sess_history的查詢速度
- hive表查詢中文顯示亂碼Hive
- Python程式碼微優化之加快查詢Python優化
- Oracle臨時表 優化查詢速度Oracle優化
- 報表連 hive,資料量比較大,怎麼分頁查詢?Hive
- 使用點陣圖連線索引優化OLAP查詢索引優化
- hive on spark執行速度慢HiveSpark
- hive表連線和oracle測試對比HiveOracle
- springboot連線hive無法啟動Spring BootHive
- SQL連線查詢優化[姊妹篇.第五彈]SQL優化
- HIVE隨手記——Hive命令(?$HIVE_HOME/bin/hive)Hive
- 好程式設計師大資料學習路線之hive表的查詢程式設計師大資料Hive
- Hive使用Calcite CBO優化流程及SQL優化實戰Hive優化SQL