在 Azure 平台上托管数据仓库的建议

Advice on Azure platform to host Data Warehouse

我是一名数据仓库开发人员,目前正在考虑使用 Azure 平台托管新的数据仓库。

我的经验是使用本地服务器托管标准 SQL 服务器数据库,一个用于登台数据库,一个用于数据仓库。通常,我会在 ETL 的预定 SQL 服务器代理作业中结合使用 SSIS 和存储过程 运行。

如何在 Azure 中复制这种设置? 存储大小将小于 1TB,所以我可以只使用 Azure SQL 服务器数据库而不是 Azure SQL 数据仓库吗? 如果是这样,我是否需要单独的数据库用于暂存和使用弹性池选项的数据仓库? 我将加载到暂存中的数据都将在前提下。 SSIS 是否仍适合加载到 Azure 或 Azure 数据工厂是否更适合?

如有任何帮助,我们将不胜感激!谢谢。

我建议您使用 Azure SQL database。它为您提供许多价格等级和不同的存储空间。您可以 select 找到最适合您的价格等级。 Azure SQL 数据库还支持根据使用情况扩展 up/down。

参考:Service tiers in the DTU-based purchase model

正如你所说,我将加载到暂存中的数据都将在本地。

Azure SQL 数据库的功能 Data Sync 可以帮助您做到这一点:

数据同步在需要跨多个 Azure SQL 数据库或 SQL 服务器数据库保持数据更新的情况下很有用。以下是数据同步的主要用例:

  • 混合数据同步:使用数据同步,您可以将数据 在本地数据库和 Azure SQL 之间同步 数据库以启用混合应用程序。这种能力可能会吸引 给正在考虑迁移到云端并愿意的客户 将他们的一些应用程序放在 Azure 中。
  • 分布式应用程序:在很多情况下,分离是有益的 跨不同数据库的不同工作负载。例如,如果你 有一个大型生产数据库,但您还需要 运行 报告或分析此数据的工作量,拥有一个 用于此额外工作负载的第二个数据库。这种方法最大限度地减少了 性能对您的生产工作负载的影响。您可以使用数据 同步以保持这两个数据库同步。
  • 全球分布式应用程序:许多企业跨越多个 地区甚至几个 countries/regions。尽量减少网络 延迟,最好将您的数据放在靠近您的区域。和 数据同步,您可以轻松保持世界各地的数据库 同步。

当您创建 SQL 数据库时,您可以使用许多工具将架构或数据迁移到 Azure,例如 Data Migration Assistant(DMA)

然后Set up SQL Data Sync between Azure SQL Database and SQL Server on-premises,这将有助于每 5 分钟自动同步一次数据。

希望这对您有所帮助。

Leon 那里有很多有用的信息。但是从数据仓库的角度来看,我不会将数据同步用于 ETL 目的(在 link Leon 提供的 "not preferred" 中提到,在列表 "When to use Data Sync" 中提到 Data Sync .

对于DW,Azure DB 是一个不错的选择。 Azure SQL 数据仓库(现在称为 Azure Synapse Analytics)是处理 DW 的重型野兽。您真的确定需要这种数据小于 1Tb 的系统吗?我个人暂时离开 Azure Synaptics,并首先尝试使用 Azure DB。它便宜很多,如有必要,您可以稍后升级。

关于 Azure DB 有一点需要注意:Azure DB 支持对数据库的查询。但这并不是什么大不了的事,一切都可以在同一个数据库中处理。我个人使用模式来区分暂存和 DW(当然我也使用 DW 中的其他模式)。当然,使用单独的数据库并不是很难,但是在 Azure DB 中它们之间的界限比本地 SQL 服务器或其他 Azure 解决方案(例如托管实例)要深得多。

SSIS 仍然是一个选项,但问题是,您使用什么 运行 包?有如下选项:

  • 继续 运行从内部部署它们(所有艰苦的工作仍在云中完成)
  • 从 Azure 租用带有 SQL 服务器的 VM,将包部署到 VM,然后 运行 从 VM
  • 使用数据工厂运行 SSIS 包

None 是每个用例的完美解决方案。前两个选项的成本很高,如果 运行ning SSIS 是您唯一需要它们的东西。使用数据工厂到 运行 SSIS 目前有点麻烦,但无论如何这是一个选择。

数据工厂本身也是一个不错的选择(我没有亲自尝试过,但听说过很多关于它的好消息)。如果您将数据工厂用于 运行 您的 SSIS,为什么不首先开始使用没有 SSIS 包的数据工厂呢?当然,与 SSIS 相比,Data Factory 有一些限制,这可能是原因,但如果您的 SSIS 包足够简单,为什么不试试 Data Factory。

如果您想从 Azure 中较便宜的选项开始,请使用通用 SQL 数据库和带有一些活动的 Azure 数据工厂管道。

动态资源缩放 ETL

您可以通过发出 alter database 语句来扩展数据库,然后转移到基于存储过程的 ETL。我什至会使用 "master" proc 来调用维度和事实 proc 来控制执行流程。然后使用另一个 alter database 语句缩小数据库。我什至创建了自己的存储过程来发出这些缩放语句。

你也无法预测缩放何时完成,所以我等一下activity。您可以使用一个循环检查服务 objective 属性 并在完成后继续进行。但等待 10 分钟更容易。当缩放花费更长的时间时,我只被烧过几次。

数据管道活动:

  1. 扩大规模,成功则继续
  2. 等待大约 10 分钟,继续
  3. 执行ETL,始终继续
  4. 缩小规模

弹性查询

您可以使用 vertical partition Elastic Query 跨数据库查询。性能不是很好,他们不推荐它用于 ETL,但它会起作用。要提高性能,请尝试将您需要的任何大 table 转储到临时 table 中,然后在本地转换数据。