Använd IDENTITY-kolumner i Fabric Data Warehouse

gäller för:✅ Warehouse i Microsoft Fabric

Denna handledning förklarar hur man använder IDENTITY-kolumner i Fabric Data Warehouse för att skapa och hantera surrogatnycklar. Du lär dig hur man skapar tabeller med identitetskolumner, infogar data, infogar explicita värden med IDENTITY_INSERT, och återställer identitetsintervallet med DBCC CHECKIDENT.

Förutsättningar

  • Tillgång till ett objekt i Lager i en arbetsyta med behörigheten Medarbetare eller högre.
  • Ett frågeverktyg. Denna handledning använder SQL-frågeredigeraren i Microsoft Fabric-portalen, men du kan använda vilket T-SQL-frågeverktyg som helst.
  • En grundläggande förståelse för T-SQL.

Vad är en identitetskolumn?

En IDENTITY kolumn är en numerisk kolumn som automatiskt genererar unika värden för nya rader. Detta beteende gör det idealiskt för att implementera surrogatnycklar eftersom varje rad får en unik identifierare utan manuell inmatning.

Skapa en identitetskolumn

För att definiera en IDENTITY kolumn, ange IDENTITY nyckelordet i kolumndefinitionen av CREATE TABLE T-SQL-syntaxen:

CREATE TABLE { warehouse_name.schema_name.table_name | schema_name.table_name | table_name } (
    [column_name] BIGINT IDENTITY,
    [ ,... n ],
    -- Other columns here
);

Skapa en tabell med en identitetskolumn

I denna handledning skapar du en enklare version av Trip tabellen från NY Taxi öppna dataset och lägger till en TripIDIDENTITY kolumn. Varje ny rad får ett TripID unikt värde i tabellen.

  1. Definiera en tabell med en IDENTITY kolumn:

     CREATE TABLE dbo.Trip
     (
         TripID               bigint IDENTITY,
         tpepPickupDateTime   datetime2(6),
         tpepDropoffDateTime  datetime2(6),
         passengerCount       int,
         tripDistance         float,
         fareAmount           float,
         totalAmount          float
     );
    
  2. Använd COPY INTO för att mata in data i tabellen. När du använder COPY INTO med en IDENTITY kolumn, ange kolumnlistan och mappa den till kolumner i källdatan.

     COPY INTO dbo.Trip (tpepPickupDateTime, tpepDropoffDateTime, passengerCount, tripDistance, fareAmount, totalAmount)
     FROM 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/puYear=2013/puMonth=1/*.parquet'
     WITH( FILE_TYPE = 'PARQUET');
    
  3. Förhandsgranska datan och de värden som tilldelats kolumnen IDENTITY :

    SELECT TOP 10 *
    FROM Trip;
    

    Utdata inkluderar det automatiskt genererade TripID värdet för varje rad.

    Skärmbild av frågeresultatet som visar en tabell med de första 10 raderna i en taxiresas datauppsättning.

    Viktigt!

    Dina värden kan skilja sig från värdena i den här artikeln. IDENTITY Kolumner ger värden som garanteras vara unika, men värdena är inte nödvändigtvis sekventiella eller ordningade, och luckor kan uppstå.

  4. Använd INSERT INTO för att ta in nya rader:

     INSERT INTO dbo.Trip
     VALUES ('2026-01-01T00:00:00', '2013-01-01T00:12:00', 1, 2.4, 10.5, 13.0);
    
  5. En kolumnlista är valfri med INSERT INTO. När du tillhandahåller en, ange namnen på alla kolumner för vilka du tillhandahåller indata, förutom kolumnen IDENTITY :

     INSERT INTO dbo.Trip (tpepPickupDateTime, tpepDropoffDateTime, passengerCount, tripDistance, fareAmount, totalAmount)
     VALUES ('2026-01-01T08:15:00', '2013-01-01T08:42:00', 2, 6.8, 24.5, 30.0);
    
  6. Gå igenom de insatta raderna:

     SELECT *
     FROM dbo.Trip
     WHERE CAST(tpepPickupDateTime AS date) = '2026-01-01';    
    

    Observera de värden som tilldelats till de nya raderna:

    Skärmdump av en tabell med två rader och sex kolumner som visar taxiresedata.

Sätt in explicita värden med IDENTITY_INSERT

Du kan behöva infoga specifika värden i en identitetskolumn under datamigrering, när du fyller i sentinelvärden eller när du återställer data från en backup. Använd SET IDENTITY_INSERT för att aktivera dessa insättningar.

I detta avsnitt skapar du en dimensionstabell och använder IDENTITY_INSERT den för att lägga till sentinelrader med välkända nyckelvärden.

  1. Skapa en dimensionstabell med en IDENTITY kolumn:

    CREATE TABLE dbo.DimCustomer
    (
        CustomerKey BIGINT IDENTITY,
        CustomerName VARCHAR(100),
        CustomerType VARCHAR(20)
    );
    
  2. Infoga vanliga rader. Identitetsvärdena genereras automatiskt:

    INSERT INTO dbo.DimCustomer (CustomerName, CustomerType)
    VALUES ('Contoso Ltd', 'Enterprise'),
           ('Fabrikam Inc', 'SMB'),
           ('Northwind Traders', 'Enterprise');
    
  3. Aktivera IDENTITY_INSERT för att lägga till sentinel-värden. När IDENTITY_INSERT är ON, ge en kolumnlista som inkluderar identitetskolumnen:

    SET IDENTITY_INSERT dbo.DimCustomer ON;
    
    INSERT INTO dbo.DimCustomer (CustomerKey, CustomerName, CustomerType)
    VALUES (-1, 'Unknown', 'Sentinel'),
           (-2, 'Not Applicable', 'Sentinel');
    
    SET IDENTITY_INSERT dbo.DimCustomer OFF;
    
  4. Efter att explicita värden har infogats återställer du startvärdet för identitetskolumnen med DBCC CHECKIDENT för att säkerställa att framtida automatiskt genererade värden inte kolliderar med de infogade värdena:

    DBCC CHECKIDENT('dbo.DimCustomer', RESEED);
    
  5. Verifiera att sentinelraderna visas bredvid automatiskt genererade rader:

    SELECT *
    FROM dbo.DimCustomer
    ORDER BY CustomerKey;
    
  6. Infoga en rad och bekräfta att det automatiskt genererade värdet inte krockar:

    INSERT INTO dbo.DimCustomer (CustomerName, CustomerType)
    VALUES ('Adventure Works', 'Enterprise');
    
    SELECT *
    FROM dbo.DimCustomer
    ORDER BY CustomerKey;
    

Rensa upp handledningsresurser

Eventuellt, ta bort tabellerna som skapats under denna handledning:

DROP TABLE IF EXISTS dbo.Trip;
DROP TABLE IF EXISTS dbo.DimCustomer;
DROP TABLE IF EXISTS dbo.DimProduct;