我正在使用Hadoop 2.5.0和Sqoop 1.4.5。
我正在尝试使用以下SQOOP导出命令在MySQL中更新:
sqoop export --connect "connect_string" --username "user" --password "pass" --table "table_name" --columns "A,B,created_dtm,D,E" --export-dir "export_dir" --input-null-string "" --input-null-non-string "" --input-escaped-by \\ --input-fields-terminated-by "," --input-lines-terminated-by "\\n" --update-key A --update-mode "allowinsert" -m 1;
A在表结构中定义为唯一键。
但我得到以下异常并且工作挂起:
org.apache.sqoop.mapreduce.AsyncSqlOutputFormat: Got exception in update thread: java.sql.BatchUpdateException: Unknown column 'created_dtm' in 'field list'
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1819)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1281)
at org.apache.sqoop.mapreduce.AsyncSqlOutputFormat$AsyncSqlExecThread.run(AsyncSqlOutputFormat.java:231)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'created_dtm' in 'field list'
我尝试了以下多种指定列的方法:
--columns A,B,created_dtm,D,E
--columns 'A','B','created_dtm','D','E'
--columns "A,B,created_dtm,D,E"
但以上都没有奏效。当表格为空时第一次执行上述SQOOP命令时,它会成功插入所有记录,因为我已经指定了--update-mode =" allow-insert",但是在我尝试之后更新相同的数据。这项工作每次都失败了。
有人可以建议这里有什么问题吗?
表结构如下:
CREATE TABLE if not exists schema.`table` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`A` varchar(254) NOT NULL,
`B` bigint(20) DEFAULT NULL,
`created_dtm` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`C` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`E` bigint(20) NOT NULL,
`D` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `u_table` (`A`),
KEY `i_table_C` (`C`)
)