如何使用Sqoop仅导入新数据?

时间:2015-06-11 10:11:57

标签: hadoop import hdfs rdbms sqoop

让我举个例子:昨天我输出了1TB的数据。今天,该数据库又获得了1GB的数据。如果我今天再次尝试导入数据,Sqoop将导入1TB + 1GB的数据,然后我合并它。这让人很头疼。我只想导入新数据并将其附加到旧数据。通过这种方式,我每天都会将RDBMS数据拉入HDFS。

1 个答案:

答案 0 :(得分:4)

您可以使用sqoop增量导入:

Sqoop提供incremental import模式,可用于仅检索比先前导入的一组行更新的行。

增量导入参数:

--check-column (col)指定在确定要导入的行时要检查的列。 --incremental (mode)指定Sqoop如何确定哪些行是新的。模式的合法值包括追加和最后修改。

--last-value (value)指定上一次导入的检查列的最大值。

参考: https://sqoop.apache.org/docs/1.4.2/SqoopUserGuide.html#_incremental_imports

对于增量导入:您需要在检查列中指定最近导入的参考值。例如,如果指定了–incremental append参数以及–check-column id and –last-value 100,则所有行的ID都为> 100将被导入。如果从命令行运行增量导入,则在后续增量导入中应指定为–last-value的值将打印到屏幕上供您参考。如果从已保存的作业运行增量导入,则此值将保留在已保存的作业中。后续运行sqoop job –exec某些增量作业将继续仅导入比先前导入的行更新的行。

要一次性导入所有表,您需要使用sqoop-import-all-tables命令,但此命令必须满足以下条件才能工作

每个表必须具有单列主键。 您必须打算导入每个表的所有列。 您不能打算使用非默认拆分列,也不能通过WHERE子句强加任何条件。

参考: https://hortonworks.com/community/forums/topic/sqoop-incremental-import/