在使用Sqoop将数据从sql server或任何RDBMS数据库导入Hadoop时,我们可以使用增量追加或上次修改或一些自由格式查询来获取新附加的记录或修改的记录。
无论如何,我们可以识别已删除的记录吗?考虑到删除记录时,它将不存在于sql表中。
一种解决方法是使用 Sqoop 加载整个表,并在 Hive 中与以前的表进行比较。
还有其他最好的方法吗?
不,您无法使用 sqoop 获取已删除的记录。
更好的解决方法可能是:
在 SQL Server 表中创建一个boolean
字段status
(默认true
)。
每当您需要删除该记录时,不要删除只是使用标记状态false
进行更新。
如果您使用的是增量导入last-modified
您将在 HDFS 中获得此更改的数据。
稍后(sqqop 导入后),您可以删除状态为 false
的所有这些记录。
如果要同步整个分区或表,则可以在 sqoop 导入后识别已删除的记录,然后再使用与现有目标分区或表的完全联接来合并它们。目标表/分区中存在的记录,如果导入的数据中不存在,则为自上次同步以来在源数据库上删除的记录。
增量 sqooping 不会处理开箱即用的已删除记录。您可能需要考虑两种方法。
请看这篇文章。