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

92dk7w1h  于 2021-06-03  发布在  Sqoop
关注(0)|答案(3)|浏览(580)

假设我有一个employee表,其列为(emp\u id,emp\u name,emp\u age,emp\u update\u ts),update\u ts字段在每次更新表时自动更新为当前时间戳。现在我的问题是:
当我更新/插入表中的行并使用lastmodified运行增量sqoop import时,它将使我的数据库和hdfs同步,但是“如果从表中删除数据,然后使用lastmodified运行sqoop incremental选项怎么办?它是否还负责从hdfs中删除数据以保持同步,或者是否有其他方法可以处理删除情况?

f45qwnt8

f45qwnt81#

如果使用mysql,可以尝试解析mysql binlog来监视删除的行。然后使用mysql binlog+sqoop增量提取数据。

nr9pn0ug

nr9pn0ug2#

sqoop incremental不支持“delete”,除非记录在源系统中标记为“deleted”。根据霍顿工厂制作的一份非常有趣的文件解释。
因此,我对从未删除记录的任何表都使用增量。在大多数事务数据库中,有这么多这样的数据库,您会感到惊讶。
当我确实有可能有“delete”的表时(并且我没有指示符),我在暂存区域导入整个数据集,然后在配置单元中运行“diff”查询来标识删除的记录。
请参阅我在hql查询上的文章来实现这个“diff”。

cgyqldqp

cgyqldqp3#

sqoop只是一个导入/导出工具。它不检查任何已删除的数据。一旦导入/导出过程完成,就必须通过编写查询来手动比较这两个数据库。
或者如果您的数据集很小,那么您可以通过impala导入csv并检查。

相关问题