如何使用Azure Datafactory v2填充星型架构

时间:2019-02-04 00:59:51

标签: azure-sql-database azure-data-factory-2

我有一些源提要,我想使用Azure Data Factory v2将数据提取到用于OLAP的传统星型模式数据库(Azure SQL数据库)中。

大多数源Feed都对应一个维度,因此除了内部代理键之外,它们都映射到我的数据仓库数据库中的架构。

然后我有另一个供稿,该供稿与事实表非常相似。那里的许多标识符与维表的业务键相对应。

用于复制活动的Azure Data Factory v2文档建议尽可能使用(默认) Bulk Copy API to copy the data in append mode

所以我的问题是:

  1. 同步维度表的最佳方法是什么?我不想删除我现有的数据并重新填充它,因为它将破坏我的代理密钥,这些密钥将由我的事实表引用。我当时正在考虑使用 upsert 存储过程,该过程检查行是否已存在,并执行更新操作而不是插入操作。这会很慢吗?有没有更好的方法(也许以某种方式使用preCopy脚本?)。

  2. 在填充事实表时,我想查找维度的所有相应ID(代理键),然后在插入数据之前将所有业务键转换为这些ID。建议采用什么方法来实现这一目标?再一次,存储过程可能会做,但恐怕它很慢。有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我(和我的一些朋友)知道的最好方法是合并数据。

要实现此目的-创建一个临时表(同一目标服务器上的相同或不同数据库),该临时表具有与源表+ PK相同的结构。 因此,ADF中的过程应分为两个步骤:

  1. 截断目标(分段)表
  2. 将源中的所有数据插入到分段中
  3. 运行包含MERGE语句和其中所有必需逻辑的存储过程。

采用这种方法,您将继续:

  • 将数据放入临时表(批量)中时表现最佳
  • 最快的方法来更新(更新/插入)目标表
  • 实现复杂的业务逻辑的能力
  • 在需要时应用SCD(缓慢变化的尺寸)
  • 减少磁盘操作量

以下帖子可以帮助您了解流程并构建整个MERGE语句:[https://sqlplayer.net/category/bi/data-warehousing/]

这是一个很常见的情况,所以您给了我一个新博客文章的想法。谢谢。

希望对您有所帮助。