sql - Sqoop 增量导入 Lastmodified 失败并出现错误:无法从数据库获取当前时间
问题描述
我正在尝试使用 Sqoop 增量 lastmodified 从 DB2 数据库导入表。该表有一个时间戳类型的列,这是我正在使用的检查列。我想先导入整个表,然后再导入任何最新的修改,因此我将我的最后一个值设置为 0。下面是命令:
注意:updateTS 列中的某些值为“1/1/0001 12:00:00”
sqoop import --connect "jdbc:db2*****************" --username **** --password ***** --driver com.ibm.db2.jcc.DB2Driver --table my_table --m 20 --split-by col1 --target-dir /user/employ/sqoop_dir --check-column updateTS --incremental lastmodified --last-value 0
当我执行上述命令时,出现以下错误
com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=);<INTEGER>, DRIVER=4.17.29
at com.ibm.db2.jcc.am.hd.a(hd.java:747)
at com.ibm.db2.jcc.am.hd.a(hd.java:66)
at com.ibm.db2.jcc.am.hd.a(hd.java:135)
at com.ibm.db2.jcc.am.wo.c(wo.java:2771)
at com.ibm.db2.jcc.am.wo.d(wo.java:2759)
at com.ibm.db2.jcc.am.wo.a(wo.java:2192)
at com.ibm.db2.jcc.am.wo.a(wo.java:2168)
at com.ibm.db2.jcc.t4.ab.h(ab.java:136)
at com.ibm.db2.jcc.t4.ab.b(ab.java:41)
at com.ibm.db2.jcc.t4.o.a(o.java:32)
at com.ibm.db2.jcc.t4.tb.i(tb.java:145)
at com.ibm.db2.jcc.am.wo.kb(wo.java:2161)
at com.ibm.db2.jcc.am.wo.a(wo.java:3258)
at com.ibm.db2.jcc.am.wo.a(wo.java:697)
at com.ibm.db2.jcc.am.wo.executeQuery(wo.java:676)
at org.apache.sqoop.manager.SqlManager.getCurrentDbTimestamp(SqlManager.java:986)
at org.apache.sqoop.tool.ImportTool.initIncrementalConstraints(ImportTool.java:346)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:525)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:633)
at org.apache.sqoop.Sqoop.run(Sqoop.java:146)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:182)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:233)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:242)
at org.apache.sqoop.Sqoop.main(Sqoop.java:251)
20/09/16 23:52:02 ERROR manager.SqlManager: Chained exception 1:
com.ibm.db2.jcc.am.SqlException: DB2 SQL Error: SQLCODE=-514, SQLSTATE=26501,
SQLERRMC=SQL_CURLH200C1, DRIVER=4.17.29
at com.ibm.db2.jcc.am.hd.a(hd.java:752)
at com.ibm.db2.jcc.am.hd.a(hd.java:66)
at com.ibm.db2.jcc.am.hd.a(hd.java:135)
at com.ibm.db2.jcc.am.wo.c(wo.java:2771)
at com.ibm.db2.jcc.am.wo.a(wo.java:2219)
at com.ibm.db2.jcc.t4.ab.o(ab.java:908)
at com.ibm.db2.jcc.t4.ab.j(ab.java:267)
at com.ibm.db2.jcc.t4.ab.d(ab.java:55)
at com.ibm.db2.jcc.t4.o.c(o.java:44)
at com.ibm.db2.jcc.t4.tb.j(tb.java:157)
at com.ibm.db2.jcc.am.wo.mb(wo.java:2214)
at com.ibm.db2.jcc.am.wo.a(wo.java:3261)
at com.ibm.db2.jcc.am.wo.a(wo.java:697)
at com.ibm.db2.jcc.am.wo.executeQuery(wo.java:676)
at org.apache.sqoop.manager.SqlManager.getCurrentDbTimestamp(SqlManager.java:986)
at org.apache.sqoop.tool.ImportTool.initIncrementalConstraints(ImportTool.java:346)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:525)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:633)
at org.apache.sqoop.Sqoop.run(Sqoop.java:146)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:182)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:233)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:242)
at org.apache.sqoop.Sqoop.main(Sqoop.java:251)
20/09/16 23:52:02 ERROR tool.ImportTool: Import failed: java.io.IOException: Could not get current
time from database
at org.apache.sqoop.tool.ImportTool.initIncrementalConstraints(ImportTool.java:348)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:525)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:633)
at org.apache.sqoop.Sqoop.run(Sqoop.java:146)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:182)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:233)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:242)
at org.apache.sqoop.Sqoop.main(Sqoop.java:251)
此外,如果我只是在没有增量 lastmodified 条件的情况下导入,则导入成功。
sqoop import --connect "jdbc:db2*****************" --username **** --password ***** --driver com.ibm.db2.jcc.DB2Driver --table my_table --m 20 --split-by col1 --target-dir /user/employ/sqoop_dir
但是,格式为 20/22/2002 的 updateTS 列现在转换为纪元时间戳。
我该如何解决这两个问题?
解决方案
推荐阅读
- reactjs - Redux 没有将状态传递给道具
- javascript - 扩展功能标签
- javascript - Node JS 中的文件下载
- python - 在 Python 3 中将阿拉伯语单词导出到 csv
- spring-mvc - 将 Spring Boot jar 放入现有的 Spring 项目
- arrays - 切片的别名
- c# - C#制表符分隔的文本文件,具有多列和列中的多个值到数据表
- jquery - Jquery cookie 在 wordpress 网站上不起作用
- sql - SQL - 更新/插入后触发选择
- java - 无法从 TemporalAccessor 获取 ZonedDateTime: