PostgreSQL增量加载场景下如何查询被移除的记录
解决方案
首先明确核心逻辑:被移除的记录是「加载前最终表中,所属ID在当前增量表中存在,但自身未出现在当前增量表同ID下的记录」。针对首日(最终表为空)和次日的场景,通用查询方案如下:
假设表结构为:
incremental_table:id INT, code VARCHARfinal_table:id INT, code VARCHAR
查询被移除记录的SQL
SELECT ft.id, ft.code FROM final_table ft -- 只关注增量表中存在的ID对应的最终表记录 JOIN (SELECT DISTINCT id FROM incremental_table) it_ids ON ft.id = it_ids.id -- 过滤掉增量表中仍存在的同ID同Code记录 WHERE NOT EXISTS ( SELECT 1 FROM incremental_table it WHERE it.id = ft.id AND it.code = ft.code );
场景验证
- 首日加载前:
final_table为空,查询返回空结果,符合预期(无记录被移除)。 - 次日加载前:
final_table包含(1,A),(1,B),(2,C),incremental_table包含(1,D)。查询会筛选出(1,A),(1,B),正是需要找出的被移除记录。
注意事项
- 需在更新
final_table之前执行该查询,否则原记录已被覆盖,无法获取被移除的内容。 - 如果你的表有其他主键/唯一键,只需调整
WHERE子句中的匹配条件即可。
内容的提问来源于stack exchange,提问作者Alice Ho
相关产品推荐
相关产品推荐

