Sqoop 1.99.3,出口到MySQL返回空表

问题描述:

原来的问题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日志文件中没有错误/异常。并感谢您想要帮助! :) –

我已经解决了日期时间字段的问题。日期时间应该用单引号(''),f。 E:

  • 1, '名称', '2016年4月1日15时十分57秒', '2016年5月31日5点00分59秒'