当使用sqoop将数据从sqlserver或任何rdbms数据库导入hadoop时,我们可以使用增量式append或last-modified或一些自由形式的查询来获取新追加的记录或修改的记录。我们是否可以识别已删除的记录?考虑到当记录被删除时,它将不存在于sql表中。一种解决方法是使用sqoop加载完整的表,并与hive中的上一个表进行比较。还有其他最好的方法吗?
oknwwptz1#
增量sqooping不处理现成的已删除记录。有两种方法你可能需要考虑。请看这个帖子。
p3rjfoxz2#
不,不能使用sqoop获取已删除的记录。更好的解决方法可以是:创建 boolean 字段 status (默认值) true )在sql server表中。无论何时需要删除该记录,不要删除,只要用标记状态更新即可 false .如果您正在使用 last-modified 增量导入,您将在hdfs中获得更改后的数据。稍后(在sqqop导入之后)可以删除所有状态为的记录 false .
boolean
status
true
false
last-modified
35g0bw713#
如果要同步整个分区或表,则可以在sqoop导入之后标识已删除的记录,然后使用与现有目标分区或表的完全联接将它们合并。目标表/分区中存在的、导入数据中不存在的记录是自上次同步后在源数据库中删除的记录。
3条答案
按热度按时间oknwwptz1#
增量sqooping不处理现成的已删除记录。有两种方法你可能需要考虑。
请看这个帖子。
p3rjfoxz2#
不,不能使用sqoop获取已删除的记录。
更好的解决方法可以是:
创建
boolean
字段status
(默认值)true
)在sql server表中。无论何时需要删除该记录,不要删除,只要用标记状态更新即可
false
.如果您正在使用
last-modified
增量导入,您将在hdfs中获得更改后的数据。稍后(在sqqop导入之后)可以删除所有状态为的记录
false
.35g0bw713#
如果要同步整个分区或表,则可以在sqoop导入之后标识已删除的记录,然后使用与现有目标分区或表的完全联接将它们合并。目标表/分区中存在的、导入数据中不存在的记录是自上次同步后在源数据库中删除的记录。