3.2增量导入变化数据

Apache Sqoop Cookbook 英文版-翻译学习!!
更多信息https://blue-shadow.top/

3.2增量导入变化数据

问题

当你使用增量特征时,但表中的数据已经被更新了,这样情况也就无法使用追加模式。

解决方案

使用最后修改模式来代替追加模式,举例来说,使用以下命令进行传输last_value_date值大于2013-05-22 01:01:01的列。

sqoop import \
--connect jdbc:mysql://mysql.example.com/sqoop \
--username sqoop \
--password sqoop \
--table visits \
--incremental lastmodified \
--check-column last_update_date \
--last-value "2013-05-22 01:01:01"

讨论

lastmodified增量模式 要求有一个包含日期值的列 (适合的类型是日期、时间、日期和时间戳), 其中包括有关上次更新每一行的信息
Sqoop 将只导入上次导入后更新的行。在每个新行插入或对现有行的更改时应该将此列更新为当前时间,这样可以确保 Sqoop 能够准确地发现已更改的行。Sqoop只
知道你传递的信息,所以应用程序有责任在每行更改上可靠地更新此列。任何没有修改列的行 即使指定了参数--check--column参数,也都不会导入。

在这个参数的内部机理中,lastmodify增量导入,由两个独立的mapreduce组成,第一个像普通导入一样导入增量数据,这步操作中将会把数据存放到hdfs的临时目录
上,第二个会将新旧数据合并到最终输出,仅保留每行的最后更新值,这样就和追加类型的情况一样。与追加类型的情况一样, 对于后续的增量导入, 需要做的就是更 新 --last-value 的值。为了方便起见, 在每次增量导入时, Sqoop 都会打印出来。

13/03/18 08:16:36 INFO tool.ImportTool: Incremental import complete! ...
13/03/18 08:16:36 INFO tool.ImportTool: --incremental lastmodified
13/03/18 08:16:36 INFO tool.ImportTool: --check-column update_date
13/03/18 08:16:36 INFO tool.ImportTool: --last-value '1987-05-22 02:02:02'

转载于:https://www.jianshu.com/p/e3e05426406d

猜你喜欢

转载自blog.csdn.net/weixin_34319999/article/details/91186137