我有一些源提要,我想使用Azure data Factory v2将数据提取到传统的星型架构数据库(Azure SQL数据库)中,用于OLAP目的。
大多数源提要都对应于一个维度,因此它们映射到我的数据仓库数据库中的模式,而不是内部代理键。
然后我有另一个提要,它与事实表非常对应。那里的许多标识符对应于维度表的业务键。
复制活动的Azure Data Factory v2文档建议尽可能使用(默认)批量复制API以附加模式复制数据。
所以我的问题是:
-
同步维度表的最佳方法是什么。我不想删除我现有的数据并重新填充它,因为这会破坏我的代理密钥,而我的事实表会引用这些密钥。我想使用upstart存储过程,它检查行是否已经存在,并进行更新而不是插入。这会很慢吗?有没有更好的方法(也许在某种程度上使用preCopy脚本?)。
-
在填充事实表时,我希望查找维度的所有相应ID(替代键),并在插入数据之前将所有业务键转换为这些ID。实现这一目标的建议方法是什么?同样,存储过程也可以,但我担心它很慢。有更好的方法吗?
我(和我的一些朋友)知道的最好的方法是合并数据。
要实现这一点,请创建一个临时表(同一目标服务器上的相同或不同数据库),该表仅具有与源表相同的结构+PK。因此,ADF中的过程应分为两个步骤:
- 截断目标(暂存)表
- 将源中的所有数据插入暂存
- 运行包含MERGE语句和其中所有必需逻辑的存储过程
有了这种方法,你会保持:
- 将数据放入暂存表(大容量)时的最佳性能
- 更新(更新/插入)目标表的最快方法
- 实现复杂业务逻辑的能力
- 需要时应用SCD(渐变尺寸)
- 减少磁盘操作量
以下帖子可以帮助您理解流程并构建整个MERGE语句:[https://sqlplayer.net/category/bi/data-warehousing/]
这是一个非常常见的场景,所以你给了我一个新博客的想法。Thx。
我希望这对你有帮助。