IDENTITY-sarakkeet Fabric tietovarasto

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:

Kuvakaappaus tulosaineistosta taulukosta, jossa on kaksi saraketta nimeltä Column1 ja Column2, ja jossa on kahdeksan riviä dataa. Sarake1 sisältää suuria numeerisia arvoja, sarake 2 sisältää tekstin.

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 IDENTITY olemassa olevaan taulukkoon ei ALTER TABLE ole tuettua. Harkitse CREATE TABLE AS SELECT (CTAS) tai SELECT... INTO luodakseen kopion olemassa olevasta taulukosta ja lisätäkseen sarakkeen IDENTITY .
  • Rajoituksia on sille, miten IDENTITY sarakkeet säilyvät, kun luot taulukon valitsemalla toisesta taulusta CTAS:lla tai SELECT...INTO. Lisätietoja löytyy SELECT - INTO -lausekkeen (Transact-SQL) tietotyyppiosiosta.
  • DBCC CHECKIDENT Tukee vain vaihtoehtoa RESEED . Mukautetun uudelleensiementysarvon määrittäminen tai käyttäminen NORESEED ei ole tuettua.
  • IDENTITY Sarakkeet 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.

Seuraava vaihe