Sqoopのexport(HDFS→RDB)に関して、--update-keyとステージングテーブルについてメモ。
ステージングテーブルは、対象テーブルに直接インサートせず、中間テーブル(ステージングテーブル)に一旦書き込み、対象テーブルへはそこから移送するもの。
Sqoopは複数のデータノードから並列でインサートするので、コミットタイミングがばらばらになり、中途半端な状態が出来てしまう。
これを解消する為にステージングテーブルを使う。
通常のexportでは、INSERT文を使ってテーブルにデータを登録する。
テーブルにデータが存在しているときの為に、UPDATE文で更新する指定が--update-key。--update-keyでWHERE条件となるカラムを指定する。
対象テーブルにデータが有ればUPDATE、無ければINSERT…としたい場合は「--update-mode allowinsert」を指定する。とドキュメントにはあるのだが、MySQLとPostgreSQLはまだ対応していないらしい(苦笑)
それどころか、PostgreSQL版はUPDATE前にテーブルをトランケートするので、常に対象データ無しで何も更新されない!
さすがにこれはバグじゃね?(苦笑) (試したバージョンはSqoop 1.3.0-cdh3u4)
※コメント投稿者のブログIDはブログ作成者のみに通知されます