我在更新数据库中的历史表时遇到了问题。我在 ETL 工作中有 3 个步骤:
- 检测更改 - Matillion ETL 发现两个表之间的差异并将其写入 tmp 表
- 关闭当前 - 此步骤将 current_flag = 'Y' 的所有行更新为 'N' 并将 end_date 设置为 dateadd(day,-1,current_date)
- 插入行 - 步骤 1 中 tmp 表中的所有行(仅过滤带有 N 和 C 指示符的行)被附加到历史表中,其中 start_date 等于 dateadd(day,-1,current_date) 并且结束日期等于 '2099-01 -01'
发生的情况是,步骤 2 和 3 是使用昨天的数据(来自 tmp 表)错误地手动执行的,并且在 15 分钟后,所有 3 个步骤的作业再次按照预期使用新数据执行。我有不同的 update_timestamps(2021-03-19 01:59:02 和 2021-03-19 02:11:57)可用于解决此问题。但是我在修复手动更新的数据时遇到了困难(start_date='2021-03-18' and end_date='2021-03-18' and current_flag='N'),我相信这些应该再次更新到 start_date ='2021-03-18' and end_date='2099-01-01' and current_flag='Y') 但我不确定如何处理新的作业数据(较新的时间戳 - 正确执行),因为它已完成错误的数据。我是否应该在修复 start_date='2021-03-18' 和 end_date=' 后删除它并重新运行 2021-03-18' 和 current_flag='N' 手动?另外,我觉得我在这里缺少一些步骤?
谢谢