2016-11-29 38 views
2

原來的問題Sqoop 1.99.3,出口到MySQL返回空表

我與Sqoop 1.99.3工作,我試圖將文件從HDFS導出到MySQL,包含DateTime字段。不幸的是,作業執行後,目標表爲空,並且沒有錯誤消息/日誌。

  • 此版本的Sqoop 是否支持DateTime格式?
  • 有沒有解決這個問題的方法?

CSV行的一個示例:

  • 1, '姓名',2016年4月1日15:10:57,2016-05-31 5時○○分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)中修改參數(這裏我粘貼了它們的默認參數),沒有什麼具有革命性的。

該代碼適用於不包含日期時間格式的表格。我也試圖通過sqoop外殼出口(與相同參數),但目標表是再次空

代碼Java中:

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()); 

後續問題

好的,我設法解決了這個問題。但是,現在我面對與另一個表格相同的問題(即使DateTime格式正確)。

CSV行的一個示例:

  • 1, '名稱', '名稱', '2016年5月11日12時08分27秒 ','3a99471d-6f42-445f-b651-4a557a0e5b97 '

最後一列是Java生成的UUID,存儲爲char(36)。

+0

份額錯誤日誌 –

+0

另外sqoop export命令 –

+0

我已經添加了我的代碼和一些解釋。正如我在帖子中寫的,sqoop日誌文件中沒有錯誤/異常。並感謝您想要幫助! :) –

回答

1

我已經解決了日期時間字段的問題。日期時間應該用單引號(''),f。 E:

  • 1, '名稱', '2016年4月1日15時十分57秒', '2016年5月31日5點00分59秒'