繁体   English   中英

带有时间戳的Sqoop增量负载

[英]Sqoop Incremental Load With Epoch Timestamp

使用Sqoop增量工具需要以--last-value的形式提供最后修改日期,格式类似于2016-09-05 06:04:27.0 在这种情况下,问题在源MySQL数据库中,update_date数据存储为Epoch时间戳( 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"

解决了一个错误,指出提供的纪元时间戳中的日期不是时间戳

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获取增量数据?

显然,例外情况是类型不匹配,并且Sqoop期望使用日期或时间戳,但是--last-value格式为int。

如果您阅读sqoop文档,则说...

通过将检查列中的值与最新导入的参考值进行比较来执行增量导入。 例如,如果指定了--incremental append参数以及--check-column id和--last-value 100,则将导入所有id> 100的行。

由于Sqoop在内部是Java,因此它必须与java.sql.Data类型匹配。 重新检查DDL并改编sqoop import命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM