将 Azure 数据工厂上的数据管道从 SQL Server 复制到 Blob 存储
Posted
技术标签:
【中文标题】将 Azure 数据工厂上的数据管道从 SQL Server 复制到 Blob 存储【英文标题】:Copy Data pipeline on Azure Data Factory from SQL Server to Blob Storage 【发布时间】:2021-08-26 17:58:10 【问题描述】:我正在尝试使用 Azure 数据工厂中的“复制数据”管道将一些数据从 Azure SQL Server 数据库移动到 Azure Blob 存储。特别是,我在管道的Source
选项卡中使用?AdfDynamicRangePartitionCondition
挂钩的“使用查询”选项,正如Microsoft's pattern here 所建议的那样,复制操作通过分区键的存在并行化用于查询本身。
SQL Server 数据库上的源代码由两个视图组成,分别有 ~300k 和 ~3M 行。 此外,视图具有相同的查询结构,例如(伪代码)
with
v as (
select hashbyte(field1) [Key1], hashbyte(field2) [Key2]
from Table
)
select *
from v
视图查询的表也是如此。最重要的是,视图查询相同数量的分区和大致均匀分布的行数。
复制操作的意外行为(很可能是由于我缺乏经验)是,对于查询较少行的视图而言,它的持续时间要长得多。事实上,具有约 300k 行的复制操作显示了约 800 KB/s 的吞吐量,而具有约 3M 行的复制操作显示了约 15MB/s 的吞吐量(!)。最后,在这两种情况下,对 blob 存储的写入操作都非常快,这与从源代码读取操作相反。
我不希望任何人提供实际的解决方案 - 因为所提供的信息有限 - 但我更愿意提供一些提示,说明在视图查询很多的情况下可能会严重影响复制性能(大约一个数量级)更少的行,考虑到视图下的表具有相当数量的字段以及相同的数据类型:视图查询包含的两个表int
、datetime
和@ 987654328@ 数据类型。
提前感谢您的提醒。
【问题讨论】:
您是否阅读过此文档:docs.microsoft.com/en-us/azure/data-factory/…?这可能会有所帮助。 是的,我做到了,谢谢。事实上,我摆弄了几个 DIU/parallelCopies 配置,但没有运气 【参考方案1】:当 ADF 中存在复制活动性能问题且根本原因不明显时(例如,如果源速度很快,但接收器受到限制,我们知道原因)——我会这样做:
-
从集成运行时 (IR) (doc.) 开始。这可能是作业的并发问题、网络吞吐量问题,或者只是一个尺寸过小的 VM(在自托管的情况下)。比如,在我的 prod ETL 中,>80% 的问题都是由 IR-s 以某种方式引起的。
在源和接收器上复制复制活动行为。从本地计算机(理想情况下,从与 IR 环境相同的 VM)查询视图,将平面文件写入 blob 等。我假设您已经这样做了,但是再观察一次很少会受到伤害。
测试复制活动的各种配置。更改
isolationLevel
、partitionOption
、parallelCopies
和enableStaging
将是我在这里的第一步。显然,这并不能解决问题的根本原因,但可以为您指明进一步深入研究的方向。
尝试搜索文档(这个doc.,由@Leon 提供是一个好的开始)。这应该是第 1 步,但是,我发现 ADF 文档有些欠缺。
注意这是基于我个人使用数据工厂的经验。 在这种情况下提供一个具体的解决方案确实非常困难。
【讨论】:
很遗憾,我无法尝试 1) 我自己,因为云基础架构是由技术架构师管理的,但如果它可以帮助您获得更详细的观点,我可以告诉您它是一个自托管的 IR; 2)实际上,我还没有完全尝试过,因为我只尝试从连接在 *** 中的机器查询视图到 azure 上的数据库,正如你所说,完全试一试可能会很好;根据 3) 我尝试了几种配置,实际上它是导致 ~15MB 吞吐量的几种配置之一,我发现它非常好。无论如何,非常感谢您的提醒 @Fabrizio,没问题!一加。关于自托管 IR 的要点:即使在自托管和由其他团队/人管理的情况下,您实际上也可以监控节点性能/查询持续时间/吞吐量(尽管非常重要)。这是我的情况image link 的样子。它与您当前的问题没有特别相关,但将来可能会有所帮助。【参考方案2】:对于任何可能偶然发现相同问题的人,我设法通过经验发现瓶颈是由 SQL DB 视图中存在多个键哈希计算引起的。事实上,一旦我删除了这些 - 后来在 Azure Synapse Analytics(数据仓库)上计算 - 我观察到了复制操作的巨大性能提升。
【讨论】:
以上是关于将 Azure 数据工厂上的数据管道从 SQL Server 复制到 Blob 存储的主要内容,如果未能解决你的问题,请参考以下文章