使用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命令。