それは確かにアプローチですが、スキャンされた行ごとに 2 つのランダム読み取りを行うと、速度が急落します。行を大幅にフィルタリングしている場合、または A に小さなデータセットがある場合は、問題にならない可能性があります。
ソートマージ結合
ただし、HBase 0.96 で利用できるようになる最善の方法は、MultipleTableInput メソッドです。これは、テーブル A をスキャンし、テーブル B を一致させる一意のキーを使用して出力を書き込むことを意味します。
たとえば、テーブル A は (b_id, a_info) を発行し、テーブル B は (b_id, b_info) を発行し、リデューサーでマージします。
これはソートマージ結合の例です。
入れ子ループ結合
行キーで結合している場合、または結合属性がテーブル B に沿って並べ替えられている場合、探しているものが見つかるまでテーブル B から順次読み取るスキャナーのインスタンスを各タスクに含めることができます。
たとえば、テーブル A の行キー = "companyId" およびテーブル B の行キー = "companyId_employeeId" です。次に、テーブル A の各会社について、ネストループ アルゴリズムを使用してすべての従業員を取得できます。
擬似コード:
for(company in TableA):
for(employee in TableB):
if employee.company_id == company.id:
emit(company.id, employee)
これはネストループ結合の例です。
より詳細な結合アルゴリズムは次のとおりです。