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