IDENTITY-kolommen in Fabric Data Warehouse

Van toepassing op:✅ Warehouse in Microsoft Fabric

In Fabric Data Warehouse IDENTITY genereren kolommen automatisch nieuwe numerieke waarden wanneer je nieuwe rijen in een tabel invoegt.

Surrogaatsleutels zijn id's die worden gebruikt in datawarehousing om rijen uniek te onderscheiden, onafhankelijk van hun natuurlijke sleutels. Dit artikel legt uit hoe je surrogaatsleutels kunt maken en beheren met IDENTITYbehulp van , inclusief het invoegen van expliciete waarden en het opnieuw seeden.

Waarom een IDENTITY-kolom gebruiken?

IDENTITY Kolommen elimineren handmatige toetstoewijzing, verminderen het risico op fouten en vereenvoudigen de gegevensopname. Door het systeem beheerde unieke waarden zijn ideaal als surrogaatsleutels en primaire sleutels. In vergelijking met handmatige benaderingen IDENTITY bieden kolommen betere prestaties omdat unieke sleutels automatisch worden gegenereerd zonder extra querylogica.

Het bigint-datatype , vereist voor IDENTITY kolommen, kan tot 9.223.372.036.854.775.807 positieve gehele getallen opslaan. Dit bereik zorgt ervoor dat elke rij gedurende de levensduur van de tabel een unieke waarde in zijn IDENTITY kolom ontvangt.

Voor een plan voor het migreren van gegevens met surrogaatsleutels van andere databaseplatforms, zie IDENTITY-kolommen migreren naar Fabric Data Warehouse.

Syntaxis

Om een IDENTITY kolom in Fabric Data Warehouse te definiëren, gebruik je de IDENTITY eigenschap in de kolomdefinitie:

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

De identiteitskolom hoeft niet de eerste kolom in de tabeldefinitie te zijn.

Hoe IDENTITEITSkolommen werken

In Fabric Data Warehouse kun je geen aangepaste startwaarde of increment specificeren. Het systeem beheert waarden intern om uniciteit te waarborgen. IDENTITY kolommen produceren altijd positieve gehele getallen. Elke nieuwe rij ontvangt een nieuwe waarde en de uniekheid is gegarandeerd zolang de tabel bestaat. Zodra een waarde is gebruikt, IDENTITY wordt diezelfde waarde niet meer gebruikt. Er kunnen gaten ontstaan in de waarden die de IDENTITY kolom produceert.

Toewijzing van waarden

Door de gedistribueerde architectuur van de warehouse-engine garandeert de IDENTITY eigenschap niet in welke volgorde de surrogaatwaarden worden toegewezen. De eigenschap schaalt uit over compute-nodes om parallelisme te maximaliseren zonder de belastingprestaties te beïnvloeden. Daardoor zijn de waardeverschillen van verschillende innametaken mogelijk niet opeenvolgend.

In het volgende voorbeeld ziet u dit gedrag:

-- 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;

Voorbeeldresultaat:

Screenshot van de resultaatset van een query van een tabel met twee kolommen gelabeld Kolom1 en Kolom2, met acht rijen gegevens. Kolom1 bevat grote numerieke waarden, Kolom2 bevat de tekst.

In dit voorbeeld worden Ingestion task A en Ingestion task B opeenvolgend uitgevoerd als onafhankelijke taken. Hoewel de taken achtereenvolgens draaien, hebben de eerste en laatste vier rijen verschillende identiteitssleutelbereiken in dbo.Table1.Column1. Er kunnen ook gaten ontstaan tussen de bereiken die aan taak A en taak B zijn toegewezen.

IDENTITY In Fabric Data Warehouse garandeert dat alle waarden in een IDENTITY-kolom uniek zijn zolang IDENTITY_INSERT niet wordt gebruikt, maar er kunnen hiaten ontstaan in de reeksen die voor een opnametaak worden geproduceerd.

Systeemmetadata-objecten

De volgende systeemmetadata-objecten zijn beschikbaar en nuttig bij het ontwerpen en werken met identiteitswaarden in Fabric Data Warehouse.

Geef identiteitskolommen weer met de systeemweergave sys.identity_columns

Gebruik de catalogusweergave van sys.identity_columns om alle identiteitskolommen in een magazijn te vermelden. Het volgende voorbeeld geeft alle tabellen weer die een IDENTITY kolom bevatten, inclusief de kolomnamen van het schema, de tabel en de identiteit:

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;

In Fabric Data Warehouse retourneren de kolommen seed_value en increment_value van sys.identity_columnsNULL en worden ze niet bijgewerkt nadat de identiteitskolom is aangemaakt. De kolom last_value geeft standaard NULL terug, maar schakelt na de eerste identity insert-bewerking in de tabel permanent over naar -1.

Voegt waarden in met IDENTITY_INSERT

