Den*_*rov 1 database-design etl data-warehouse
我想构建一个数据仓库,并且想使用代理键作为事实表的主键。但问题是,就我而言,事实表应该更新。
第一个问题是如何在源系统中找到自然键对应的自动生成的代理键?我看到一些答案提到查找表存储自然键和代理键之间的对应关系,但我不明白它们到底是如何实现的。该表应该存储在哪里:数据仓库本身还是其他地方?
还有第二个问题。源系统已包含事实的代理键,但它们具有 16 字节的 UUID 数据类型。并且事实的数量不太可能超过最大整数值(4 字节)。我应该使用源系统提供的 UUID 来简化 ETL,还是应该执行更复杂的 ETL 并实现自己的整数代理键以获得更好的性能?
小智 5
我想剩下的已经有了答案。我愿意为您提供关于管理和维护代理键的 2 美分。
在 Teradata 工作期间,我经常使用代理键。以下是我多年来学到的有关代理键的一些最佳实践。
有时,您必须允许这样做来简化您的 ETL 流程,同时为来自 2 个不同源系统的两个不同自然键加载相同的客户 ID,但它们都表示同一个客户。
有了这个查找表,您需要从阶段表/源加载它(生成键),这是 ETL 过程中的第一件事。然后,您从阶段左外连接与查找表加载以获取代理键并将其加载到您的事实表中,希望也加载到您的自然键中。(你总是希望拥有它们,因为大多数情况下你会在你的事实表中得到一些孤儿,而恢复这种情况的唯一快速可靠的方法是在你的事实表中拥有你的自然键并使用 PK 或 PI 或基于索引更新操作比全表扫描非常快)
我可以继续谈论代理键。请在阅读此高级概述后提出任何具体问题。我很乐意提供帮助。