如何使用sqoop只导入新数据?

eyh26e7m  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(543)

让我举个例子:我昨天导出了1tb的数据。今天,数据库又获得了1gb的数据。如果我今天再次尝试导入数据,sqoop将导入1tb+1gb的数据,然后我将合并它。所以很头痛。我只想导入新数据并将其附加到旧数据。这样,我每天都会将rdbms数据拉入hdfs。

rqdpfwrv

rqdpfwrv1#

您可以使用sqoop增量导入:
sqoop提供了一个 incremental import 模式,仅可用于检索比以前导入的行集更新的行。
增量导入参数: --check-column (col) 指定在确定要导入哪些行时要检查的列。 --incremental (mode) 指定sqoop如何确定哪些行是新的。模式的合法值包括append和last modified。 --last-value (value) 指定上次导入的check列的最大值。
reference:https用法://sqoop.apache.org/docs/1.4.2/sqoopuserguide.html
对于增量导入:需要在检查列中针对最近导入的引用值指定一个值。例如,如果 –incremental 指定了append参数,以及 –check-column id and –last-value 100 ,将导入id>100的所有行。如果从命令行运行增量导入,则应指定为 –last-value 在随后的增量导入中将打印到屏幕上供您参考。如果从保存的作业运行增量导入,则此值将保留在保存的作业中。后续运行 sqoop job –exec 某些增量作业将继续只导入比以前导入的行更新的行。
要一次性导入所有表,需要使用sqoop import all tables命令,但此命令必须满足以下条件才能工作
每个表必须有一个单列主键。必须导入每个表的所有列。您不能打算使用非默认拆分列,也不能通过where子句强加任何条件。
reference:httpshttp://hortonworks.com/community/forums/topic/sqoop-incremental-import/

相关问题