Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Van toepassing op:✅ Warehouse in Microsoft Fabric
Surrogaatsleutels zijn id's die worden gebruikt in datawarehousing om rijen uniek te onderscheiden, onafhankelijk van hun natuurlijke sleutels. In Fabric Data Warehouse IDENTITY maken kolommen het automatisch genereren van deze surrogaatsleutels mogelijk bij het invoegen van nieuwe rijen in een tabel. In dit artikel wordt uitgelegd hoe IDENTITY u kolommen in Fabric Data Warehouse gebruikt om surrogaatsleutels efficiënt te maken en te beheren.
Waarom een IDENTITY-kolom gebruiken?
IDENTITY kolommen elimineren de noodzaak van handmatige sleuteltoewijzing, het verminderen van het risico op fouten en het vereenvoudigen van gegevensopname. Door het systeem beheerde unieke waarden zijn ideaal als surrogaatsleutels en primaire sleutels. In vergelijking met handmatige benaderingen voor het produceren van surrogaatsleutels bieden kolommen superieure prestaties omdat IDENTITY unieke sleutels automatisch worden gegenereerd zonder extra logica voor query's.
Het gegevenstype bigint , vereist voor IDENTITY kolommen, kan maximaal 9.223.372.036.854.775.807 positieve gehele getallen bevatten, zodat elke rij gedurende de levensduur van een tabel een unieke waarde in de 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
Als u een IDENTITY kolom in Fabric Data Warehouse wilt definiëren, wordt de IDENTITY eigenschap gebruikt met de gewenste kolom. De syntaxis is als volgt:
CREATE TABLE { warehouse_name.schema_name.table_name | schema_name.table_name | table_name } (
[column_name] BIGINT IDENTITY,
[ ,... n ]
-- Other columns here
);
Hoe IDENTITEITSkolommen werken
In Fabric Data Warehouse kunt u geen aangepaste beginwaarde of verhoging opgeven; het systeem beheert de waarden intern om uniekheid te garanderen.
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 wordt gebruikt, IDENTITY wordt diezelfde waarde niet meer gebruikt, waarbij zowel de sleutelintegriteit als de uniekheid behouden blijven. Hiaten kunnen zich voordoen in de waarden die door de IDENTITY kolom worden geproduceerd.
Toewijzing van waarden
Vanwege de gedistribueerde architectuur van de magazijnengine garandeert de IDENTITY eigenschap niet de volgorde waarin de surrogaatwaarden worden toegewezen. De IDENTITY eigenschap is ontworpen om uit te schalen op rekenknooppunten om parallelle uitvoering te maximaliseren, zonder dat dit van invloed is op de belastingsprestaties. Als gevolg hiervan kunnen waardebereiken voor verschillende opnametaken verschillende reeksbereiken hebben.
Bekijk het volgende voorbeeld om dit gedrag te illustreren:
-- Create a table with an IDENTITY column
CREATE TABLE dbo.T1(
C1 BIGINT IDENTITY,
C2 VARCHAR(30) NULL
)
-- Ingestion task A
INSERT INTO dbo.T1
VALUES (NULL), (NULL), (NULL), (NULL);
-- Ingestion task B
INSERT INTO dbo.T1
VALUES (NULL), (NULL), (NULL), (NULL);
-- Reviewing the data
SELECT * FROM dbo.T1;
Voorbeeldresultaat:
In dit voorbeeld worden Ingestion task A en Ingestion task B opeenvolgend uitgevoerd als onafhankelijke taken. Hoewel de taken opeenvolgend zijn uitgevoerd, hebben de eerste en laatste vier rijen verschillende identiteitssleutelbereiken in dbo.T1.C1. Bovendien kunnen, zoals in dit voorbeeld is waargenomen, hiaten tussen de bereiken die zijn toegewezen voor taak A en taak B optreden.
IDENTITY in Fabric Data Warehouse garandeert dat alle waarden in een IDENTITY kolom uniek zijn, maar er kunnen hiaten zijn in de reeksen die voor een bepaalde ingestaak worden geproduceerd.
Systeemweergaven
De sys.identity_columns catalogusweergave kan worden gebruikt om alle identiteitskolommen in een magazijn weer te geven. In het volgende voorbeeld ziet u alle tabellen die een IDENTITY kolom in de definitie bevatten, met de bijbehorende schemanaam en de naam van de IDENTITY kolom in die tabel:
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;
Beperkingen
- Alleen het bigint-gegevenstype wordt ondersteund voor
IDENTITYkolommen in Fabric Data Warehouse. Als u andere gegevenstypen probeert te gebruiken, treedt er een fout op. -
IDENTITY_INSERTwordt niet ondersteund in Fabric Data Warehouse. Gebruikers kunnen geen kolomwaarden bijwerken of handmatig invoegen in identiteitskolommen in Fabric Data Warehouse. - Het definiëren van een
seedenincrementwordt niet ondersteund. Als gevolg hiervan wordt het opnieuw verzenden van deIDENTITYkolom niet ondersteund. - Het toevoegen van een nieuwe
IDENTITYkolom aan een bestaande tabel metALTER TABLEwordt niet ondersteund. Overweeg het gebruik van CREATE TABLE AS SELECT (CTAS) of SELECT... INTO als alternatief voor het maken van een kopie van een bestaande tabel waarmee eenIDENTITYkolom aan de definitie wordt toegevoegd. - Sommige beperkingen gelden voor de manier waarop
IDENTITYkolommen behouden blijven bij het maken van een nieuwe tabel als gevolg van een selectie uit een andere tabel metCREATE TABLE AS SELECT (CTAS)ofSELECT... INTO. Zie de sectie Gegevenstypen van SELECT - INTO-component (Transact-SQL)voor meer informatie.
Voorbeelden
Eén. Een tabel maken met een identity-kolom
CREATE TABLE Employees (
EmployeeID BIGINT IDENTITY,
FirstName VARCHAR(50),
LastName VARCHAR(50)
);
Met deze instructie maakt u een tabel Werknemers waarin elke nieuwe rij automatisch een unieke EmployeeID als bigint-waarde ontvangt.
B. INVOEGEN in een tabel met een identiteitskolom
Wanneer de eerste kolom een IDENTITY kolom is, hoeft u deze niet op te geven in de kolomlijst.
INSERT INTO Employees (FirstName, LastName) VALUES ('Ensi','Vasala')
Het is ook mogelijk om de kolomnamen te verzenden, als er waarden worden opgegeven voor alle kolommen van de doeltabel (met uitzondering van de identiteitskolom):
INSERT INTO Employees VALUES ('Quarantino', 'Esposito')
C. Een nieuwe tabel maken met een IDENTITY-KOLOM met CREATE TABLE AS SELECT (CTAS)
Een eenvoudige tabel beschouwen als voorbeeld:
CREATE TABLE Employees (
EmployeeID BIGINT IDENTITY,
FirstName VARCHAR(50),
LastName VARCHAR(50)
);
We kunnen (CTAS) gebruiken CREATE TABLE AS SELECT om een kopie van deze tabel te maken, waarbij de IDENTITY eigenschap in de doeltabel behouden blijft:
CREATE TABLE RetiredEmployees
AS SELECT * FROM Employees
De kolom in de doeltabel erft de IDENTITY eigenschap van de brontabel. Voor een lijst van beperkingen die op dit scenario van toepassing zijn, zie de sectie Gegevenstypen van SELECT - INTO Clause.
D. Een nieuwe tabel maken met een identiteitskolom met BEHULP van SELECT... IN
Een eenvoudige tabel beschouwen als voorbeeld:
CREATE TABLE dbo.Employees (
EmployeeID BIGINT IDENTITY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Retired BIT
);
We kunnen met behulp van SELECT... INTO een kopie van deze tabel maken, waarbij de IDENTITY-eigenschap in de doeltabel behouden blijft.
SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE Retired = 1;
De kolom in de doeltabel erft de IDENTITY eigenschap van de brontabel. Voor een lijst van beperkingen die op dit scenario van toepassing zijn, zie de sectie Gegevenstypen van SELECT - INTO Clause.