挿入モードでは、Sqoopによってエクスポートされたレコードがターゲットテーブルの末尾に追加されます。 Sqoopには、-update-keyコマンドライン引数を指定することで使用できる更新モードもあります。これにより、SqoopはSQL UPDATE文を生成し、RDBMSまたはデータウェアハウス上で実行します。
3列のテーブルをHDFSファイル/ user / my-hdfs-fileに格納されたデータで更新するとします。このファイルには、次のデータが含まれています。
<!$ sqoop export(総称引数)--table target-relational(999)$ sqoop exportコマンドは、 -table --update-key column1 --export-dir / user / my-hdfs-file … => UPDATEターゲット・リレーショナル・テーブルSET column2 = 1000、column3 = 2000 WHERE column1 = 100を生成します。
上記のエクスポート・コマンドで、RDBMSまたはデータウェアハウス・システムのターゲット・リレーショナル表に、column1に一致する値のレコードがない場合、target-relational-tableには何も変更されません。
ただし、一致するレコードが見つからない場合は、ターゲット表にデータを挿入または追加する別の引数を含めることもできます。これを次のように考えてみましょう:存在する場合はUPDATE、それ以外の場合はINSERT。
<!この技法は、データベース内ではupsert
と呼ばれ、他の実装ではMERGEと呼ばれます。 upsertモードの引数は-update-modeで、updateonlyがデフォルトでallowinsertがupsertモードをアクティブにします。データベースのマニュアルを調べるか、ベンダーに相談して、UpsertモードがApache Sqoopでサポートされているかどうかを確認してください。