黒猿の家:Hive表の最適化の小表Join大表

1815 ワード

keyを相対的に分散し、データ量の小さいテーブルをjoinの左側に置くことで、メモリオーバーフローエラーが発生する確率を効果的に低減できます.さらに、Groupを使用して、小さな次元テーブル(1000本以下のレコード数)にメモリを先進化することができます.map側でreduceを完了します.
実際のテストでは,新版のhiveが小表JOIN大表と大表JOIN小表を最適化していることが分かった.小さな時計は左と右に置いても明らかな違いはありません.実例実操
大きい表JOIN小さい表と小さい表JOIN大きい表の効率をテストします
1、大きい表、小さい表とJOIN後の表を作る文
hive (default)> create table bigtable(id bigint, time bigint, uid string, 
keyword string,url_rank int, click_num int, click_url string) 
row format delimited fields 
terminated by '\t';

hive (default)> create table smalltable(id bigint, time bigint, uid string, 
keyword string,url_rank int, click_num int, click_url string) 
row format delimited fields 
terminated by '\t';

hive (default)> create table jointable(id bigint, time bigint, uid string, 
keyword string,url_rank int, click_num int, click_url string) 
row format delimited fields 
terminated by '\t';

2、大きい表と小さい表にそれぞれデータをインポートする
hive (default)> load data local inpath '/opt/module/datas/bigtable' 
into table bigtable;

hive (default)>load data local inpath '/opt/module/datas/smalltable' 
into table smalltable;

3、mapjoin機能をオフにする(デフォルトはオン)
hive (default)> set hive.auto.convert.join = false;

4、小表JOIN大表文の実行
hive (default)> insert overwrite table jointable
select b.id, b.time, b.uid, b.keyword, b.url_rank, b.click_num, b.click_url
from smalltable s
left join bigtable  b
on b.id = s.id;
Time taken: 35.921 seconds

5、大表JOIN小表文の実行
hive (default)> insert overwrite table jointable
select b.id, b.time, b.uid, b.keyword, b.url_rank, b.click_num, b.click_url
from bigtable  b
left join smalltable  s
on s.id = b.id;
Time taken: 34.196 seconds