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)。
答
我已经解决了日期时间字段的问题。日期时间应该用单引号(''),f。 E:
- 1, '名称', '2016年4月1日15时十分57秒', '2016年5月31日5点00分59秒'
份额错误日志 –
另外sqoop export命令 –
我已经添加了我的代码和一些解释。正如我在帖子中写的,sqoop日志文件中没有错误/异常。并感谢您想要帮助! :) –