Databricks DLT管道apply_as_deletes子句未删除记录问题排查
DLT SCD Type 2中apply_as_deletes未实际删除记录的排查要点
核心机制认知问题
SCD Type 2的设计本质是保留全量历史版本,仅通过is_active(或自定义的活跃标记字段)区分当前有效记录。apply_as_deletes子句在SCD2模式下的作用,就是将匹配到的活跃记录标记为非活跃,而非物理删除任何数据——这是该机制的预期行为,并非功能异常。如果GDPR要求彻底物理删除所有关联记录,仅靠SCD2的同步逻辑无法满足需求。
配置参数排查
检查apply_changes()的关键参数是否正确:
- 确认
apply_as_deletes的条件是否精准匹配删除标记,比如是否正确写为apply_as_deletes = (scd2_stream.delete_flag = 'Y') - 确保
keys参数包含id字段(即keys = ['id']),否则无法关联到目标表中对应id的记录 - 验证
sequence_by字段(如更新时间戳)是否合理,需保证delete标记的记录序列值大于目标表中该id的最新记录,否则不会触发状态变更
GDPR合规的补充处理方案
若需彻底删除id=100的所有历史记录,需在SCD2同步逻辑之外额外操作:
- 执行
apply_changes()后,单独运行物理删除语句:DELETE FROM dim_scd2 WHERE id = 100 - 或调整管道顺序,先清理目标表中对应id的全量历史记录,再执行SCD2同步
- 注意:物理删除后无法恢复历史版本,需确认业务场景允许该操作
内容的提问来源于stack exchange,提问作者abhijeet more
相关产品推荐
相关产品推荐

