Brug IDENTITY-kolonner i Fabric data warehouse

Gælder for:✅ Warehouse i Microsoft Fabric

Denne vejledning forklarer, hvordan man bruger IDENTITY-kolonner i Fabric data warehouse til at oprette og administrere surrogatnøgler. Du lærer at oprette tabeller med identitetskolonner, indsætte data, indsætte eksplicitte værdier med IDENTITY_INSERT, og genindsætte identitetsintervallet med DBCC CHECKIDENT.

Prerequisites

  • Adgang til en lagerpost i et arbejdsområde med bidragyder eller højere tilladelser.
  • Et forespørgselsværktøj. Denne vejledning bruger SQL-forespørgselseditoren i Microsoft Fabric-portalen, men du kan også bruge ethvert T-SQL-forespørgselsværktøj.
  • En grundlæggende forståelse af T-SQL.

Hvad er en IDENTITET-kolonne?

En kolonne er en numerisk kolonne, der automatisk genererer IDENTITY unikke værdier for nye rækker. Denne adfærd gør den ideel til implementering af surrogatnøgler, fordi hver række får en unik identifikator uden manuel indtastning.

Opret en IDENTITET-kolonne

For at definere en IDENTITY kolonne, angiv IDENTITY nøgleordet i kolonnedefinitionen af CREATE TABLE T-SQL-syntaksen:

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

Opret en tabel med en IDENTITY-kolonne

I denne vejledning laver du en enklere version af Trip tabellen ud fra NY Taxi open datasættet og tilføjer en TripIDIDENTITY kolonne. Hver ny række får en TripID værdi, der er unik i tabellen.

  1. Definér en tabel med en IDENTITY kolonne:

     CREATE TABLE dbo.Trip
     (
         TripID               bigint IDENTITY,
         tpepPickupDateTime   datetime2(6),
         tpepDropoffDateTime  datetime2(6),
         passengerCount       int,
         tripDistance         float,
         fareAmount           float,
         totalAmount          float
     );
    
  2. Brug COPY INTO den til at indlæse data i tabellen. Når du bruger COPY INTO med en IDENTITY kolonne, skal du give kolonnelisten og mappe den til kolonner i kildedataene.

     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. Forhåndsvis dataene og de værdier, der er tildelt kolonnen IDENTITY :

    SELECT TOP 10 *
    FROM Trip;
    

    Outputtet inkluderer den automatisk genererede TripID værdi for hver række.

    Skærmbillede af forespørgselsresultaterne, der viser en tabel med de første 10 rækker af et taxa-datasæt.

    Important

    Dine værdier kan afvige fra værdierne i denne artikel. IDENTITY Kolonner giver værdier, der er garanteret unikke, men værdierne er ikke nødvendigvis sekventielle eller ordnede, og der kan opstå gaps.

  4. Brug INSERT INTO til at indtage nye rækker:

     INSERT INTO dbo.Trip
     VALUES ('2026-01-01T00:00:00', '2013-01-01T00:12:00', 1, 2.4, 10.5, 13.0);
    
  5. En kolonneliste er valgfri med INSERT INTO. Når du leverer en, skal du angive navnene på alle kolonner, som du leverer inputdata til, undtagen kolonnen 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. Gennemgå de indsatte rækker:

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

    Observer værdierne, der er tildelt de nye rækker:

    Skærmbillede af en tabel med to rækker og seks kolonner, der viser taxa-data.

Indsæt eksplicitte værdier med IDENTITY_INSERT

Du kan være nødt til at indsætte specifikke værdier i en identitetskolonne under datamigration, når du udfylder sentinelværdier, eller når du gendanner data fra en backup. Brug SET IDENTITY_INSERT til at aktivere disse indsættelser.

I dette afsnit opretter du en dimensionstabel og bruger IDENTITY_INSERT den til at tilføje sentinel-rækker med velkendte nøgleværdier.

  1. Opret en dimensionstabel med en IDENTITY kolonne:

    CREATE TABLE dbo.DimCustomer
    (
        CustomerKey BIGINT IDENTITY,
        CustomerName VARCHAR(100),
        CustomerType VARCHAR(20)
    );
    
  2. Indsæt almindelige rækker. Identitetsværdierne genereres automatisk:

    INSERT INTO dbo.DimCustomer (CustomerName, CustomerType)
    VALUES ('Contoso Ltd', 'Enterprise'),
           ('Fabrikam Inc', 'SMB'),
           ('Northwind Traders', 'Enterprise');
    
  3. Aktiver IDENTITY_INSERT for at tilføje sentinel-værdier. Når IDENTITY_INSERT er ON, giv en kolonneliste, der inkluderer identitetskolonnen:

    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 indsættelse af eksplicitte værdier, sæt identitetskolonnen DBCC CHECKIDENT med for at sikre, at fremtidige automatisk genererede værdier ikke kolliderer med indsatte værdier:

    DBCC CHECKIDENT('dbo.DimCustomer', RESEED);
    
  5. Kontroller, at sentinel-rækkerne vises sammen med automatisk genererede rækker:

    SELECT *
    FROM dbo.DimCustomer
    ORDER BY CustomerKey;
    
  6. Indsæt en række og bekræft, at den automatisk genererede værdi ikke er i konflikt:

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

Ressourcer til oprydning af vejledninger

Eventuelt kan du udvælge de tabeller, der er oprettet under denne tutorial:

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