如果在oracle(或任何rdbms)中有一个表,其中包含每天刷新的数据。
例子:
1234,Raj,Kolkata,1000,09092015
假设,我今天使用标准的sqoop导入并存储在flatfile的hdfs中导入这一行。第二天,该行将从源表中删除。但是如果同一记录在7天后被更新(比如sal字段1000被更新为2000)。
如果我再次运行sqoop查询,它将如何处理数据以及如何存储数据?同一条记录会有两个条目,还是更新新的值?
你要这张唱片吗 <1234, Raj, Kolkata, 1000, 09092015>
换成这个?
<1234, Raj, Kolkata, 2000, 09092015>
1条答案
按热度按时间kmb7vmvb1#
如果在sqoop中执行增量导入,则可以通过使用参数来控制更新其中一行时发生的情况以及插入新行时发生的情况
--incremental
. 您有两种选择:追加(
sqoop import (...) --incremental append
)当新行不断添加到数据库中并且您希望导入新行时,将使用此选项。在这种情况下,您需要通过check-column
参数。上次修改(
sqoop import (...) --incremental lastmodified
). 这个选项是您在示例中想要的,它允许您告诉sqoop您想要检查表中更新的行(您已经导入的),并将它们设置为新值。必须记住,必须通过参数指定--check-column
,sqoop将用来检测更新的行的列名,并且此列需要保存日期值(例如,date
,datetime
,time
或者timestamp
). 在您的示例中,您需要一个额外的列来保存日期值,并且您应该在每次更改其他任何列的值时更新该值,以便导入该行。当然,如果更新一行但不更新
check-column
对于该行,它不会在目标表中更新。我希望这有帮助。