IDENTITY-kolumner i Fabric Data Warehouse

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

I Fabric Data Warehouse IDENTITY genererar kolumner automatiskt nya numeriska värden när du lägger in nya rader i en tabell.

Surrogatnycklar är identifierare som används i datalager för att unikt särskilja rader, oberoende av deras naturliga nycklar. Denna artikel förklarar hur man skapar och hanterar surrogatnycklar med IDENTITY, inklusive att infoga uttryckliga värden och återställa seed-värdet.

Varför ska du använda en identitetskolumn?

IDENTITY Kolumner eliminerar manuell nyckeltilldelning, minskar risken för fel och förenklar datainsamlingen. Systemhanterade unika värden är idealiska som surrogatnycklar och primära nycklar. Jämfört med manuella IDENTITY metoder erbjuder kolumner bättre prestanda eftersom unika nycklar genereras automatiskt utan extra frågelogik.

Biggint-datatypen, som krävs för IDENTITY kolumner, kan lagra upp till 9 223 372 036 854 775 807 positiva heltalsvärden. Detta intervall säkerställer att varje rad får ett unikt värde i sin IDENTITY kolumn under hela tabellens livslängd.

För en plan för att migrera data med surrogatnycklar från andra databasplattformar, se Migrera IDENTITY-kolumner till Fabric Data Warehouse.

Syntax

För att definiera en IDENTITY kolumn i Fabric Data Warehouse, använd egenskapen IDENTITY i kolumndefinitionen:

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

Identitetskolumnen behöver inte vara den första kolumnen i tabelldefinitionen.

Så här fungerar IDENTITY-kolumner

I Fabric Data Warehouse kan du inte ange ett anpassat startvärde eller inkrement. Systemet hanterar värderingar internt för att säkerställa unikhet. IDENTITY kolumner skapar alltid positiva heltalsvärden. Varje ny rad får ett nytt värde och unikhet garanteras så länge tabellen finns. När ett värde väl har använts, IDENTITY används inte samma värde igen. Luckor kan förekomma i de värden som kolumnen IDENTITY genererar.

Allokering av värden

På grund av den distribuerade arkitekturen i warehouse-motorn garanterar egenskapen IDENTITY inte i vilken ordning surrogatvärden allokeras. Egenskapen skalar ut över beräkningsnoder för att maximera parallellism utan att påverka belastningsprestandan. Som ett resultat kan värdeintervallen från olika intagningsuppgifter vara osekventiella.

Följande exempel illustrerar det här beteendet:

-- Create a table with an IDENTITY column
CREATE TABLE dbo.Table1(
    Column1 BIGINT IDENTITY,
    Column2 VARCHAR(30) NULL
)

-- Ingestion task A
INSERT INTO dbo.Table1
VALUES (NULL), (NULL), (NULL), (NULL);

-- Ingestion task B
INSERT INTO dbo.Table1
VALUES (NULL), (NULL), (NULL), (NULL);

-- Review the data
SELECT * FROM dbo.Table1;

Exempelresultat:

Skärmdump av resultatuppsättningen av en fråga i en tabell med två kolumner märkta Kolumn1 och Kolumn2, som visar åtta rader data. Kolumn1 innehåller stora numeriska värden, kolumn2 innehåller texten.

I detta exempel körs Ingestion task A de Ingestion task B sekventiellt som oberoende uppgifter. Även om uppgifterna körs efter varandra har de första och sista fyra raderna olika intervall för identitetsnycklar i dbo.Table1.Column1. Luckor mellan de intervall som tilldelas uppgift A och uppgift B kan också uppstå.

IDENTITYI Fabric Data Warehouse garanteras att alla värden i en IDENTITY-kolumn är unika så länge IDENTITY_INSERT inte används, men luckor kan uppstå i de intervall som genereras för en inmatningsuppgift.

Systemmetadataobjekt

Följande systemmetadataobjekt är tillgängliga och användbara vid design och arbete med identitetsvärden i Fabric Data Warehouse.

Lista identitetskolumner med sys.identity_columns systemvy

Använd sys.identity_columns katalogvy för att lista alla identitetskolumner i ett lager. Följande exempel listar alla tabeller som innehåller en IDENTITY kolumn, inklusive schema-, tabell- och identitetskolumnnamn:

SELECT
    s.name AS SchemaName,
    t.name AS TableName,
    c.name AS IdentityColumnName
FROM
    sys.identity_columns AS ic
INNER JOIN
    sys.columns AS c ON ic.[object_id] = c.[object_id]
    AND ic.column_id = c.column_id
INNER JOIN
    sys.tables AS t ON ic.[object_id] = t.[object_id]
INNER JOIN
    sys.schemas AS s ON t.[schema_id] = s.[schema_id]
ORDER BY
    s.name, t.name;

I Fabric Data Warehouse returnerar kolumnerna seed_value och sys.identity_columns i NULLincrement_value och uppdateras inte efter att identitetskolumnen har skapats. Kolumnen last_value returnerar NULL som standard, men byter permanent till -1 efter den första identitetsinnläggningen i tabellen.

Infoga värden med IDENTITY_INSERT

