sqoop1.99.3,export into mysql返回空表

ou6hu8tu  于 2021-06-03  发布在  Sqoop
关注(0)|答案(1)|浏览(323)

原始问题
我正在使用sqoop1.99.3,我正在尝试将一个文件从hdfs导出到mysql,其中包含一个datetime字段。不幸的是,在执行作业之后,目标表是空的,并且没有错误消息/日志。
这个版本的sqoop支持datetime格式吗?
有解决这个问题的方法吗?
csv行示例:
1,“姓名”,2016-04-01 15:10:572016-05-31 05:00:59
mysql表的create语句:

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格式的表,代码可以正常工作。我还尝试通过sqoopshell导出(使用相同的参数),但是目标表还是空的
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、'name'、'name'、'2016-05-11 12:08:27'、'3a99471d-6f42-445f-b651-4a557a0e5b97'
最后一列是java生成的uuid,存储为char(36)。

ruyhziif

ruyhziif1#

我已经解决了日期时间字段的问题。日期时间应该用单引号('')括起来,f。电子邮件:
1,“姓名”,“2016-04-01 15:10:57”,“2016-05-31 05:00:59”

相关问题