2

背景:我的团队有一个更新聚合表的 etl 作业。每行包含特定日期的数据,但该行可以并且将在行日期之后更新(这意味着任何行都可以包含来自多个作业的数据)。这个 ETL 作业上周错过了一天的一些数据,现在我需要回填它。

问题:我有丢失的数据,我打算将这些数据转储到一个临时表中,然后将它与 agg 表合并。这样我就可以处理 ETL 作业是否已经包含该数据的行(更新)或者是否需要添加新行(插入),但是我没有足够的权限来创建临时表,而且我d 宁愿不让 DBA 参与进来。

问题:我能否在不创建临时表的情况下执行插入/更新行为(顺便说一下,这是 Oracle SQL)。

编辑:数据来自 tsv 文件。

4

1 回答 1

2

为什么要避免涉及 DBA?DBA 应该对数据库中发生的事情有充分的了解,因为他们最终要对数据库中的数据状况负责。所以你不应该和他们玩鬼鬼祟祟的突击队。

由于您有一个缺少数据的文件,因此将其呈现给数据库的最简单方法是使用外部表。这需要创建表,可能还需要创建目录对象。您将需要 DBA 的帮助来完成此任务。

避免创建数据库对象的唯一方法是将 TSV 文件转换为一系列 DML 语句。支持正则表达式和/或记录宏的 IDE 在这里将证明是无价的。我喜欢文本板;其他编辑器可用。

在 Oracle 中执行 upserts 的 DML 语句是MERGE 语句。您需要注意的一件事是新近度。您丢失的数据来自上周。如果存在一行,则它可能已在中间期间添加或修改。您必须编写 MERGE 语句,这样它就不会用较旧的数据覆盖较新的数据。希望您的表具有有用的元数据列,例如 DATE_CREATED 和 LAST_UPDATED。

于 2012-05-09T08:44:34.630 回答