2016-10-25 13 views
1

HBase を介してデータをロードしています。。ブタスクリプトは毎日実行され、さまざまなハイブテーブルの更新されたレコードを検索し、結合と処理を実行してHBaseにロードします。私が抱えている問題は、時にはレコードの一部が更新されることですが、他の部分は更新されないということです。値が異なる場合のみHBaseテーブルを更新する

例abcd123のキーを持つレコードがハイブテーブル1とハイブテーブル2にあります。ハイブテーブル1には新しいデータがありますが、ハイブテーブル2にはありません。My pigスクリプトは両方のテーブルを結合し、 hbaseに記録し、hbase内の既存のレコードをキーabcd123に更新します。

私はHBaseが現在キーのhbaseにあるデータが豚スクリプトがロードしようとしているデータと異なっているかどうかをチェックしてから、異なる値の書き込みのみを受け入れる方法がありますか?変化した1つの値を取得するだけで変更されていない束のデータで行を更新する必要はありません。

答えて

1

あなたが試すことが、これを達成するためのカスタムソリューションを開発する必要があります。

アプローチの1-あなたが最初ハイブ/豚とHBaseの中の別の1であり、データセットの2つのコピーを維持することができ両方とも常に同期してください。新しい変更(表1または表2)を受け取るたびに、テーブル1とテーブル2を結合し、古いデータセットと新しく作成したデータセットを比較して、更新が必要なデルタレコードを探します。デルタの変更をhbaseに更新してください。

アプローチ2-デルタの変更を確認するのに役立つ両テーブル(テーブル1とテーブル2)に日付カラムを追加します。両方のテーブルに参加し、日付列を使用してデルタ・チャーニュを見つけます。 (詳細が必要な場合はコメントを追加してください)。
デルタ変更のすべてのレコードについて、行キーを使用してクエリhbaseを実行し、新しい値の比較をhbaseに変更します。何かが変更された場合は、hbaseに変更します。

+0

ありがとう、アプローチ2は私のために働いているようです。ありがとう – knobby

関連する問題