1

AFAIK,最佳实践说您永远不应该更新事实表行,至少对于事务和定期快照粒度。在阅读Fact Table Surrogate Key时,发现了更新的概念:

某些用于更新事实行的 ETL 技术仅在将代理键分配给事实行时才可行。具体来说,将更新加载到事实行的一种技术是将要更新的行作为新行插入,然后作为单个事务的第二步删除原始行。从 ETL 的角度来看,这种技术的优点是提高了负载性能、提高了恢复能力和提高了审计能力。事实表行的代理键是必需的,因为在插入更新行和删除旧行之间,更新的事实行的旧版本和新版本通常会存在多个相同的主键。

Bob Becker 的意思是从事实表中更新/删除吗?这是一种常见的做法吗?

4

1 回答 1

1

有时您可能需要更新事实表,原因很简单,因为加载了错误的数据。

不确定代理键如何在这里提供帮助 - 您必须根据自然键找到要更改的行。

但是,是的,从可审计性和恢复的原因来看,一个INSERTDELETE(可能只有逻辑删除设置一个取消标志)可能比一个简单的简单 。UPDATE同样,我不确定这会如何影响性能。

最重要的是,2006 年的最佳实践不一定是当前的最佳实践——如今,重要的事实表通常没有主键,因为唯一索引使得滚动分区窗口的概念变得更加困难。(如果需要,在 ETL 过程中检查唯一性)。

于 2019-12-22T12:12:39.297 回答