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