背景:我的团队有一个更新聚合表的 etl 作业。每行都包含特定日期的数据,但该行可以并且将会在行日期之后更新(这意味着任何行都可以包含来自多个作业的数据)。这个 ETL 作业上周丢失了一些数据,现在我需要回填它。
问题:我丢失了数据,我计划做的是将这些数据转储到临时表中,然后将其与聚合表合并。这样我就可以处理 ETL 作业是否已包含该数据的行(更新)或是否需要添加新行(插入),但我没有足够的权限来创建临时表,并且我' d 不想让 DBA 参与进来。
问题:我可以在不创建临时表的情况下执行插入/更新排序行为吗(顺便说一句,这是 Oracle SQL)。
编辑:数据来自 tsv 文件。
最佳答案
为什么要避免让 DBA 参与进来? DBA 应该充分了解数据库中发生的情况,因为他们最终对数据库中数据的状况负责。所以你不应该和他们玩偷偷摸摸的突击队。
由于您有一个缺少数据的文件,将其呈现给数据库的最简单方法是使用 an external table 。这需要创建表,可能还需要创建目录对象。您将需要 DBA 的帮助来完成此任务。
避免创建数据库对象的唯一方法是将 TSV 文件转换为一系列 DML 语句。支持正则表达式和/或记录宏的 IDE 在这里将被证明是无价的。我喜欢TextPad ;还可以使用其他编辑器。
在 Oracle 中执行更新插入的 DML 语句是 the MERGE statement 。您需要注意的一件事是新近度。您丢失的数据来自上周。如果存在一行,则它可能已在插入期间添加或修改。。您必须编写 MERGE 语句,以便它不会用较旧的数据覆盖较新的数据。希望您的表具有有用的元数据列,例如 DATE_CREATED 和 LAST_UPDATED。
关于oracle - 如何在不创建新表(临时表或其他表)的情况下更新/插入表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10503798/