你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用控制表从数据库进行大容量复制

适用于: Azure 数据工厂 Azure Synapse Analytics

提示

试用 Microsoft Fabric 中的数据工厂,这是一种适用于企业的一站式分析解决方案。 Microsoft Fabric 涵盖从数据移动到数据科学、实时分析、商业智能和报告的所有内容。 了解如何免费开始新的试用

若要将数据从 Oracle 服务器、Netezza、Teradata 或 SQL Server 中的数据仓库复制到 Azure Synapse Analytics,必须从多个表加载大量数据。 通常情况下,必须在每个表中对数据分区,以便使用多个线程从单个表并行加载行。 本文介绍可以在这些方案中使用的模板。

注意

如果要从数据量相对较小的少数几个表中将数据复制到 Azure Synapse Analytics,则使用 Azure 数据工厂复制数据工具会更高效。 本文介绍的模板超出你对该方案的需求。

关于此解决方案模板

此模板可从外部控制表检索用于复制的源数据库分区的列表。 然后,它会循环访问源数据库中的每个分区,并将数据复制到目标。

该模板包含三个活动:

  • 查找可从外部控制表检索源数据库分区的列表。
  • ForEach 可从查找活动中获取分区列表,然后针对复制活动循环访问每个分区。
  • 复制可将每个分区从源数据库存储复制到目标存储。

模板定义以下参数:

  • Control_Table_Name 是外部控制表,用于存储源数据库的分区列表。
  • Control_Table_Schema_PartitionID 是外部控制表中用于存储每个分区 ID 的列名。 请确保源数据库中每个分区的分区 ID 都是唯一的。
  • Control_Table_Schema_SourceTableName 是外部控制表,用于存储源数据库中的每个表名。
  • Control_Table_Schema_FilterQuery 是外部控制表中的列名,用于存储筛选器查询,以从源数据库中的每个分区获取数据。 例如,如果按年份对数据进行分区,则存储在每一行中的查询可能类似于“select * from datasource where LastModifytime >= ''2015-01-01 00:00:00'' and LastModifytime <= ''2015-12-31 23:59:59.999''”。
  • Data_Destination_Folder_Path 是将数据复制到目标存储中时使用的路径(当所选目标是“文件系统”或“Azure Data Lake Storage Gen1”时适用)。
  • Data_Destination_Container 是将数据复制到目标存储时使用的根文件夹路径。
  • Data_Destination_Directory 是将数据复制到目标存储中时使用的根下的目录路径。

仅当所选目标是基于文件的存储时,最后三个参数(定义目标存储中的路径)才可见。 如果选择“Azure Synapse Analytics”作为目标存储,则不需要这些参数。 但 Azure Synapse Analytics 中的表名和架构必须与源数据库中的表名和架构相同。

如何使用此解决方案模板

  1. 在 SQL Server 或 Azure SQL 数据库中创建控制表,以存储源数据库分区列表来进行大容量复制。 在以下示例中,源数据库有五个分区。 三个分区用于 datasource_table,两个分区用于 project_table。 列 LastModifytime 用于对源数据库的表 datasource_table 中的数据进行分区。 用于读取第一个分区的查询是 'select * from datasource_table where LastModifytime >= ''2015-01-01 00:00:00'' and LastModifytime <= ''2015-12-31 23:59:59.999'''。 可以使用类似查询从其他分区读取数据。

     		Create table ControlTableForTemplate
     		(
     		PartitionID int,
     		SourceTableName  varchar(255),
     		FilterQuery varchar(255)
     		);
    
     		INSERT INTO ControlTableForTemplate
     		(PartitionID, SourceTableName, FilterQuery)
     		VALUES
     		(1, 'datasource_table','select * from datasource_table where LastModifytime >= ''2015-01-01 00:00:00'' and LastModifytime <= ''2015-12-31 23:59:59.999'''),
     		(2, 'datasource_table','select * from datasource_table where LastModifytime >= ''2016-01-01 00:00:00'' and LastModifytime <= ''2016-12-31 23:59:59.999'''),
     		(3, 'datasource_table','select * from datasource_table where LastModifytime >= ''2017-01-01 00:00:00'' and LastModifytime <= ''2017-12-31 23:59:59.999'''),
     		(4, 'project_table','select * from project_table where ID >= 0 and ID < 1000'),
     		(5, 'project_table','select * from project_table where ID >= 1000 and ID < 2000');
    
  2. 转到“从数据库进行大容量复制”模板。 创建与在步骤 1 中创建的外部控制表的新连接。

    Screenshot showing the creation of a new connection to the control table.

  3. 创建与要从中复制数据的源数据库的新连接。

    Screenshot showing the creation of a new connection to the source database.

  4. 创建与要将数据复制到其中的目标数据存储的新连接。

    Screenshot showing the creation of a new connection to the destination store.

  5. 选择“使用此模板” 。

  6. 可以看到管道,如以下示例所示:

    Screenshot showing the pipeline.

  7. 选择“调试”,输入“参数”,然后选择“完成”。

    Screenshot showing the Debug button.

  8. 看到的结果类似于以下示例:

    Screenshot showing the result of the pipeline run.

  9. (可选)如果选择“Azure Synapse Analytics”作为数据目标,必须按 Azure Synapse Analytics Polybase 的要求输入用于暂存的 Azure Blob 存储的连接。 模板会自动为 Blob 存储生成容器路径。 检查是否在管道运行后创建了容器。

    Screenshot showing the Polybase setting.