Migrer IDENTITY-kolonner til Fabric data warehouse

Gælder for:✅ Warehouse i Microsoft Fabric

Denne artikel beskriver, hvordan man bruger SET IDENTITY_INSERT og DBCC CHECKIDENT til at bevare eksisterende identitetsværdier under migrering fra SQL Server, Azure SQL Database eller Azure Synapse Analytics og sikre referentiel integritet.

Væsentlige forskelle fra andre platforme

Før du migrerer, skal du forstå disse forskelle i implementeringen IDENTITY i Fabric data warehouse:

  • IDENTITY Kolonner understøtter kun bigint-datatypen .
  • SEED INCREMENT og parametre understøttes ikke. Systemet styrer værdier internt.
  • Værdier er garanteret unikke, men ikke nødvendigvis sekventielle. Der kan opstå huller på grund af den distribuerede beregningsarkitektur.
  • Fabric data warehouse håndhæver ikke nøglebegrænsninger.

Migrationsstrategi

Ved at bruge IDENTITY_INSERT support kan du migrere identitetsværdier direkte til Fabric data warehouse tabeller, der bruger IDENTITY kolonner:

  1. Opret destinationstabeller i Fabric data warehouse med IDENTITY kolonner.
  2. Brug SET IDENTITY_INSERT ON til at indsætte historiske data med de oprindelige identitetsværdier bevaret.
  3. Kør DBCC CHECKIDENT med RESEED for at justere identitetsintervallet efter migration.
  4. Opdater fremmednøglereferencer om nødvendigt.

Denne tilgang bevarer de oprindelige identitetsværdier, opretholder referentiel integritet på tværs af tabeller og tillader Fabric data warehouse at genoptage genereringen af unikke værdier efter migration.

Eksempel: Migrer tabeller med IDENTITY-kolonner

Følgende eksempel migrerer en Orders tabel fra en kildeplatform til Fabric data warehouse samtidig med at identitetsværdier bevares.

Trin 1: Opret en destinationstabel med en IDENTITY-kolonne

Opret destinationstabellen i Fabric data warehouse. Primærnøglekolonnen bruger IDENTITY:

CREATE TABLE dbo.Orders (
    OrderID BIGINT IDENTITY,
    OrderDate DATE,
    CustomerID BIGINT,
    TotalAmount DECIMAL(18, 2)
);

Trin 2: Migrer data med IDENTITY_INSERT

Brug SET IDENTITY_INSERT til at indsætte historiske data med de oprindelige identitetsværdier. Denne metode bevarer eksisterende ID'er, så relationerne mellem tabellerne forbliver intakte.

-- Migrate Orders with original IDs
SET IDENTITY_INSERT dbo.Orders ON;

INSERT INTO dbo.Orders (OrderID, OrderDate, CustomerID, TotalAmount)
VALUES (101, '2025-01-15', 1, 5000.00),
       (102, '2025-02-20', 2, 3200.00),
       (103, '2025-03-10', 1, 7800.00),
       (104, '2025-04-05', 3, 1500.00);

SET IDENTITY_INSERT dbo.Orders OFF;

For større datasæt kan du bruge COPY INTO med IDENTITY_INSERT:

COPY INTO dbo.Orders (OrderID 1, OrderDate 2, CustomerID 3, TotalAmount 4)
FROM 'https://storage.blob.core.windows.net/migration/orders.csv'
WITH (
    FILE_TYPE = 'CSV',
    IDENTITY_INSERT = 'ON'
);

Trin 3: Genseedede identitetskolonner

Efter at have migreret data, kør DBCC CHECKIDENT med på RESEED hver tabel. Denne operation scanner alle brugte identitetsintervaller og justerer den næste værdi for at undgå kollisioner med migrerede data:

DBCC CHECKIDENT('dbo.Orders', RESEED);

Trin 4: Verificér migrationen og test nye inserts

Bekræft, at de migrerede data er intakte, og at nye inserts modtager automatisk genererede værdier, der ikke overlapper med de migrerede værdier:

-- Verify migrated data
SELECT * FROM dbo.Orders ORDER BY OrderID;

-- Insert a row that receives an automatically generated ID
INSERT INTO dbo.Orders (OrderDate, CustomerID, TotalAmount)
VALUES ('2025-05-01', 1, 2500.00);

-- Verify that new IDs don't overlap with migrated data
SELECT * FROM dbo.Orders ORDER BY OrderID;

Bedste praksis

  • Altid sås efter migration. Kør DBCC CHECKIDENT('table_name', RESEED) efter hver tabelmigrering for at forhindre identitetsværdikollisioner.
  • Brug COPY INTO til store datasæt. For massemigrering af store tabeller COPY INTO giver det IDENTITY_INSERT ON bedre ydeevne end række-for-række-udsagn INSERT .
  • Valider referentiel integritet. Efter migreringen, verificér at fremmede nøgleværdier i børnetabeller refererer til gyldige rækker i forældretabeller.