黒猿の家:Hive表の最適化の小表Join大表
1815 ワード
keyを相対的に分散し、データ量の小さいテーブルをjoinの左側に置くことで、メモリオーバーフローエラーが発生する確率を効果的に低減できます.さらに、Groupを使用して、小さな次元テーブル(1000本以下のレコード数)にメモリを先進化することができます.map側でreduceを完了します.
実際のテストでは,新版のhiveが小表JOIN大表と大表JOIN小表を最適化していることが分かった.小さな時計は左と右に置いても明らかな違いはありません.実例実操
大きい表JOIN小さい表と小さい表JOIN大きい表の効率をテストします
1、大きい表、小さい表とJOIN後の表を作る文
2、大きい表と小さい表にそれぞれデータをインポートする
3、mapjoin機能をオフにする(デフォルトはオン)
4、小表JOIN大表文の実行
5、大表JOIN小表文の実行
実際のテストでは,新版の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