Bruk IDENTITY-kolonner i Fabric datalager

Gjelder for:✅ Lager i Microsoft Fabric

Denne veiledningen forklarer hvordan man bruker IDENTITY-kolonner i Fabric datalager for å opprette og administrere surrogatnøkler. Du lærer hvordan du lager tabeller med identitetskolonner, setter inn data, setter inn eksplisitte verdier med IDENTITY_INSERT, og gjenoppretter identitetsområdet med DBCC CHECKIDENT.

Forutsetning

  • Tilgang til et lagerobjekt i et arbeidsområde med Bidragsyter- eller høyere tillatelser.
  • Et spørringsverktøy. Denne veiledningen bruker SQL-spørringseditoren i Microsoft Fabric-portalen, men du kan bruke hvilket som helst T-SQL-spørringsverktøy.
  • En grunnleggende forståelse av T-SQL.

Hva er en IDENTITET-kolonne?

En kolonne er en numerisk kolonne som automatisk genererer IDENTITY unike verdier for nye rader. Denne oppførselen gjør den ideell for å implementere surrogatnøkler fordi hver rad får en unik identifikator uten manuell inntasting.

Opprett en IDENTITY-kolonne

For å definere en IDENTITY kolonne, spesifiser IDENTITY nøkkelordet i kolonnedefinisjonen til 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
);

Opprett en tabell med en IDENTITET-kolonne

I denne veiledningen lager du en enklere versjon av Trip tabellen fra NY Taxi åpne datasett og legger til en TripIDIDENTITY kolonne. Hver ny rad får en TripID verdi som er unik i tabellen.

  1. Definer en tabell 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. Bruk COPY INTO den til å legge inn data i tabellen. Når du bruker COPY INTO med en IDENTITY kolonne, legg til kolonnelisten og kartlegg 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 verdiene som er tildelt kolonnen IDENTITY :

    SELECT TOP 10 *
    FROM Trip;
    

    Utdataene inkluderer den automatisk genererte TripID verdien for hver rad.

    Skjermbilde av søkeresultatene som viser en tabell med de første 10 radene i et drosjeturdatasett.

    Viktig!

    Verdiene dine kan avvike fra verdiene i denne artikkelen. IDENTITY Kolonner gir verdier som er garantert unike, men verdiene er ikke nødvendigvis sekvensielle eller ordnede, og hull kan oppstå.

  4. Bruk INSERT INTO til å ta inn nye 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 kolonneliste er valgfri med INSERT INTO. Når du oppgir en, spesifiser navnene på alle kolonner du oppgir inputdata for, bortsett fra 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. Gå gjennom de innsatte radene:

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

    Observer verdiene som er tildelt de nye radene:

    Skjermbilde av en tabell med to rader og seks kolonner som viser data om taxiturer.

Sett inn eksplisitte verdier med IDENTITY_INSERT

Du må kanskje sette inn spesifikke verdier i en identitetskolonne under datamigrering, når du fyller ut sentinel-verdier, eller når du gjenoppretter data fra en backup. Bruk SET IDENTITY_INSERT for å aktivere disse innsettingene.

I denne seksjonen lager du en dimensjonstabell og bruker IDENTITY_INSERT den til å legge til sentinelrader med velkjente nøkkelverdier.

  1. Lag en dimensjonstabell med en IDENTITY kolonne:

    CREATE TABLE dbo.DimCustomer
    (
        CustomerKey BIGINT IDENTITY,
        CustomerName VARCHAR(100),
        CustomerType VARCHAR(20)
    );
    
  2. Sett inn vanlige rader. Identitetsverdiene genereres automatisk:

    INSERT INTO dbo.DimCustomer (CustomerName, CustomerType)
    VALUES ('Contoso Ltd', 'Enterprise'),
           ('Fabrikam Inc', 'SMB'),
           ('Northwind Traders', 'Enterprise');
    
  3. Aktiver IDENTITY_INSERT for å legge til sentinel-verdier. Når IDENTITY_INSERT er , ONgi en kolonneliste som 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. Etter å ha satt inn eksplisitte verdier, sett inn identitetskolonnen med DBCC CHECKIDENT for å sikre at fremtidige automatisk genererte verdier ikke kolliderer med innsatte verdier:

    DBCC CHECKIDENT('dbo.DimCustomer', RESEED);
    
  5. Verifiser at sentinel-radene vises sammen med automatisk genererte rader:

    SELECT *
    FROM dbo.DimCustomer
    ORDER BY CustomerKey;
    
  6. Sett inn en rad og bekreft at den automatisk genererte verdien ikke kommer i konflikt:

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

Opprydding av veiledningsressurser

Eventuelt, slipp tabellene som ble laget under denne veiledningen:

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