将 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 存储的写入操作都非常快,这与从源代码读取操作相反。

我不希望任何人提供实际的解决方案 - 因为所提供的信息有限 - 但我更愿意提供一些提示,说明在视图查询很多的情况下可能会严重影响复制性能(大约一个数量级)更少的行,考虑到视图下的表具有相当数量的字段以及相同的数据类型:视图查询包含的两个表intdatetime和@ 987654328@ 数据类型。

提前感谢您的提醒。

【问题讨论】:

您是否阅读过此文档:docs.microsoft.com/en-us/azure/data-factory/…?这可能会有所帮助。 是的,我做到了,谢谢。事实上,我摆弄了几个 DIU/parallelCopies 配置,但没有运气 【参考方案1】:

当 ADF 中存在复制活动性能问题且根本原因不明显时(例如,如果源速度很快,但接收器受到限制,我们知道原因)——我会这样做:

    从集成运行时 (IR) (doc.) 开始。这可能是作业的并发问题、网络吞吐量问题,或者只是一个尺寸过小的 VM(在自托管的情况下)。比如,在我的 prod ETL 中,>80% 的问题都是由 IR-s 以某种方式引起的。 在源和接收器上复制复制活动行为。从本地计算机(理想情况下,从与 IR 环境相同的 VM)查询视图,将平面文件写入 blob 等。我假设您已经这样做了,但是再观察一次很少会受到伤害。 测试复制活动的各种配置。更改isolationLevelpartitionOptionparallelCopiesenableStaging 将是我在这里的第一步。显然,这并不能解决问题的根本原因,但可以为您指明进一步深入研究的方向。 尝试搜索文档(这个doc.,由@Leon 提供是一个好的开始)。这应该是第 1 步,但是,我发现 ADF 文档有些欠缺。

注意这是基于我个人使用数据工厂的经验。 在这种情况下提供一个具体的解决方案确实非常困难。

【讨论】:

很遗憾,我无法尝试 1) 我自己,因为云基础架构是由技术架构师管理的,但如果它可以帮助您获得更详细的观点,我可以告诉您它是一个自托管的 IR; 2)实际上,我还没有完全尝试过,因为我只尝试从连接在 *** 中的机器查询视图到 azure 上的数据库,正如你所说,完全试一试可能会很好;根据 3) 我尝试了几种配置,实际上它是导致 ~15MB 吞吐量的几种配置之一,我发现它非常好。无论如何,非常感谢您的提醒 @Fabrizio,没问题!一加。关于自托管 IR 的要点:即使在自托管和由其他团队/人管理的情况下,您实际上也可以监控节点性能/查询持续时间/吞吐量(尽管非常重要)。这是我的情况image link 的样子。它与您当前的问题没有特别相关,但将来可能会有所帮助。【参考方案2】:

对于任何可能偶然发现相同问题的人,我设法通过经验发现瓶颈是由 SQL DB 视图中存在多个键哈希计算引起的。事实上,一旦我删除了这些 - 后来在 Azure Synapse Analytics(数据仓库)上计算 - 我观察到了复制操作的巨大性能提升。

【讨论】:

以上是关于将 Azure 数据工厂上的数据管道从 SQL Server 复制到 Blob 存储的主要内容,如果未能解决你的问题,请参考以下文章

Azure 数据工厂 ADF 数据管道将文件名包含在将数据复制到 sql 数据库中

Azure 数据工厂问题将数据从本地 sql Server 写入 Azure SQL 数据库

将日期时间参数从管道传递到数据流源存储过程 Azure 数据工厂

使用 azure 数据工厂管道将 json 对象存储到 azure 表存储实体

如何在 Azure 数据工厂的 DataFlow 中获取管道的元数据?想要创建调试管道

将 Azure 数据工厂管道有条件地部署到另一个资源组