带有epoch时间戳的sqoop增量加载

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

使用sqoop增量工具需要在中提供最后修改日期 --last-value 格式类似于 2016-09-05 06:04:27.0 . 这个案子的问题在源头 MySQL 数据库中,更新日期数据存储为历元时间戳( 1550218178 ).
使用以下sqoop命令

sqoop import --verbose --connect jdbc:mysql://192.18.2.5:3306/iprocure_ip --table depot --username usernamehere --password-file /user/admin/.password --check-column update_date --incremental lastmodified --last-value '1550218178' --target-dir /user/admin/notexist --merge-key "depot_id"

t说明提供的epoch timestamp中的日期不是时间戳的错误

19/03/06 12:57:31 ERROR manager.SqlManager: Column type is neither timestamp nor date!
19/03/06 12:57:31 ERROR sqoop.Sqoop: Got exception running Sqoop: 
java.lang.RuntimeException: Column type is neither timestamp nor date!
java.lang.RuntimeException: Column type is neither timestamp nor date!
    at org.apache.sqoop.manager.ConnManager.datetimeToQueryString(ConnManager.java:788)
    at org.apache.sqoop.tool.ImportTool.initIncrementalConstraints(ImportTool.java:350)
    at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:526)
    at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:656)
    at org.apache.sqoop.Sqoop.run(Sqoop.java:150)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
    at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:186)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:240)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:249)
    at org.apache.sqoop.Sqoop.main(Sqoop.java:258)

如何使用epoch时间戳使用sqoop获取增量数据?

p4tfgftt

p4tfgftt1#

异常很明显是类型不匹配,sqoop需要日期或时间戳,但您的--last值格式是int。
如果你阅读了sqoop文档,is说。。。
增量导入是通过将check列中的值与最近导入的引用值进行比较来执行的。例如,如果指定了--incremental append参数以及--check column id和--last value 100,则将导入id>100的所有行
因为sqoop在内部是java,它必须匹配java.sql.data类型。重新检查ddl并调整sqoop导入命令。

相关问题