ETL-确定删除的条目-Oracle 12c

时间:2018-11-23 18:52:08

标签: sql oracle plsql etl

我正在以下面的基本形式总结我的用例。任何建议将不胜感激。

ETL:

                      |-> FINAL DB 
SOURCE -> INTERIM DB -|
                      |-> HISTORY DB
  1. HISTORY DB使用INTERIM和FINAL DB之间的差异进行更新。

  2. 最终数据库使用Oracle的合并实用程序进行了更新。

  3. 在第1天,我们从SOURCE中提取数据并将10个条目放入INTERIM DB。

  4. 我们运行一个PL / SQL流,该流将用10个条目更新FINAL DB和HISTORY DB。

  5. 在第2天,还有10个条目出现。但是1是更新,1是删除,1是插入。

  6. 因此,现在,FINAL DB共有11个整体(早期10 + 1个插入),而HISTORY DB具有13个条目(所有插入(10个早期+ 1个更新+ 1个删除+ 1个插入))。

  7. 我们使用HISTORY DB中具有DELETE状态的条目来删除FINAL DB中的条目。

  8. 如果我们从SOURCE中提取所有条目,则上述前提成立。

  9. 如果仅提取增量数据(已更改的条目),则将给出错误的删除。例如:如果我只提取2个条目(1个更新和1个插入),则不提取全部10个(如步骤(5)中所述),则无法在HISTORY表中找到DELETES(因为其余8个未找到)提取,在“历史记录”表中也将标记为“删除”。

问题:
实际情况涉及数百万条记录,因此我们无法在INTERIM DB中获取所有数据。 Oracle Merge语句将更改合并到FINAL DB中,但不执行我们计划通过使用状态表中状态为'DELETE'的条目运行其他delete语句来执行的删除操作。但是问题是,当我们在INTERIM DB中有增量数据时,如何在历史记录表中有正确的条目?

一种解决方案:
要定期获取完整数据,以确定删除内容。

请提出其他解决方案/想法。谢谢。

0 个答案:

没有答案