Som standard kan du inte infoga värden i en IDENTITY kolumn. Du kan dock behöva infoga specifika värden under datamigrering, katastrofåterställning eller när du fyller i sentinelvärden, till exempel -1 för "Okänd" i dimensionstabeller.

Använd SET IDENTITY_INSERT för att tillfälligt tillåta explicita insättningar i en identitetskolumn:

SET IDENTITY_INSERT dbo.DimCustomer ON;

INSERT INTO dbo.DimCustomer (CustomerKey, CustomerName, Email)
VALUES (-1, 'John Doe', 'john@contoso.com');

SET IDENTITY_INSERT dbo.DimCustomer OFF;

När IDENTITY_INSERT är ON:

  • En kolumnlista krävs med uttalandet INSERT .
  • Endast ett bord per session kan ha IDENTITY_INSERT satt till ON åt gången.

Viktigt!

Efter att ha stängt IDENTITY_INSERT av, återställ identitetsvärden med DBCC CHECKIDENT.

Återställa identitetsvärden med DBCC CHECKIDENT

Efter att du har infogat explicita värden med IDENTITY_INSERT, använd DBCC CHECKIDENT för att återställa identitetskolumnen. Operationen RESEED skannar alla använda och reserverade identitetsintervall över distribuerade beräkningsnoder för att bestämma rätt nästa värden, vilket säkerställer unikhet och förhindrar nyckelkollisioner.

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

I Fabric Data Warehouse stöder endast DBCC CHECKIDENT alternativetRESEED. Datalagret fastställer automatiskt nästa korrekta värdeintervall, och du kan inte ange ett anpassat startvärde. Mer information finns i DBCC CHECKIDENT.

Begränsningar

Mer information finns i IDENTITY-kolumner, IDENTITY (Transact-SQL), och Skapa tabeller i Warehouse i Microsoft Fabric.

  • Endast bigint-datatypen stöds för kolumner i Fabric Data Warehouse. Andra datatyper resulterar i ett fel.
  • Det går inte att definiera ett startvärde och en ökning. Systemet hanterar värderingar internt.
  • Att lägga till en IDENTITY-kolumn i en befintlig tabell med ALTER TABLE stöds inte. Överväg att använda CREATE TABLE AS SELECT (CTAS) eller SELECT... INTO för att skapa en kopia av en befintlig tabell och lägga till en IDENTITY kolumn.
  • Begränsningar gäller för hur IDENTITY kolumner bevaras när du skapar en tabell genom att välja från en annan tabell med CTAS eller SELECT...INTO. För mer information, se avsnittet Datatyper i SELECT - INTO Clause (Transact-SQL).
  • DBCC CHECKIDENT stöder endast alternativet RESEED . Det går inte att ange ett anpassat omstartsvärde eller att använda NORESEED.
  • IDENTITY Kolumner ger värden som garanteras vara unika, men värdena är inte nödvändigtvis sekventiella eller ordningade, och luckor kan uppstå.

Examples

A. Skapa en tabell med en identitetskolumn

CREATE TABLE Employees (
    EmployeeID BIGINT IDENTITY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50)
);

Detta påstående skapar en Employees tabell där varje ny rad automatiskt får ett unikt EmployeeID värde som bigint .

B. Infoga rader i en tabell med en identitetskolumn

När du anger värden för varje icke-identitetskolumn i deras definierade ordning behöver du inte specificera en kolumnlista:

INSERT INTO Employees VALUES ('Quarantino', 'Esposito');

Du kan också tillhandahålla en kolumnlista som utelämnar identitetskolumnen:

INSERT INTO Employees (FirstName, LastName)
VALUES ('Ensi', 'Vasala');

C. Sätt in explicita värden med IDENTITY_INSERT

SET IDENTITY_INSERT dbo.Employees ON;

INSERT INTO dbo.Employees (EmployeeID, FirstName, LastName)
VALUES (100, 'Sentinel', 'Row');

SET IDENTITY_INSERT dbo.Employees OFF;

D. Infoga explicita värden med COPY INTO

Satsen COPY INTO stöder IDENTITY_INSERT möjligheten att ta in explicita värden i kommandot. COPY INTO alternativ åsidosätter alla inställningar på sessionsnivå för IDENTITY_INSERT.

COPY INTO dbo.Employees (EmployeeID 1, FirstName 2, LastName 3)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
    FILE_TYPE = 'CSV',
    IDENTITY_INSERT = 'ON'
);

E. Återställ en tabell efter explicita infogningar

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

F. Skapa en tabell med CREATE TABLE AS SELECT

Använd CTAS för att skapa en kopia av en tabell och behålla IDENTITY egenskapen i måltabellen:

CREATE TABLE RetiredEmployees
AS SELECT * FROM Employees;

Kolumnen i måltabellen ärver egenskapen IDENTITY från källtabellen. För begränsningar, se avsnittet om datatyper i SELECT - INTO Clause.

G. Skapa en tabell med SELECT... IN

Använd SELECT...INTO för att skapa en kopia av en tabell och behålla egenskapen IDENTITY i måltabellen:

SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE LastName = 'Esposito';

Kolumnen i måltabellen ärver egenskapen IDENTITY från källtabellen. För begränsningar, se avsnittet om datatyper i SELECT - INTO Clause.

Nästa steg