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

时间:2016-12-29 13:28:22

标签: sqoop sqoop2

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

当我更新/插入表中的行并使用lastmodified运行增量sqoop导入时,它将使我的数据库和hdfs保持同步但“如果数据从表中删除然后我使用lastmodified运行sqoop incremental选项吗?它还会处理从HDFS中删除数据以使它们保持同步的问题吗?或者还有其他方法可以处理删除情况吗?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

除非记录在源系统中标记为“已删除”,否则SQOOP Incremental不支持“DELETE”。根据Hortonworks的一篇非常有趣的document解释。

所以我对任何没有删除记录的表使用incremental。您会惊讶地发现大多数交易数据库中存在多少这些。

当我的表格可能有“DELETE”(并且我没有指示符)时,我会在暂存区域中导入整个数据集,然后在HIVE中运行“diff”查询以识别已删除的记录。

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

答案 2 :(得分:1)

如果您使用的是MySQL,则可以尝试解析MySQL Binlog以监视已删除的行。然后使用MySQL binlog + sqoop逐步提取数据。