我正在以下面的基本形式总结我的用例。任何建议将不胜感激。
ETL:
|-> FINAL DB
SOURCE -> INTERIM DB -|
|-> HISTORY DB
HISTORY DB使用INTERIM和FINAL DB之间的差异进行更新。
最终数据库使用Oracle的合并实用程序进行了更新。
在第1天,我们从SOURCE中提取数据并将10个条目放入INTERIM DB。
我们运行一个PL / SQL流,该流将用10个条目更新FINAL DB和HISTORY DB。
在第2天,还有10个条目出现。但是1是更新,1是删除,1是插入。
因此,现在,FINAL DB共有11个整体(早期10 + 1个插入),而HISTORY DB具有13个条目(所有插入(10个早期+ 1个更新+ 1个删除+ 1个插入))。
我们使用HISTORY DB中具有DELETE状态的条目来删除FINAL DB中的条目。
如果我们从SOURCE中提取所有条目,则上述前提成立。
如果仅提取增量数据(已更改的条目),则将给出错误的删除。例如:如果我只提取2个条目(1个更新和1个插入),则不提取全部10个(如步骤(5)中所述),则无法在HISTORY表中找到DELETES(因为其余8个未找到)提取,在“历史记录”表中也将标记为“删除”。
问题:
实际情况涉及数百万条记录,因此我们无法在INTERIM DB中获取所有数据。 Oracle Merge
语句将更改合并到FINAL DB中,但不执行我们计划通过使用状态表中状态为'DELETE'的条目运行其他delete语句来执行的删除操作。但是问题是,当我们在INTERIM DB中有增量数据时,如何在历史记录表中有正确的条目?
一种解决方案:
要定期获取完整数据,以确定删除内容。
请提出其他解决方案/想法。谢谢。