ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

pg_bulkload

2012-06-05 23:12:02 | PG(RDBMS)

PostgreSQLpg_bulkloadという「高速データロードユーティリティー」のメモ。

PostgreSQLは(たぶん独自SQLの)COPY文というものがあって、ファイルからテーブルへのロードやテーブルからファイルへの書き出しが出来るらしい。
そして、pg_bulkloadは、そのCOPY文よりも高速に動作する。 

pg_bulkloadはPostgreSQLの正式なファミリーではないっぽいので、インストールも独自に行う必要がある。
で、だいぶハマった…orz
結論としては、対象のPostgreSQLサーバーとバージョンbit数(32bit・64bit)を合わせないと正常に動作しない。特にpg_bulkload3は64bit版しか無いようなので、32bit版のPostgreSQLでは使えない。
エラーメッセージは「ライブラリーが無い」という系統なので分かりにくく、えらくハマった…。


Sqoop export update/staging

2012-06-01 23:52:33 | PG(分散処理)

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)