hive 表連線操作注意事項

2021-06-29 02:08:26 字數 1870 閱讀 5447

1.hive jion 只支援等值連線

2.hive jion目前不支援在on子句中使用謂詞or

3.on子句中的分割槽過濾條件在outer join中是無效的,但是在inner join中是可以用的

4.hive 中不支援in和not in

對於in

在hive中可以使用left semi join實現,但是要注意這種方式在select   和where 子句中不能引用右邊表的字段

例:select distinct v.dev_mac  from  vod_test v left semi join device d on v.dev_mac=d.dev_mac

當然也可以通過left outer join實現

select distinct v.dev_mac from vod_test v left outer join device  d on v.dev_mac=d.dev_mac where d.dev_mac is not null;

對於not in

在hive中可以通過left outer join 實現

select distinct v.dev_mac from vod_test v left outer join device  d on v.dev_mac=d.dev_mac where d.dev_mac is  null;

5.對於hive 中只使用join 是進行的笛卡爾積,hive中並沒有像rdbms中對其進行inner join的優化,而且,其查詢

也不能並行執行。所有速度很慢,特別注意。

6.hive 的map-side join

hive可以將比較小的表載入到記憶體中,在map過程進行join。 例:

select /*+ mapjoin(d) */ distinct v.dev_mac from vod_test v left outer join device  d on v.dev_mac=d.dev_mac ;

v0.7以後的版本廢棄這種標記方式,但是還是可以用,有兩個屬性可以設定

set hive.auto.convert.join=true;(預設false)

set hive.mapjoin.smalltable.filesize=25000000;(預設值,單位位元組)

第乙個代表啟用功能,這樣在合適的時候hive會自動啟動功能

第二個引數設定可以使用優化的小表的大小

注意hive中對於right outer join 和full outer join 不支援這個優化

7.對於order by,sort by ,distribute by,cluster by

order by     只有乙個reduce,執行效率慢,全域性有序

sorty by      每個reudce中的資料是有序的

distribute by 控制著資料是如何劃分到每個reduce中的,預設是map的key的hash值。這樣輸出內容會有明顯的重疊,至少對於排序順序是這樣,如果我們希望有相同的一列分發到同乙個reduce,可以使用distribute by

hive 要求distribute   by 要寫在sort by之前

cluster by 如果sort by 和distribute by中使用的列相同可以用cluster by 代替

8.cast()型別轉換函式 例如

cast(salary   as float)

9.抽樣查詢

例:select * from device tablesample(bucket 1 out of 1000 on rand());

10.資料塊抽樣

select * from device tablesample(0.1 percent);

最小抽樣單元是乙個塊大小,當檔案小於塊大小時還是會返回所有資料

Sqoop匯入hive注意事項

sqoop從oracle匯入資料到hive,示例 sqoop import connect jdbc oracle thin oracle host port orcl username name password passwd hive import table tablename 如果不加其他引...

Hive相關注意事項

1.load data locall inpath into table xx 如果是本地路徑,其實就是一次put上傳操作 如果路徑是hdfs,其實是一次mv操作 2.建立分割槽表partitioned by 字段不能和表中列的字段重複 3.建立分桶表cluster by 必須是表中的某列的字段 4...

連線SQL server注意事項

1.1 非預設例項 資料庫名稱 計算機名 安裝sql server時所建立的例項名或者資料庫名稱 local 安裝sql server時所建立的例項名 1.2 預設例項 資料庫名稱 計算機名或者資料庫名稱 local 應該吧 2.1 windows身份驗證,沒什麼說的。2.2 sql server身...