Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
Koskee:✅ Microsoft Fabric -varasto
Vuonna Fabric tietovarasto IDENTITY sarakkeet tuottavat automaattisesti uusia numeerisia arvoja, kun lisäät uusia rivejä taulukkoon.
Sijaisavaimet ovat tunnisteita, joita käytetään tietovarastoinnissa rivien yksilölliseen erottamiseen, riippumatta niiden luonnollisista avaimista. Tässä artikkelissa selitetään, miten sijaisavaimet luodaan ja hallitaan käyttäen IDENTITY, mukaan lukien eksplisiittisten arvojen lisääminen ja uudelleensiementäminen.
Miksi käyttää IDENTITY-sarakkea?
IDENTITY Sarakkeet poistavat manuaalisen avainten jakamisen, vähentäen virheriskiä ja helpottaen datan vastaanottoa. Järjestelmän hallinnoimat yksilölliset arvot ovat ihanteellisia sijaisavaimiksi ja ensisijaisiksi avaimiksi. Manuaalisiin IDENTITY menetelmiin verrattuna sarakkeet tarjoavat paremman suorituskyvyn, koska uniikit avaimet generoidaan automaattisesti ilman ylimääräistä kyselylogiikkaa.
Sarakkeille vaadittu IDENTITYbigint-tietotyyppi voi tallentaa jopa 9 223 372 036 854 775 807 positiivista kokonaislukuarvoa. Tämä väli varmistaa, että jokainen rivi saa ainutlaatuisen arvon sarakkeessaan IDENTITY koko taulukon elinkaaren ajan.
Jos haluat siirtää tietoja korvaavaimilla muilta tietokantaalustoilta, katso Migrate IDENTITY-sarakkeet Fabric tietovarastoen.
Syntax
Määritteleäksesi sarakkeen IDENTITY Fabric tietovarasto, käytä sarakkeen määritelmän IDENTITY ominaisuutta:
CREATE TABLE { warehouse_name.schema_name.table_name | schema_name.table_name | table_name } (
[ column_name ] BIGINT IDENTITY ,
[ ,...n ]
-- Other columns here
);
Identiteettisarakkeen ei tarvitse olla ensimmäinen sarake taulumääritelmässä.
Miten IDENTITY-sarakkeet toimivat
Fabric tietovarasto:ssa et voi määrittää mukautettua aloitusarvoa tai lisäystä. Järjestelmä hallinnoi arvoja sisäisesti varmistaakseen ainutlaatuisuuden.
IDENTITY sarakkeet tuottavat aina positiivisia kokonaislukuarvoja. Jokainen uusi rivi saa uuden arvon, ja yksilöllisyys taataan niin kauan kuin taulukko on olemassa. Kun arvo on käytetty, IDENTITY sitä ei enää käytetä. Aukkoja voi esiintyä sarakkeen tuottamissa arvoissa IDENTITY .
Arvojen allokaatio
Varastomoottorin hajautetun arkkitehtuurin vuoksi ominaisuus IDENTITY ei takaa sijaisarvojen jakamisjärjestystä. Ominaisuus skaalautuu laskentasolmujen välillä maksimoidakseen rinnakkaisuuden vaikuttamatta kuormitussuorituskyvyn vaikutukseen. Tämän seurauksena eri syöttötehtävien arvovälit eivät välttämättä ole peräkkäin.
Seuraava esimerkki havainnollistaa tätä käyttäytymistä:
-- 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;
Esimerkkitulos:
Tässä esimerkissä Ingestion task A ja Ingestion task B suoritetaan peräkkäin itsenäisinä tehtävinä. Vaikka tehtävät suoritetaan peräkkäin, ensimmäisellä ja viimeisellä neljällä rivillä on erilaiset identiteettiavainalueet .dbo.Table1.Column1 Myös tehtävälle A ja tehtävälle B annettujen etäisyyksien välillä voi esiintyä aukkoja.
IDENTITYFabric tietovarasto takaa, että kaikki sarakkeen arvot IDENTITY ovat uniikkeja niin kauan IDENTITY_INSERT kuin niitä ei käytetä, mutta aukkoja voi syntyä niissä väleissä, jotka on tuotettu syöttötehtävää varten.
Järjestelmän metatietoobjektit
Seuraavat järjestelmän metatietoobjektit ovat saatavilla ja hyödyllisiä identiteettiarvojen suunnittelussa ja työskentelyssä Fabric tietovarasto.
Listaa identiteettisarakkeet sys.identity_columns järjestelmänäkymällä
Käytä sys.identity_columns-kataloginäkymää listataksesi kaikki identiteettisarakkeet varastossa. Seuraava esimerkki listaa kaikki taulukot, jotka sisältävät sarakkeen IDENTITY , mukaan lukien skeeman, taulukon ja identiteettisarakkeen nimet:
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;
Vuonna Fabric tietovarasto seed_valueincrement_value ja paluusarakkeita sys.identity_columnsNULL ja ei päivitetä identiteettisarakkeen luomisen jälkeen. Sarake last_value palaa NULL oletuksena, mutta vaihtuu pysyvästi -1 ensimmäisen identiteetin lisäystoiminnon jälkeen taulukossa.
Lisää arvot IDENTITY_INSERT
Oletuksena et voi lisätä arvoja sarakkeeseen IDENTITY . Kuitenkin saatat joutua lisäämään tiettyjä arvoja datan siirron aikana, katastrofipalautuksen aikana tai sentinel-arvojen täyttämisessä, esimerkiksi -1 "Tuntematon" dimensiotauluissa.
Käytä SET IDENTITY_INSERT salliaksesi tilapäisesti eksplisiittiset lisäykset identiteettisarakkeeseen:
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;
Milloin IDENTITY_INSERT on ON:
- Lauseen mukana tarvitaan sarakkeelista
INSERT. - Kerrallaan voi asettaa vain yksi taulukko per istunto
IDENTITY_INSERTON.
Tärkeää
Kun se on pois päältä IDENTITY_INSERT , uudelleensiemennä identiteettiarvot DBCC CHECKIDENTillä.
Uudelleensiemennä identiteettiarvot DBCC CHECKIDENTillä
Kun syötät eksplisiittisiä arvoja , IDENTITY_INSERTkäytä DBCC CHECKIDENT identiteettisarakkeen uudelleensiementämiseen. Operaatio RESEED skannaa kaikki käytetyt ja varatut identiteettialueet hajautetuissa laskentasolmuissa määrittääkseen oikeat seuraavat arvot, varmistaen ainutlaatuisuuden ja estäen avaintörmäykset.
DBCC CHECKIDENT('dbo.DimProduct', RESEED);
Fabric tietovarasto tukee DBCC CHECKIDENT vain vaihtoehtoaRESEED. Varasto määrittää automaattisesti oikeat seuraavat arvoalueet, eikä et voi määrittää omaa uudelleensiementettyä arvoa. Lisätietoja löytyy DBCC CHECKIDENTistä.
Limitations
Lisätietoja löytyy IDENTITY-sarakkeista, IDENTITY (Transact-SQL) ja Create tables in the Warehouse in the Warehouse in Microsoft Fabric.
- Fabric tietovaraston sarakkeille tuetaan vain bigint-datatyyppiä
IDENTITY. Muut tietotyypit aiheuttavat virheen. - Siemenen ja lisäyksen määrittelyä ei tueta. Järjestelmä hallinnoi arvoja sisäisesti.
- Sarakkeen lisääminen
IDENTITYolemassa olevaan taulukkoon eiALTER TABLEole tuettua. Harkitse CREATE TABLE AS SELECT (CTAS) tai SELECT... INTO luodakseen kopion olemassa olevasta taulukosta ja lisätäkseen sarakkeenIDENTITY. - Rajoituksia on sille, miten
IDENTITYsarakkeet säilyvät, kun luot taulukon valitsemalla toisesta taulusta CTAS:lla taiSELECT...INTO. Lisätietoja löytyy SELECT - INTO -lausekkeen (Transact-SQL) tietotyyppiosiosta. -
DBCC CHECKIDENTTukee vain vaihtoehtoaRESEED. Mukautetun uudelleensiementysarvon määrittäminen tai käyttäminenNORESEEDei ole tuettua. -
IDENTITYSarakkeet tuottavat arvoja, jotka ovat taatusti yksikäsitteisiä, mutta arvot eivät välttämättä ole peräkkäisiä tai järjestettyjä, ja aukkoja voi syntyä.
Esimerkit
V. Luo taulu, jossa on IDENTITY-sarake
CREATE TABLE Employees (
EmployeeID BIGINT IDENTITY,
FirstName VARCHAR(50),
LastName VARCHAR(50)
);
Tämä lause luo taulukon Employees , jossa jokainen uusi rivi saa automaattisesti uniikin EmployeeIDbigint-arvon .
B. Lisää rivejä taulukkoon, jossa on identiteettisarakke
Kun annat arvot jokaiselle ei-identiteettisarakkeelle niiden määritellyssä järjestyksessä, sinun ei tarvitse määrittää sarakelistaa:
INSERT INTO Employees VALUES ('Quarantino', 'Esposito');
Voit myös tarjota sarakkeelistan, joka jättää identiteettisarakkeen pois:
INSERT INTO Employees (FirstName, LastName)
VALUES ('Ensi', 'Vasala');
C. Lisää eksplisiittisiä arvoja 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. Lisää eksplisiittisiä arvoja COPY INTO -toiminnolla
Lause COPY INTO tukee IDENTITY_INSERT mahdollisuutta vastaanottaa eksplisiittisiä arvoja komennossa.
COPY INTOAsetukset ohittavat minkä tahansa sessiotason asetuksen .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. Kylvä taulukko uudelleen eksplisiittisten inserttien jälkeen
DBCC CHECKIDENT('dbo.Employees', RESEED);
F. Luo taulukko CREATE TABLE AS SELECT
Käytä CTAS:ia luodaksesi kopion taulusta ja säilyttääksesi IDENTITY ominaisuuden kohdetaulussa:
CREATE TABLE RetiredEmployees
AS SELECT * FROM Employees;
Kohdetaulukon sarake perii IDENTITY ominaisuuden lähdetaululta. Rajoituksia varten katso SELECT - INTO -lausekkeen tietotyypit.
G. Luo taulukko SELECT... SISÄÄN
Käytä SELECT...INTO taulun kopion luomiseen ja ominaisuuden säilyttämiseen IDENTITY kohdetaulussa:
SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE LastName = 'Esposito';
Kohdetaulukon sarake perii IDENTITY ominaisuuden lähdetaululta. Rajoituksia varten katso SELECT - INTO -lausekkeen tietotyypit.