Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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:
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_INSERTsatt tillONå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 medALTER TABLEstö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 enIDENTITYkolumn. - Begränsningar gäller för hur
IDENTITYkolumner bevaras när du skapar en tabell genom att välja från en annan tabell med CTAS ellerSELECT...INTO. För mer information, se avsnittet Datatyper i SELECT - INTO Clause (Transact-SQL). -
DBCC CHECKIDENTstöder endast alternativetRESEED. Det går inte att ange ett anpassat omstartsvärde eller att användaNORESEED. -
IDENTITYKolumner 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.