Sqoop 增量追加

Posted

技术标签:

【中文标题】Sqoop 增量追加【英文标题】:Sqoop incremental append 【发布时间】:2016-06-03 02:49:44 【问题描述】:

mysql 中,我有带有字段 (eid、ename、esal) 的 mydb/emp 表。

在这里,我尝试在步骤 1 中使用增量追加导入 emp,而无需创建作业并传递最后一个值。

sqoop import  -- connect jdbc:mysql://localhost/myDB --table  test --m 1 
--target-dir /user/cloudera/mydata --incremental append --check-column eid

我得到了 mydata 中不同文件的结果,名称为 part-0001.. 更新值从 eid 0 到最后一个 ex。 eid 0 到 eid 8 记录。

但是当我使用作业执行相同的代码时,结果是不同的......

sqoop job  --create dayimport  -- import  --connect jdbc:mysql://localhost/myDB --table  test --m 1 --target-dir /user/cloudera/mydata --incremental append --check-column eid 

sqoop job --exec dayimport

在这里我得到了不同文件的结果,但只更新了记录,即来自最后一个值,例如。我已经用新的 eid 7,8 行更新了表格,所以它只包含 eid 7 和 8 记录。

有人可以解释为什么这种情况发生在工作而不是普通脚本上吗? 如果记录巨大,如何在检查列后确定最后一个值?有什么直接的方法可以在不检查最终值的情况下知道上次更新的值吗?

【问题讨论】:

【参考方案1】:

在增量导入中,如果不指定最后一个值,sqoop 会导入所有行,但是当它保存为作业时,即使没有给出最后一个值,sqoop 也会知道从哪里导入。 如果你打算做一个保存的工作,你不需要给出最后一个值,但是如果你想知道它,它是这样给出的:

--last-value

请参阅user guide。

【讨论】:

以上是关于Sqoop 增量追加的主要内容,如果未能解决你的问题,请参考以下文章

怎么用sqoop增量从hive往oracle数据库导数据

sqoop导入增量数据

Sqoop增量导入

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

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

如何使用 Sqoop 从 MySQL 增量导入到 Hive?