オリジナル質問Sqoop 1.99.3は、MySQLへの輸出は、空のテーブルを返します
私はSqoop 1.99.3で働いていると私はDateTimeフィールドが含まれているのMySqlにHDFSからファイルをエクスポートしようとしています。残念ながら、ジョブの実行後、ターゲット表は空であり、エラー・メッセージ/ログはありません。
- このバージョンのSqoop は、DateTime形式をサポートしていますか?
- この問題の回避策はありますか?
CSV行の例:
- 1、 '名前'、2016年4月1日15:10:57,2016-05-31午前5時00分59秒
MySQLテーブルの文を作成します。
CREATE TABLE `unit` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`u_save_date` datetime DEFAULT NULL,
`c_save_time` datetime NOT NULL,
PRIMARY KEY (`id`));
私は質問して以来、ここに私のコードです。革命的なものではなく、Sqoop 5分デモクライアントAPIガイド(link)から変更されたパラメータ(ここではデフォルトのものを貼り付けたもの)からコピーされています。
コードはdatetime形式を含まないテーブルでうまく動作します。
String url = "http://localhost:12000/sqoop/";
SqoopClient client = new SqoopClient(url);
MJob newjob = client.newJob(1, org.apache.sqoop.model.MJob.Type.EXPORT);
MJobForms connectorForm = newjob.getConnectorPart();
MJobForms frameworkForm = newjob.getFrameworkPart();
newjob.setName("ExportJob");
connectorForm.getStringInput("table.schemaName").setValue("");
connectorForm.getStringInput("table.tableName").setValue("table");
connectorForm.getStringInput("table.columns").setValue("id,name");
frameworkForm.getStringInput("input.inputDirectory").setValue("/input");
frameworkForm.getIntegerInput("throttling.extractors").setValue(1);
frameworkForm.getIntegerInput("throttling.loaders").setValue(1);
Status status = client.createJob(newjob);
if(status.canProceed()) {
System.out.println("New Job ID: "+ newjob.getPersistenceId());
} else {
System.out.println("Check for status and forms error ");
}
printMessage(newjob.getConnectorPart().getForms());
printMessage(newjob.getFrameworkPart().getForms());
フォローアップの質問
:Javaでコード
私も(同じパラメータで)sqoopのシェルを介してエクスポートしようとしましたが、ターゲット表には再び、でした、空
さて、私はこの問題を解決することができました。しかし、私は別のテーブル(DateTimeが適切にフォーマットされていても)で同じ問題に直面しています。CSV行の例:
- 1、 '名前'、 '名前'、 '2016年5月11日12時08分27秒 '、 '3a99471d-6f42-445f-b651-4a557a0e5b97 '
最後の列はJavaで生成されたUUIDで、char(36)として格納されます。
シェアエラーログも –
sqoopのエクスポートコマンド –
私のコードといくつかの説明を追加しました。投稿に書いたように、sqoopログファイルにはエラー/例外はありません。お手伝いしてくれてありがとう! :) –