Del via


IDENTITY-kolonner

Gælder for:✅ Warehouse i Microsoft Fabric

Surrogatnøgler er identifikatorer, der bruges i datalager til unikt at skelne rækker, uafhængigt af deres naturlige nøgler. I Fabric Data Warehouse muliggør kolonner automatisk generering af disse surrogatnøgler, IDENTITY når nye rækker indsættes i en tabel. Denne artikel forklarer, hvordan man bruger IDENTITY kolonner i Fabric Data Warehouse til effektivt at oprette og administrere surrogatnøgler.

Hvorfor bruge en IDENTITET-kolonne?

IDENTITY Kolonner eliminerer behovet for manuel nøglefordeling, hvilket reducerer risikoen for fejl og forenkler dataindlæsningen. Systemadministrerede unikke værdier er ideelle som surrogatnøgler og primærnøgler. Sammenlignet med manuelle tilgange til at producere surrogatnøgler tilbyder kolonner overlegen ydeevne, IDENTITY da unikke nøgler genereres automatisk uden ekstra logik på forespørgsler.

Biggint-datatypen, som kræves for IDENTITY kolonner, kan gemme op til 9.223.372.036.854.775.807 positive heltalsværdier, hvilket sikrer, at hver række i en tabels levetid modtager en unik værdi i sin IDENTITY kolonne.

For en plan om at migrere data med surrogatnøgler fra andre databaseplatforme, se Migrate IDENTITY-kolonner til Fabric Data Warehouse.

Syntaks

For at definere en IDENTITY kolonne i Fabric Data Warehouse bruges egenskaben IDENTITY sammen med den ønskede kolonne. Syntaksen er som følger:

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

Hvordan IDENTITY-kolonner fungerer

Inden for Fabric Data Warehouse kan du ikke angive en brugerdefineret startværdi eller inkrement; Systemet administrerer værdierne internt for at sikre unikhed. IDENTITY kolonner producerer altid positive heltalsværdier. Hver ny række modtager en ny værdi, og entydighed er garanteret, så længe tabellen eksisterer. Når en værdi er brugt, IDENTITY bruges den ikke den samme værdi igen, hvilket bevarer både nøgleintegritet og entykhed. Huller kan opstå på værdier, som kolonnen IDENTITY producerer.

Fordeling af værdier

På grund af warehouse-motorens distribuerede arkitektur garanterer egenskaben IDENTITY ikke rækkefølgen, hvori surrogatværdierne allokeres. Egenskaben IDENTITY er designet til at skalere ud på tværs af beregningsnoder for at maksimere parallelisme, uden at påvirke belastningsydelsen. Som følge heraf kan værdiintervaller på forskellige indtagelsesopgaver have forskellige sekvensintervaller.

For at illustrere denne adfærd, overvej følgende eksempel:

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

Eksempelresultat:

En tabel med to kolonner mærket C1 og C2, der viser otte rækker med data. Kolonne C1 indeholder store numeriske værdier. Kolonne C2 indeholder teksten.

I dette eksempel Ingestion task A udføres og Ingestion task B sekventielt som uafhængige opgaver. Selvom opgaverne kørte i løbet af hinanden, har den første og de sidste fire rækker forskellige identitetsnøgleintervaller i dbo.T1.C1. Derudover kan derudover, som observeret i dette eksempel, opstå huller mellem de intervaller, der er tildelt opgave A og opgave B.

IDENTITY i Fabric Data Warehouse garanteres, at alle værdier i en IDENTITY kolonne er unikke, men der kan være huller i de intervaller, der produceres for en given indlæsningsopgave.

Systemvisninger

sys.identity_columns katalogvisning kan bruges til at liste alle identitetskolonner på et lager. Følgende eksempel viser alle tabeller, der indeholder en IDENTITY kolonne i deres definition, med deres respektive skemanavn og navnet på kolonnen IDENTITY i den 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;

Limitations

  • Kun bigint-datatypen understøttes for IDENTITY kolonner i Fabric Data Warehouse. Forsøg på at bruge andre datatyper resulterer i en fejl.
  • IDENTITY_INSERT understøttes ikke i Fabric Data Warehouse. Brugere kan ikke opdatere eller manuelt indsætte kolonneværdier på identitetskolonner i Fabric Data Warehouse.
  • At definere a seed og increment understøttes ikke. Som følge heraf understøttes det ikke at genseede kolonnen IDENTITY .
  • At tilføje en ny IDENTITY kolonne til en eksisterende tabel med ALTER TABLE understøttes ikke. Overvej at bruge CREATE TABLE AS SELECT (CTAS) eller SELECT... INTO som alternativer til at oprette en kopi af en eksisterende tabel, der tilføjer en IDENTITY kolonne til sin definition.
  • Nogle begrænsninger gælder, hvordan IDENTITY kolonner bevares, når en ny tabel oprettes som følge af et udvælgelse fra en anden tabel med CREATE TABLE AS SELECT (CTAS) eller SELECT... INTO. For mere information, se afsnittet Data Types i SELECT - INTO Clause (Transact-SQL).

Eksempler

A. Opret en tabel med en IDENTITY-kolonne

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

Denne sætning opretter en Employees-tabel, hvor hver ny række automatisk modtager en unik EmployeeID værdi som bigint .

B. INSERT på en tabel med en identitetskolonne

Når den første kolonne er en IDENTITY kolonne, behøver du ikke angive den i kolonnelisten.

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

Det er også muligt at udsende kolonnenavnene, hvis værdier er angivet for alle kolonner i destinationstabellen (undtagen identitetskolonnen):

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

C. Opret en ny tabel med en IDENTITY-kolonne ved hjælp af CREATE TABLE AS SELECT (CTAS)

Betragter vi en simpel tabel som eksempel:

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

Vi kan bruge CREATE TABLE AS SELECT (CTAS) til at oprette en kopi af denne tabel og bevare egenskaben IDENTITY i måltabellen:

CREATE TABLE RetiredEmployees
AS SELECT * FROM Employees

Kolonnen i måltabellen arver egenskaben IDENTITY fra kildetabellen. For en liste over begrænsninger, der gælder for dette scenarie, henvises til afsnittet Data Types i SELECT - INTO Clause.

D. Opret en ny tabel med en IDENTITY-kolonne ved hjælp af SELECT... I

Betragter vi en simpel tabel som eksempel:

CREATE TABLE dbo.Employees (
    EmployeeID BIGINT IDENTITY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Retired BIT
);

Vi kan bruge SELECT... INTO til at oprette en kopi af denne tabel og bevare egenskaben IDENTITY i måltabellen:

SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE Retired = 1;

Kolonnen i måltabellen arver egenskaben IDENTITY fra kildetabellen. For en liste over begrænsninger, der gælder for dette scenarie, henvises til afsnittet Data Types i SELECT - INTO Clause.