【发布时间】: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 配置,但没有运气
标签: azure azure-sql-database azure-blob-storage azure-data-factory azure-data-factory-pipeline