ひしだまの変更履歴

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

SqoopのSQL

2012-07-07 13:05:38 | PG(分散処理)

Sqoopでimportやexportする際にどんなSQLを実行しているのか調べてみた。

importに関しては、ダイレクトモード以外は特別な事はしてなさそう。

exortに関しては、MySQLやPostgreSQLはデフォルトではマルチVALUESインサート、バッチモードでは通常のINSERT文を使う。
で、Oracleにはマルチインサートの構文が無いので、代わりに「SELECT 値,~,値 FROM DUAL」をUNIONでつないでひとつのSQLにしている。したがって、Oracleのデフォルトモードとバッチモードでは実行されるSQLが異なる…
と思っていたのだが、どうやら違っていたようだ。
そういうSQLを生成するOutputFormatを用意しているくせに、それを呼び出している箇所が無い。つまり、Oracleのデフォルトではバッチモードと同じクラスを使っている。
(UNIONでつないだSELECTは実行速度が遅いということだろうか。いずれにしても、Oracle Loader for Hadoopの方が速そうだが) 

あと、MySQLのダイレクトモードは各Mapタスクでmysqldumpやmysqlimportコマンドを使っている。
(つまり、全スレーブノードにMySQLをインストールしないといけないということか?) 

PostgreSQLのimportのダイレクトモードはMapReduceになっていない。psqlを使ってデータを出力し、HDFSへ転送しているイメージ。
(つまり、Sqoopを実行するサーバー上にPostgreSQLクライアントをインストールしないといけないということか?)