1. 當對3個或更多的表進行join連線時,若是on子句都是使用相同的連線鍵的話,那麼只會產生乙個mapreduce任務。
2. 使用者在進行多表查詢時,需要保證連續查詢的表的大小從左至右是依次增大的。因為hive假定查詢中最後乙個表是最大的表,在對每行記錄進行連線操作時,它會嘗試將其他表快取起來,然後掃瞄最後那個大表進行計算。
3. map-side join:使用broadcast實現map側join的方式可通過如下設定,將broadcast的閾值設定得足夠大,再通過sql進行join
set spark.sql.autobroadcastjointhreshold=104857600;
insert overwrite table test_join
select test_new.id, test_new.name
from test
join test_new
on test.id = test_new.id
4. on條件語句中的分割槽過濾條件在外連線outer join中是無用的,不過在內連線inner join 中是有效的。
5. 左半開連線left semi join會返回滿足on條件的左邊表的記錄,相比於內連線inner join,是一種特殊優化的join語句,等價於in & exist語法結構。semi join比inner join更高效,對於左表中的一條指定記錄,一旦在右表中找到滿足on條件的記錄就會停止掃瞄右表。即對於左表的一條指定記錄,只會保留一條右表匹配記錄,而inner join則是返回了多條匹配記錄。
注意select和where語句中不能出現右表中的字段。 另外,hive不支援右半開連線。
6. 笛卡爾積join,即不加on條件的join,其結果集的大小等於左表行數乘右錶行數的大小。執行時間長且執行緩慢。
7. order by,sort by,distribute by,cluster by區別
hive優化要點總結
個人認為總體兩種思想 1 讓伺服器盡可能的多做事情,榨乾伺服器資源,以最高系統吞吐量為目標 再好的硬體沒有充分利用起來,都是白扯淡。比如 1 啟動一次job盡可能的多做事情,乙個job能完成的事情,不要兩個job來做 通常來說前面的任務啟動可以稍帶一起做的事情就一起做了,以便後續的多個任務重用,與此...
《Hive程式設計指南》之Hive環境安裝
hive 1 解壓 2 配置 hadoop home hive home等環境變數 3 修改配置檔案hive conf cp hive default.xml.template hive site.xml 修改hive.metastore.schema.verification的值為false 建立...
Hive程式設計指南07 索引
hive索引 建立索引 create index tablename index on table col1 as org.apache.hadoop.hive.ql.index.compact.compactindexhandler with deferred rebuild idxpropert...