Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
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
INSERTstelling. - Slechts één tabel per sessie kan tegelijk
IDENTITY_INSERTingesteld hebben opON.
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
IDENTITYkolommen 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 metALTER TABLEwordt niet ondersteund. Overweeg om CREATE TABLE AS SELECT (CTAS) of SELECT... te gebruiken. INTO om een kopie van een bestaande tabel te maken en eenIDENTITYkolom toe te voegen. - Beperkingen gelden voor hoe
IDENTITYkolommen behouden blijven wanneer je een tabel aanmaakt door te selecteren uit een andere tabel met CTAS ofSELECT...INTO. Voor meer informatie, zie het gedeelte Gegevenstypen van SELECT - INTO Clause (Transact-SQL). -
DBCC CHECKIDENTOndersteunt alleen deRESEEDoptie. Het opgeven van een aangepaste herinzaaiwaarde of het gebruik vanNORESEEDwordt niet ondersteund. -
IDENTITYKolommen 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.