适用于:Microsoft Fabric 中的✅ 仓库
本文详细介绍了将 Azure Synapse Analytics 专用 SQL 池中的数据仓库迁移到 Microsoft Fabric Warehouse 的方法。
小提示
有关迁移策略和规划的更多信息,请参阅迁移规划:从 Azure Synapse Analytics 专用 SQL 池迁移到 Fabric 数据仓库。
使用适用于数据仓库的 Fabric 迁移助手可实现从 Azure Synapse Analytics 专用 SQL 池迁移的自动化体验。 本文的其余部分包含更多手动迁移步骤。
此表总结了有关数据架构 (DDL)、数据库代码 (DML) 和数据迁移方法的信息。 我们将在本文后面进一步深入介绍每个场景,并在“选项”列中链接。
| 选项编号 | 选项 | 它的作用是什么 | 技能/首选项 | 方案 |
|---|---|---|---|---|
| 1 | 数据工厂 | 架构 (DDL) 转换 数据提取 数据引入 |
ADF/管道 | 简化的一体式架构 (DDL) 和数据迁移。 建议用于维度表。 |
| 2 | 具有分区的数据工厂 | 架构 (DDL) 转换 数据提取 数据引入 |
ADF/管道 | 使用分区选项增加读/写并行度,与选项 1(事实数据表的建议选项)相比,吞吐量是其 10 倍。 |
| 3 | 具有加速代码的数据工厂 | 架构 (DDL) 转换 | ADF/管道 | 首先转换并迁移架构(DDL),然后使用 CETAS 提取数据,并使用 COPY/数据工厂导入数据,以获得最佳的整体导入性能。 |
| 4 | 存储过程加速代码 | 架构 (DDL) 转换 数据提取 代码评估 |
T-SQL | 使用 IDE 的 SQL 用户可以更精细地控制要处理的任务。 使用 COPY/数据工厂导入数据。 |
| 5 | 适用于 Azure Data Studio 和 Visual Studio Code 的 SQL 数据库项目扩展 | 架构 (DDL) 转换 数据提取 代码评估 |
SQL 项目 | 用于部署的 SQL 数据库项目与选项 4 的集成。 使用 COPY 或数据工厂引入数据。 |
| 6 | 创建外部表 AS SELECT (CETAS) | 数据提取 | T-SQL | 将高性能数据提取到 Azure Data Lake Storage (ADLS) Gen2 中,经济高效。 使用 COPY/数据工厂导入数据。 |
| 7 | 使用 dbt 进行迁移 | 架构 (DDL) 转换 数据库代码 (DML) 转换 |
dbt | 现有 dbt 用户可以使用 dbt Fabric 适配器转换其 DDL 和 DML。 然后,必须使用此表中的其他选项迁移数据。 |
选择初始迁移的工作负载
决定从哪里开始 Synapse 专用 SQL 池到 Fabric Warehouse 迁移项目时,请选择一个工作负荷区域,以便你能够:
- 通过快速提供新环境的优势,证明迁移到 Fabric Warehouse 的可行性。 从小型和简单的迁移开始,准备多个小型迁移。
- 给予内部技术人员时间,以便他们在迁移到其他领域时能够积累使用相关流程和工具的经验。
- 为进一步的迁移创建模板,该模板需特定于源 Synapse 环境以及当前已有的有用工具和流程。
小提示
创建需要迁移的对象的清单,并记录从开始到结束的迁移过程,以便可以对其他专用 SQL 池或工作负荷重复此过程。
初始迁移中迁移的数据量应足够大,能够体现出 Fabric Warehouse 环境的功能和优势,但不应过大以至无法快速体现出价值。 典型的大小为 1-10 TB。
使用 Fabric 数据工厂进行迁移
在本部分中,我们将讨论对熟悉 Azure 数据工厂和 Synapse Pipeline 的低代码/无代码角色使用数据工厂的选项。 这种拖放式 UI 选项提供了一个简单的步骤来转换 DDL 并迁移数据。
Fabric 数据工厂可以执行以下任务:
- 将架构 (DDL) 转换为 Fabric Warehouse 语法。
- 在 Fabric Warehouse 上创建架构 (DDL)。
- 将数据迁移到 Fabric Warehouse。
选项 1. 架构/数据迁移 - 复制向导和 ForEach 复制活动
此方法使用数据工厂复制助手连接到源专用 SQL 池,将专用 SQL 池 DDL 语法转换为 Fabric,并将数据复制到 Fabric Warehouse。 可以选择一个或多个目标表(对于 TPC-DS 数据集,有 22 个表)。 这会生成 ForEach 以循环访问 UI 中选择的表清单,并生成 22 个并行的“复制活动”线程。
- 在专用 SQL 池中生成和执行 22 个 SELECT 查询(每个选中的表各有一个)。
- 请确保具有适当的 DWU 和资源类,以允许执行生成的查询。 在这种情况下,你至少需要 DWU1000 和
staticrc10,以允许最多 32 个查询来处理提交的 22 个查询。 - 数据工厂可直接将数据从专用 SQL 池复制到 Fabric Warehouse,但需要暂存。 引入过程由两个阶段组成。
- 第一个阶段包括将数据从专用 SQL 池提取到 ADLS 中,称为暂存。
- 第二个阶段包括将数据从暂存位置引入到 Fabric 仓库中。 大多数数据引入计时处于暂存阶段。 总之,暂存对引入性能有巨大影响。
建议用途
使用复制向导生成 ForEach 提供了一个简便的用户界面,用于转换 DDL 并在一个步骤中将所选表从专用 SQL 池引入到 Fabric Warehouse。
然而,从总体吞吐量来看,它并不是最佳的选择。 造成性能延迟的主要因素是需要使用暂存,并且在“源到阶段”步骤中需要进行读写并行化。 建议仅对维度表使用此选项。
选项 2. DDL/数据迁移 - 使用分区选项的管道
为了提高传输率以使用 Fabric 管道加载更大的事实数据表,建议对每个具有分区选项的事实数据表使用复制活动 (Copy Activity)。 这为复制活动提供了最佳性能。
你可以选择使用源表物理分区(如果可用)。 如果表没有物理分区,则必须指定分区列并提供最小/最大值才能使用动态分区。 在以下屏幕截图中,管道 源 选项根据 ws_sold_date_sk 列指定动态分区范围。
虽然使用分区可以增加暂存阶段的吞吐量,但需要考虑进行适当的调整:
- 根据你的分区范围,它可能会使用所有的并发槽,因为它可能会在专用 SQL 池上生成超过 128 个查询。
- 你必须将规模提升至至少 DWU6000 才能执行所有查询。
- 例如,对于 TPC-DS
web_sales表,163 个查询已提交到专用 SQL 池。 在 DWU6000 中,执行了 128 个查询,同时有 35 个查询在排队。 - 动态分区会自动选择范围分区。 在这种情况下,每个提交到专用 SQL 池的 SELECT 查询的范围为 11 天。 例如:
WHERE [ws_sold_date_sk] > '2451069' AND [ws_sold_date_sk] <= '2451080') ... WHERE [ws_sold_date_sk] > '2451333' AND [ws_sold_date_sk] <= '2451344')
建议用途
对于事实数据表,建议使用数据工厂和分区选项来提高吞吐量。
但是,增加的并行读取需要专用 SQL 池扩展到更高的 DWU,以允许执行提取查询。 利用分区后,速度比不采用分区选项提高了十倍。 可以通过计算资源增加 DWU 以获取额外的吞吐量,但专用 SQL 池最多允许 128 个活动查询。
有关 Synapse DWU 到 Fabric 映射的详细信息,请参阅博客:将 Azure Synapse 专用 SQL 池映射到 Fabric 数据仓库计算。
选项 3. DDL 迁移 - 复制向导 ForEach 复制活动
对于较小的数据库,前面的两个选项是很不错的数据迁移选项。 但是,如果需要更高的吞吐量,建议使用替代选项:
- 将数据从专用 SQL 池提取到 ADLS,从而缓解暂存性能开销。
- 使用数据工厂或 COPY 命令将数据引入 Fabric Warehouse。
建议用途
您可以继续使用数据工厂来转换您的模式 (DDL)。 使用复制向导,可以选择特定的表或“所有”表。 根据设计,这会通过一个步骤迁移架构和数据,使用查询语句中的 false 条件 TOP 0 提取不包含任何行的架构。
以下代码示例介涵盖了使用数据工厂进行架构 (DDL) 迁移。
代码示例:使用数据工厂进行架构 (DDL) 迁移
可以使用 Fabric 管道轻松地从任何源 Azure SQL 数据库或专用 SQL 池中迁移表对象的 DDL (架构)。 此管道通过源专用 SQL 池表的架构(DDL)迁移到 Fabric Warehouse。
管道设计:参数
此管道接受参数,该参数 SchemaName允许指定要迁移的架构。 默认为 dbo 架构。
在“默认值”字段中,输入逗号分隔的表架构列表,以指示要迁移的模式: 提供两个模式,分别为 'dbo','tpch' 和 dbo。tpch
管道设计:查找活动
创建“查找活动”并将连接设置为指向源数据库。
在“设置”选项卡中:
将“数据存储类型”设置为“外部”。
连接是你的 Azure Synapse 专用 SQL 池。 “连接类型”为“Azure Synapse Analytics”。
“使用查询”设置为“查询”。
需要使用动态表达式构建“查询”字段,从而允许在返回目标源表列表的查询中使用 SchemaName 参数。 选择“查询”,然后选择“添加动态内容”。
查找活动中的此表达式将生成一个 SQL 语句来查询系统视图,以检索架构和表的列表。 引用 SchemaName 参数以允许对 SQL 架构进行筛选。 输出将是一个包含 SQL 架构和表的数组,这将作为 ForEach 活动的输入。
使用以下代码返回所有用户表及其架构名称的列表。
@concat(' SELECT s.name AS SchemaName, t.name AS TableName FROM sys.tables AS t INNER JOIN sys.schemas AS s ON t.type = ''U'' AND s.schema_id = t.schema_id AND s.name in (',coalesce(pipeline().parameters.SchemaName, 'dbo'),') ')
管道设计:ForEach 循环
对于 ForEach 循环,请在“设置”选项卡中配置以下选项:
- 禁用顺序选项以允许多个迭代并发运行。
- 将“批次数量”设置为 ,从而限制并发迭代的最大次数。
50 - “项”字段需要使用动态内容来引用查找活动的输出。 添加以下代码片段:
@activity('Get List of Source Objects').output.value
管道设计:ForEach 循环中的复制活动
在 ForEach 活动内,添加一个复制活动。 此方法使用管道中的动态表达式语言生成一个 SELECT TOP 0 * FROM <TABLE> ,以仅迁移架构而不将数据迁移到 Fabric Warehouse。
在“源”选项卡中:
- 将“数据存储类型”设置为“外部”。
- 连接是你的 Azure Synapse 专用 SQL 池。 “连接类型”为“Azure Synapse Analytics”。
- 将“使用查询”设置为“查询”。
- 在“查询”字段中,粘贴动态内容查询并使用以下表达式,该表达式将返回零行,仅返回表架构:
@concat('SELECT TOP 0 * FROM ',item().SchemaName,'.',item().TableName)
在“目标”选项卡中:
- 将“数据存储类型”设置为“工作区”。
- “工作区数据存储类型”为“数据仓库”,“数据仓库”设置为 Fabric Warehouse。
- 目标表的架构和表名称是使用动态内容定义的。
- 架构是指当前迭代的字段,包含代码片段的 SchemaName:
@item().SchemaName - 表通过代码片段引用 TableName:
@item().TableName
- 架构是指当前迭代的字段,包含代码片段的 SchemaName:
管道设计:接收器
对于接收器,请指向仓库并引用源架构和表名称。
运行此管道后,你将看到数据仓库中填充了源中的每个表,并使用适当的架构。
在 Synapse 专用 SQL 池中使用存储过程进行迁移
此选项使用存储过程来执行 Fabric 迁移。
你可以在 github.com 上的 microsoft/fabric-migration 获取代码示例。 此代码作为开放源代码共享,因此尽情贡献内容并帮助社区。
迁移存储过程能做些什么:
- 将架构 (DDL) 转换为 Fabric Warehouse 语法。
- 在 Fabric Warehouse 上创建架构 (DDL)。
- 将数据从 Synapse 专用 SQL 池提取到 ADLS。
- 标记 T-SQL 代码(存储过程、函数、视图)不支持的 Fabric 语法。
建议用途
此选项非常适合于以下人员:
- 熟悉 T-SQL。
- 希望使用集成开发环境,如 SQL Server Management Studio (SSMS)。
- 希望更精细地控制要处理的任务。
可以执行架构 (DDL) 转换、数据提取或 T-SQL 代码评估的特定存储过程。
对于数据迁移,需要使用 COPY INTO 或数据工厂将数据引入 Fabric Warehouse。
使用 SQL 数据库项目进行迁移
SQL 数据库项目扩展 支持 Microsoft Fabric Data Warehouse,可在 Azure Data Studio 和 Visual Studio Code 中获得。
此扩展在 Azure Data Studio 和 Visual Studio Code 中提供。 此功能支持源代码管理、数据库测试和架构验证的功能。
有关 Microsoft Fabric 中仓库的源代码管理的详细信息,包括 Git 集成和部署管道,请参阅仓库源代码管理。
建议用途
对于喜欢使用 SQL 数据库项目进行部署的人来说,这是个绝佳选择。 此选项本质上是将 Fabric 迁移存储过程集成到 SQL 数据库项目中,以提供无缝迁移体验。
SQL 数据库项目可以:
- 将架构 (DDL) 转换为 Fabric Warehouse 语法。
- 在 Fabric Warehouse 上创建架构 (DDL)。
- 将数据从 Synapse 专用 SQL 池提取到 ADLS。
- 标记 T-SQL 代码(存储过程、函数、视图)不支持的语法。
对于数据迁移,你随后需要使用 COPY INTO 或数据工厂将数据引入 Fabric Warehouse。
Microsoft Fabric CAT 团队提供了一组 PowerShell 脚本,用于通过 SQL 数据库项目处理架构(DDL)和数据库代码(DML)的提取、创建和部署。 有关将 SQL 数据库项目与有用的 PowerShell 脚本配合使用的演练,请参阅 GitHub.com 上的 microsoft/fabric-migration。
有关 SQL 数据库项目的详细信息,请参阅 SQL 数据库项目扩展入门和生成和发布项目。
使用 CETAS 迁移数据
T-SQL CREATE EXTERNAL TABLE AS SELECT (CETAS) 命令提供经济高效的最佳方法,用于将数据从 Synapse 专用 SQL 池提取到 Azure Data Lake Storage (ADLS) Gen2。
CETAS 的功能:
- 将数据提取到 ADLS 中。
- 此选项要求用户在引入数据之前在 Fabric Warehouse 上创建架构 (DDL)。 迁移架构 (DDL) 时,请考虑本文中的选项。
此选项的优点包括:
- 仅针对源 Synapse 专用 SQL 池提交每个表的单个查询。 这不会用尽所有并发槽位,因此也不会妨碍客户生产过程中的ETL处理或查询。
- 无需缩放到 DWU6000,因为每个表仅使用单个并发槽位,因此客户可以使用较低的 DWU。
- 提取在所有计算节点之间并行运行,这是提高性能的关键。
建议用途
使用 CETAS 将数据作为 Parquet 提取到 ADLS 中。 Parquet 文件通过列式压缩提供了高效数据存储的优势,这种文件格式在网络上移动时占用的带宽更少。 此外,由于 Fabric 将数据存储为 Delta Parquet 格式,因此与文本文件格式相比,数据引入速度是文本文件格式的 2.5 倍,因为在引入期间无须转换为 Delta 格式,从而减少了开销。
增加 CETAS 吞吐量:
- 添加并行 CETAS 操作,增加并发槽的使用,但可以提高吞吐量。
- 在 Synapse 专用 SQL 池上缩放 DWU。
通过 dbt 进行迁移
在本部分中,我们将讨论 dbt 选项,此选项适用于已在其当前 Synapse 专用 SQL 池环境中使用 dbt 的客户。
dbt 的功能:
- 将架构 (DDL) 转换为 Fabric Warehouse 语法。
- 在 Fabric Warehouse 上创建架构 (DDL)。
- 将数据库代码 (DML) 转换为 Fabric 语法。
dbt 框架在每次执行时都会动态生成 DDL 和 DML (SQL 脚本)。 使用 SELECT 语句表示的模型文件,通过更改配置文件(连接字符串)和适配器类型,可以将 DDL/DML 立即转换为任何目标平台。
建议用途
dbt 框架是代码优先方法。 必须使用本文档中列出的选项(如 CETAS 或 COPY/数据工厂)迁移数据。
利用适用于 Microsoft Fabric 数据仓库的 dbt 适配器,只需进行简单的配置更改即可将针对不同平台(如 Synapse 专用 SQL 池、Snowflake、Databricks、Google Big Query 或 Amazon Redshift)的现有 DBT 项目迁移到 Fabric 仓库。
若要开始使用面向 Fabric Warehouse 的 dbt 项目,请参阅教程:为 Fabric 数据仓库设置 dbt。 本文档还列出了在不同仓库/平台之间移动的选项。
将数据引入 Fabric 仓库
若要引入 Fabric Warehouse,请使用 COPY INTO 或 Fabric Data Factory,具体取决于自己的偏好。 鉴于先决条件是文件已提取到 Azure Data Lake Storage (ADLS) Gen2,这两种方法都是推荐且性能最佳的选项,因为它们具有等效的性能吞吐量。
需要注意的几个因素,以便设计过程以获得最佳性能:
- 使用 Fabric,将多个表从 ADLS 同时加载到 Fabric 仓库时不会发生任何资源争用。 因此,在加载并行线程时不会出现性能下降。 最大引入吞吐量完全取决于 Fabric 容量的计算能力。
- Fabric 工作负荷管理可分离为加载和查询分配的资源。 当查询和数据加载同时执行时,不存在资源争用的情况。