Sqoop 带有 Epoch 时间戳的增量负载

Posted

技术标签:

【中文标题】Sqoop 带有 Epoch 时间戳的增量负载【英文标题】:Sqoop Incremental Load With Epoch Timestamp 【发布时间】:2019-03-07 04:03:34 【问题描述】:

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

【问题讨论】:

【参考方案1】:

例外情况很明显是类型不匹配,并且 Sqoop 需要日期或时间戳,但您的 --last-value 格式是 int。

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

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

由于 Sqoop 内部是 Java,它必须匹配 java.sql.Data 类型。重新检查 DDL 并调整 sqoop 导入命令。

【讨论】:

如问题中所述,源数据库以INT 类型(Epoch 时间戳)存储update_date,如何使sqoop 与Epoch 时间戳一起使用?

以上是关于Sqoop 带有 Epoch 时间戳的增量负载的主要内容,如果未能解决你的问题,请参考以下文章

Sqoop 增量追加

什么是两台机器之间时间戳的最佳 c++ chrono 函数

sqoop导入增量数据

使用 cloudera hadoop UI 自动化 sqoop 增量

sqoop如何在增量导入中导入固定数量的行?

Sqoop 增量追加模式不为 --check-column 导入空行,该列是时间戳,具有空值