2016-08-19 4 views
0

Oracle(または任意のRDBMS)に、毎日フラッシュされるデータを含む表がある場合。sqoopはインポート中に更新された行をどのように扱いますか?

例:

1234,Raj,Kolkata,1000,09092015 

と仮定、私はフラットファイルにHDFSに標準sqoopインポートおよびストアを使用して、今日、この行を読み込みます。翌日、元のテーブルから行が削除されますが、7日後に同じレコードが更新された場合(salフィールド1000が2000に更新されたとします)。

私は再びsqoopクエリを実行すると、データをどのように扱い、どのように格納しますか? 同じレコードのエントリが2つあるか、新しい値が更新されますか?

このレコード

<1234, Raj, Kolkata, 1000, 09092015>

は、このいずれかによって置き換えられますか?

<1234, Raj, Kolkata, 2000, 09092015> 

答えて

1

あなたはSqoopでincremental importsを実行する場合は、行の1つは、新しい行が引数--incrementalを用いることによって挿入されたときに何が起こるかだけでなく、更新されたときに何が起こるかを制御することができます。

追加sqoop import (...) --incremental append)このオプションは、新しい行がデータベースに継続的に追加され、インポートする場合に使用されます。この場合、check-columnパラメータを使ってSqoopにチェックする必要があるカラムを(これらの新しいローを検出するために)Sqoopに伝える必要があります。

最後に変更されたsqoop import (...) --incremental lastmodified)です。このオプションは、あなたがあなたの例で望むものであり、Sqoopに(既にインポートした)テーブルの更新された行をチェックし、それらを新しい値に設定することを伝えることができます。 --check-columnのパラメータを使用して、Sqoopが更新された行を検出するために使用する列名を指定しなければならないこと、またこの列に日付値を保持する必要があることに注意する必要があります(たとえば、datedatetime,timeまたはtimestamp)。あなたの例では、日付の値を保持する余分な列が必要です。その行をインポートするために、他の列の値を変更するたびにその値を更新する必要があります。

もちろん行を更新してもその行のcheck-columnで指定されたフィールドは更新されませんが、その行は宛先テーブルで更新されません。

こちらがお役に立てば幸いです。

関連する問題