SQOOP 增量导入:当从数据库中删除一行时它如何处理数据?

SQOOP incremental import: how it handles the data when a row is deleted from the database?

假设我有一个员工 table 列( emp_id、emp_name、emp_age、emp_update_ts),updat_ts 字段是如果 table 上有更新,每次都会自动更新为当前时间戳。现在我的问题是:

当我 update/insert table 和 运行 增量 sqoop 导入中的行与 lastmodified 它将使我的数据库和 hdfs 同步但是“如果数据被删除怎么办从 table 然后我 运行 带有 lastmodified 选项的 sqoop 增量?它还会负责从 HDFS 中删除数据以保持它们同步还是有任何其他方法可以处理删除情况?

SQOOP 增量不支持每个说 "DELETE",除非记录在源系统中标记为 "deleted"。根据 Hortonworks 制作的非常有趣的 document 解释。

所以我对任何从未删除过记录的表使用增量。您会惊讶于大多数事务数据库中存在多少这样的东西。

当我确实有可能具有 "DELETE" 的表(并且我没有指示器)时,我将整个数据集导入暂存区,然后 运行 在 HIVE 中进行 "diff" 查询识别删除的记录。

在 HQL 查询中查看我的 以执行此操作 "diff"。

SQOOP 只是一个 import/export 工具。它不检查任何已删除的数据。 import/export 过程完成后,您必须通过编写查询手动比较两个数据库。

或者如果您的数据集很小,那么您可以通过 impala 导入 csv 并检查。

如果您正在使用MySQL,您可以尝试解析MySQL binlog 来监控删除的行。然后使用MySQLbinlog + sqoop增量提取数据