Standaard kun je geen waarden in een IDENTITY kolom invoegen. Je moet echter mogelijk specifieke waarden invoegen tijdens datamigratie, disaster recovery, of wanneer je sentinelwaarden vult, bijvoorbeeld -1 voor "Onbekend" in dimensietabellen.

Gebruik SET IDENTITY_INSERT om tijdelijk expliciete inserts in een identiteitskolom toe te staan:

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;

Als IDENTITY_INSERTON is:

  • Een kolomlijst is vereist bij de INSERT stelling.
  • Slechts één tabel per sessie kan tegelijk IDENTITY_INSERT ingesteld hebben op ON.

Belangrijk

Na het uitschakelen van IDENTITY_INSERT, initialiseer je de identiteitswaarden opnieuw met DBCC CHECKIDENT.

Identiteitswaarden opnieuw instellen met DBCC CHECKIDENT

Nadat je expliciete waarden hebt ingevoegd met IDENTITY_INSERT, gebruik DBCC CHECKIDENT om de identiteitskolom opnieuw te plaatsen. De RESEED operatie scant alle gebruikte en gereserveerde identiteitsbereiken over gedistribueerde rekenknooppunten om de juiste volgende waarden te bepalen, waarmee uniciteit wordt gegarandeerd en sleutelbotsingen worden voorkomen.

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

In Fabric Data Warehouse ondersteunt alleen DBCC CHECKIDENT de RESEED optie. Het datawarehouse bepaalt automatisch de juiste volgende waardebereiken en u kunt geen aangepaste herinitialisatiewaarde opgeven. Zie DBCC CHECKIDENT-voor meer informatie.

Beperkingen

Voor meer informatie raadpleegt u IDENTITY-kolommen, IDENTITY (Transact-SQL) en Tabellen maken in Warehouse in Microsoft Fabric.

  • Alleen het bigint-gegevenstype wordt ondersteund voor IDENTITY kolommen in Fabric Data Warehouse. Andere datatypes leiden tot een fout.
  • Het definiëren van een seed en increment wordt niet ondersteund. Het systeem beheert waarden intern.
  • Het toevoegen van een IDENTITY-kolom aan een bestaande tabel met ALTER TABLE wordt niet ondersteund. Overweeg om CREATE TABLE AS SELECT (CTAS) of SELECT... te gebruiken. INTO om een kopie van een bestaande tabel te maken en een IDENTITY kolom toe te voegen.
  • Beperkingen gelden voor hoe IDENTITY kolommen behouden blijven wanneer je een tabel aanmaakt door te selecteren uit een andere tabel met CTAS of SELECT...INTO. Voor meer informatie, zie het gedeelte Gegevenstypen van SELECT - INTO Clause (Transact-SQL).
  • DBCC CHECKIDENT Ondersteunt alleen de RESEED optie. Het opgeven van een aangepaste herinzaaiwaarde of het gebruik van NORESEED wordt niet ondersteund.
  • IDENTITY Kolommen leveren waarden op die gegarandeerd uniek zijn, maar de waarden zijn niet per se sequentieel of geordend, en er kunnen gaten ontstaan.

Voorbeelden

Eén. Een tabel maken met een identity-kolom

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

Deze instructie maakt een Employees tabel waarin elke nieuwe rij automatisch een unieke EmployeeID als bigintwaarde ontvangt.

B. Voeg rijen in in een tabel met een identiteitskolom

Wanneer je waarden geeft voor elke niet-identiteitskolom in hun gedefinieerde volgorde, hoef je geen kolomlijst te specificeren:

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

Je kunt ook een kolomlijst geven die de identiteitskolom weglaat:

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

C. Voeg expliciete waarden in met 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. Voeg expliciete waarden in met COPY INTO

De COPY INTO instructie ondersteunt de IDENTITY_INSERT optie om expliciete waarden binnen het commando in te voeren. COPY INTO opties overschrijven elke sessie-niveau instelling voor 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. Een tabel opnieuw bezaaien na expliciete inserts

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

F. Maak een tabel aan met CREATE TABLE AS SELECT

Gebruik CTAS om een kopie van een tabel te maken en de IDENTITY eigenschap in de doel-tabel te behouden:

CREATE TABLE RetiredEmployees
AS SELECT * FROM Employees;

De kolom in de doeltabel erft de IDENTITY-eigenschap van de brontabel. Voor beperkingen, zie het gedeelte Gegevenstypen van SELECT - INTO Clause.

G. Maak een tabel aan met SELECT... IN

Gebruik SELECT...INTO om een kopie van een tabel te maken en de IDENTITY eigenschap in de doel-tabel te behouden:

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

De kolom in de doeltabel erft de IDENTITY-eigenschap van de brontabel. Voor beperkingen, zie het gedeelte Gegevenstypen van SELECT - INTO Clause.

Volgende stap