优化源
对于除 Azure SQL 数据库以外的每个源,建议将“使用当前分区”保留为选定值。 读取其他所有源系统时,数据流会根据数据的大小自动且均匀地对数据进行分区。 大约每 128 MB 数据就会创建一个新分区。 随着数据大小的增加,分区的数量也会增加。
所有自定义分区均在 Spark 读取数据后进行,并且将对数据流性能产生负面影响。 由于数据在读取时会均匀分区,因此除非先了解数据的形状和基数,否则不建议这样做。
注意
读取速度可能会受源系统吞吐量的限制。
Azure SQL 数据库源
Azure SQL 数据库有唯一的分区选项,称为“源”分区。 启用源分区会在源系统上启用并行连接,从而能够增加读取 Azure SQL 数据库的次数。 指定分区数以及数据分区方式。 使用具有高基数的分区列。 你也可以输入与源表的分区方案匹配的查询。
提示
对于源分区,SQL Server 的 I/O 是瓶颈。 添加太多分区可能会导致源数据库饱和。 通常,使用此选项时,最好添加 4-5 个分区。
隔离级别
Azure SQL 源系统上的读取隔离级别会影响性能。 如果选择“读取未提交的内容”,则将提供最快的性能,并可防止任何数据库锁定。 若要了解有关 SQL 隔离级别的更多信息,请参阅了解隔离级别。
使用查询进行读取
可以使用表或 SQL 查询读取 Azure SQL 数据库。 如果要执行 SQL 查询,则必须先完成查询,然后才能开始转换。 SQL 查询对下推操作非常有用,可加快执行速度并减少从 SQL Server 读取的数据量,例如 SELECT、WHERE 和 JOIN 语句。 下推操作时,你将无法在数据进入数据流之前跟踪转换的世系和性能。
Azure Synapse Analytics 源
使用 Azure Synapse Analytics 时,源选项中有一个名为“启用暂存”的设置。 这允许服务使用 Staging
从 Synapse 进行读取操作,从而可使用最高性能的大容量加载功能(例如,CETAS 和 COPY 命令)大幅提升读取性能。 启用 Staging
需要在数据流活动设置中指定 Azure Blob 存储或 Azure Data Lake Storage Gen2 暂存位置。
基于文件的源
Parquet 与带分隔符的文本
尽管数据流支持多种文件类型,但建议使用 Spark 原生 Parquet 格式来实现最佳读写次数。
如果要在一组文件中运行同一数据流,建议读取文件夹、使用通配符路径或读取文件列表。 一次数据流活动运行可以批量处理所有文件。 有关如何配置这些设置的详细信息,可参阅 Azure Blob 存储连接器文档的“源转换”部分。
如果可能,请避免使用 For-Each 活动对一组文件运行数据流。 这会导致 for-each 在每次迭代时启动自己的 Spark 群集,这通常既无必要,又成本昂贵。
内联数据集与共享数据集
ADF 和 Synapse 数据集是工厂和工作区中的共享资源。 但是,读取大量包含带分隔符的文本和 JSON 源的源文件夹和文件时,可以通过在“投影 | 架构”选项对话框中设置选项“用户投影架构”来提升数据流文件发现的性能。 此选项会关闭 ADF 的默认架构自动发现,将极大地提升文件发现的性能。 在设置此选项前,请务必导入投影,以便 ADF 具有用于投影的现有架构。 此选项不适用于架构偏差。
相关内容
请参阅与性能相关的其他数据流文章: