Hiveのbucket-mapjoinとsmb-joinの違い



Difference Between Bucket Mapjoin



1バケット-mapjoin

1.1条件
1)hive.optimize.bucketmapjoin = trueを設定します
2)1つのテーブルのバケット番号は、別のテーブルのバケット数の整数倍です。
3)バケット列==結合列
4)マップ結合のシーンに適用する必要があります



1.2注意
1)テーブルがバケットでない場合は、通常の結合を実行します。

2 smb-join(バケットmapjoinの最適化)



2.1条件
1)パラメータ設定

set hive.auto.convert.sortmerge.join=true set hive.optimize.bucketmapjoin = true set hive.optimize.bucketmapjoin.sortedmerge = true set hive.auto.convert.sortmerge.join.noconditionaltask=true

2)小さなテーブルのバケット数=大きなテーブルバケットの数
3)バケット列==結合列==並べ替え列
4)バケットmapjoinシーンに適用する必要があります

2.2注意事項
ハイブは、2つの結合テーブルがすでにバケット化およびソートされているかどうかをチェックしません。自分で結合テーブルを確認する必要があります。そうしないと、データが正しくない可能性があります。 2つの方法があります



1)hive.enforce.sortingがtrueに設定されています。
2)SQLでc1による分散c1ソートまたはc1によるクラスターを使用して適格なデータを手動で生成します
次のように、テーブルを作成するときに、テーブルをクラスター化およびソートする必要があります。

create table test_smb_2(mid string,age_id string) CLUSTERED BY(mid) SORTED BY(mid) INTO 500 BUCKETS

3 smb-join:つまりソートされたマージ結合

ソートされたマージ順序付きバケットに基づくSmb結合は、マップ側で結合操作を実行できます。これにより、シャッフルデータの量を削減または回避できます。

転載:https://www.jianshu.com/p/5fd8710a7600