IDENTITY oszlopok használata a Fabric Data Warehouse-ben

A következőkre vonatkozik:✅ Raktár a Microsoft Fabricben

Ez a tutorial elmagyarázza, hogyan lehet az IDENTITY oszlopokat használni Fabric Data Warehouse-ban helyettesítő kulcsok létrehozásához és kezelésére. Megtudhatja, hogyan hozhat létre IDENTITY oszlopokat tartalmazó táblákat, hogyan szúrhat be adatokat, hogyan szúrhat be explicit értékeket a(z) IDENTITY_INSERT használatával, valamint hogyan állíthatja be újra az identitástartományt a(z) DBCC CHECKIDENT használatával.

Előfeltételek

  • Hozzáférés egy munkaterületen belüli Warehouse-elemhez Contributor vagy magasabb szintű jogosultsággal.
  • Egy lekérdezési eszköz. Ez az oktatóanyag a Microsoft Fabric portál SQL lekérdezésszerkesztőjét használja, de bármilyen T-SQL lekérdezési eszközt használhatsz.
  • Alapvető ismeretek a T-SQL-ről.

Mi az IDENTITÁS oszlop?

Az IDENTITY oszlop egy numerikus oszlop, amely automatikusan egyedi értékeket hoz létre az új sorokhoz. Ez a viselkedés ideálissá teszi a helyettesítő kulcsok megvalósítására, mivel minden sor egyedi azonosítót kap kézi bemenet nélkül.

IDENTITÁSoszlop létrehozása

Egy IDENTITY oszlop definiálásához adja meg a IDENTITY kulcsszót a CREATE TABLE T-SQL-szintaxis oszlopdefiníciójában:

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

Tábla létrehozása IDENTITÁS oszlopmal

Ebben az oktatóban a NY Taxi nyílt adathalmazából egy egyszerűbb Trip táblázatot hozol létre, és hozzáadsz egy TripIDIDENTITY oszlopot. Minden új sor egyedi TripID értéket kap a táblázatban.

  1. Tábla definiálása oszloppal IDENTITY :

     CREATE TABLE dbo.Trip
     (
         TripID               bigint IDENTITY,
         tpepPickupDateTime   datetime2(6),
         tpepDropoffDateTime  datetime2(6),
         passengerCount       int,
         tripDistance         float,
         fareAmount           float,
         totalAmount          float
     );
    
  2. Az adatok táblába való betöltéséhez használd a(z) COPY INTO elemet. Ha a COPY INTO oszlopot a(z) IDENTITY elemmel használod, add meg az oszloplistát, és rendeld hozzá a forrásadatok oszlopaihoz.

     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. Tekintse meg előnézetben az adatokat és a(z) IDENTITY oszlophoz rendelt értékeket:

    SELECT TOP 10 *
    FROM Trip;
    

    A kimenet tartalmazza az automatikusan TripID generált értéket minden sorhoz.

    Képernyőkép a lekérdezés eredményeiről, amely egy taxiút-adatkészlet első 10 sorát tartalmazó táblát ábrázol.

    Fontos

    Az értékeid eltérhetnek a cikkben szereplőktől. IDENTITY Az oszlopok garantáltan egyedi értékeket állítanak elő, de az értékek nem feltétlenül folytonosak vagy rendezettek, és előfordulhatnak kihagyások.

  4. Új sorok beolvasásához használja a(z) INSERT INTO elemet:

     INSERT INTO dbo.Trip
     VALUES ('2026-01-01T00:00:00', '2013-01-01T00:12:00', 1, 2.4, 10.5, 13.0);
    
  5. Egy oszloplista opcionális, ha INSERT INTO. Amikor megadod egyet, határozd meg az összes bemeneti adatot megadott oszlop nevét, kivéve az oszlopot 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. Nézze át a beillesztett sorokat:

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

    Figyelje meg az új sorokhoz rendelt értékeket:

    Képernyőkép egy táblázatról, amelynek két sora és hat oszlopa a taxiutazási adatokat mutatja.

Explicit értékek beszúrása az IDENTITY_INSERT használatával

Lehet, hogy konkrét értékeket kell beillesztened egy identitásoszlopba adatmigráció során, sentinel értékek feltöltése vagy mentésből származó adatok visszaállításakor. Használd a SET IDENTITY_INSERT-t ezeknek a betéteknek a aktiválásához.

Ebben a szakaszban létrehozol egy dimenziótáblát, és a IDENTITY_INSERT használatával jól ismert kulcsértékekkel rendelkező sentinel sorokat adsz hozzá.

  1. Hozz létre egy dimenziótáblázatot egy IDENTITY oszloppal:

    CREATE TABLE dbo.DimCustomer
    (
        CustomerKey BIGINT IDENTITY,
        CustomerName VARCHAR(100),
        CustomerType VARCHAR(20)
    );
    
  2. Helyezz be sima sorokat. Az identitás értékek automatikusan generálódnak:

    INSERT INTO dbo.DimCustomer (CustomerName, CustomerType)
    VALUES ('Contoso Ltd', 'Enterprise'),
           ('Fabrikam Inc', 'SMB'),
           ('Northwind Traders', 'Enterprise');
    
  3. Engedélyezd a(z) IDENTITY_INSERT beállítást őrértékek hozzáadásához. Ha a(z) IDENTITY_INSERT értéke ON, adjon meg egy oszloplistát, amely tartalmazza az identitásoszlopot:

    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. Az explicit módon megadott értékek beszúrása után inicializálja újra az identitásoszlopot a(z) DBCC CHECKIDENT értékkel annak biztosítására, hogy a később automatikusan generált értékek ne ütközzenek a beszúrt értékekkel:

    DBCC CHECKIDENT('dbo.DimCustomer', RESEED);
    
  5. Ellenőrizd, hogy a sentinel sorok az automatikusan generált sorok mellett jelennek meg:

    SELECT *
    FROM dbo.DimCustomer
    ORDER BY CustomerKey;
    
  6. Helyezz be egy sort, és ellenőrizd, hogy az automatikusan generált érték nem ütközik-e:

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

Tisztítsd meg a tutorial forrásokat

Opcionálisan hagyd el a bemutató során létrehozott táblázatokat:

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