适用于:Microsoft Fabric 中的✅ 仓库
在调整以适应 Fabric 数据仓库中的实现差异后,可以使用代理键列将表迁移到 Fabric 数据仓库。 本文概述了一个可靠的迁移策略,可帮助你弥合这一差距,并将架构和数据成功移动到 Fabric 数据仓库。
将数据库迁移到 Fabric 数据仓库对依赖于现有替代列的组织提出了独特的挑战,例如 SQL 数据库引擎中的 IDENTITY 或 SEQUENCE 函数:
- 与传统的 SQL Server 环境不同,Fabric 数据仓库使用分布式模型来生成标识值,这可确保唯一性,但不能保证顺序。
-
IDENTITY在 Fabric 数据仓库中不支持IDENTITY_INSERT。 不能直接插入现有值。 -
IDENTITY中的 Fabric 数据仓库不支持配置SEED或INCREMENT。IDENTITY值是唯一且自动管理的。
-
- Fabric 数据仓库中的列仅支持
IDENTITY数据类型。 - Fabric 数据仓库不会强制实施关键约束。
分步迁移过程
为了说明本文中所述的方法,请考虑两个表:一个 Customers 表和一个 Orders 表。 该Orders表通过CustomerID列引用Customers表。
要将这些表从源迁移到使用 IDENTITY 列的 Fabric 数据仓库表,我们需要使用新的 ID 将目标表重新填充数据,并更新引用的表。 我们可以通过使用以下策略来实现此目的:
- 将数据从源表加载到 Fabric Data Warehouse 中不使用
IDENTITY列的暂存表。 - 将数据从临时表加载到使用
IDENTITY列的最终表中,但将 ID 列的原始数据从临时表复制到最终表中的新临时列。 -
UPDATE相关表中的引用。
示例:将数据从使用 IDENTITY 列的表迁移到 Fabric 数据仓库
后续步骤介绍如何使用 IDENTITY Fabric 数据仓库中的列完成此策略。
步骤 1:将源数据加载到临时表中
首先在结构数据仓库中创建临时表,以镜像源表的架构,但创建包含 IDENTITY 列的临时表。
将源数据加载到这些暂存表中,包括原始标识值。
步骤 2:将数据插入目标表并映射遗留标识值
接下来,将数据从暂存表插入到仓库中的目标表。
目标表应在键列上使用 IDENTITY 。
在此步骤中,将临时表中的原始标识值映射到目标表中的新列。
例如,在迁移 Customers 表时,可以使用如下语句:
-- Pseudo code: replace ... with your own column list
INSERT INTO dbo.Customers (Name, Email, ... , LegacyCustomerID)
SELECT s.Name, s.Email, ..., s.CustomerID
FROM dbo.Staging_Customers AS s;
此方法保留列中的原始标识值 LegacyCustomerID ,以便在后续步骤中使用。
对使用 IDENTITY 列的仓库中的所有表重复此步骤。
步骤 3:使用旧标识值更新外键关系
对于含有外键引用 IDENTITY 列的表,请通过使用临时旧ID列连接引用表的暂存版本,以获取Fabric数据仓库新生成的ID。
例如,在迁移引用 Customers 的 Orders 表时:
INSERT INTO dbo.Orders (OrderDate, ... , CustomerID)
SELECT o.OrderDate, ..., c.CustomerID
FROM dbo.Staging_Orders AS o
INNER JOIN dbo.Customers AS c
ON o.CustomerID = c.LegacyCustomerID;
即便新的IDENTITY不断生成新的 ID,该方法仍能确保表之间的关系被保留。
步骤 4(可选):清理临时列
确认正确映射所有关系并维护数据完整性后,如果需要,可以从目标表中删除旧 ID 列:
ALTER TABLE Orders
DROP COLUMN LegacyCustomerID;
(可选)保留最终表格中的 LegacyCustomerID 列,以便将来的审核、数据沿袭或故障排除等原因。