迁移到 Fabric 数据仓库中的 IDENTITY 列

适用于:Microsoft Fabric 中的✅ 仓库

在调整以适应 Fabric 数据仓库中的实现差异后,可以使用代理键列将表迁移到 Fabric 数据仓库。 本文概述了一个可靠的迁移策略,可帮助你弥合这一差距,并将架构和数据成功移动到 Fabric 数据仓库。

将数据库迁移到 Fabric 数据仓库对依赖于现有替代列的组织提出了独特的挑战,例如 SQL 数据库引擎中的 IDENTITYSEQUENCE 函数:

  • 与传统的 SQL Server 环境不同,Fabric 数据仓库使用分布式模型来生成标识值,这可确保唯一性,但不能保证顺序。
    • IDENTITY 在 Fabric 数据仓库中不支持 IDENTITY_INSERT。 不能直接插入现有值。
    • IDENTITY 中的 Fabric 数据仓库不支持配置 SEEDINCREMENTIDENTITY 值是唯一且自动管理的。
  • Fabric 数据仓库中的列仅支持 IDENTITY 数据类型。
  • Fabric 数据仓库不会强制实施关键约束。

分步迁移过程

为了说明本文中所述的方法,请考虑两个表:一个 Customers 表和一个 Orders 表。 该Orders表通过CustomerID列引用Customers表。

 实体-关系图显示两个表:“Customers”和“Orders”。

要将这些表从源迁移到使用 IDENTITY 列的 Fabric 数据仓库表,我们需要使用新的 ID 将目标表重新填充数据,并更新引用的表。 我们可以通过使用以下策略来实现此目的:

  1. 将数据从源表加载到 Fabric Data Warehouse 中不使用 IDENTITY 列的暂存表。
  2. 将数据从临时表加载到使用 IDENTITY 列的最终表中,但将 ID 列的原始数据从临时表复制到最终表中的新临时列。
  3. 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 列,以便将来的审核、数据沿袭或故障排除等原因。