IDENTITY-Spalten in Fabric Data Warehouse

Gilt für:✅ Warehouse in Microsoft Fabric

In Fabric Data Warehouse erzeugen Spalten automatisch neue Zahlenwerte, IDENTITY wenn man neue Zeilen in eine Tabelle einfügt.

Ersatzschlüssel sind Bezeichner, die in Data Warehouse verwendet werden, um Zeilen unabhängig von ihren natürlichen Schlüsseln eindeutig zu unterscheiden. Dieser Artikel erklärt, wie Surrogatschlüssel mit IDENTITY erstellt und verwaltet werden, einschließlich des Einfügens expliziter Werte und des Zurücksetzens.

Warum eine IDENTITY-Spalte verwenden?

IDENTITY Spalten verhindern die manuelle Tastenzuweisung, verringern das Fehlerrisiko und vereinfachen die Datenerfassung. Vom System verwaltete eindeutige Werte sind ideal als Ersatzschlüssel und Primärschlüssel. Im Vergleich zu manuellen Ansätzen bieten Spalten eine bessere Leistung, IDENTITY da eindeutige Schlüssel automatisch ohne zusätzliche Abfrage-Logik generiert werden.

Der Biggint-Datentyp , der für IDENTITY Spalten erforderlich ist, kann bis zu 9.223.372.036.854.775.807 positive ganzzahlige Werte speichern. Dieser Bereich stellt sicher, dass jede Zeile während der gesamten Lebensdauer der Tabelle einen eindeutigen Wert in ihrer IDENTITY Spalte erhält.

Einen Plan zum Migrieren von Daten mit Ersatzschlüsseln von anderen Datenbankplattformen finden Sie unter Migrieren von IDENTITY-Spalten zu Fabric Data Warehouse.

Syntax

Um eine IDENTITY Spalte in Fabric Data Warehouse zu definieren, verwenden Sie die Eigenschaft IDENTITY in der Spaltendefinition:

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

Die Identitätsspalte muss nicht die erste Spalte in der Tabellendefinition sein.

Funktionsweise von IDENTITY-Spalten

In Fabric Data Warehouse kann man keinen benutzerdefinierten Startwert oder -steigerung festlegen. Das System verwaltet Werte intern, um Einzigartigkeit zu gewährleisten. IDENTITY Spalten erzeugen immer positive ganzzahlige Werte. Jede neue Zeile erhält einen neuen Wert, und die Eindeutigkeit wird garantiert, solange die Tabelle vorhanden ist. Sobald ein Wert verwendet wurde, verwendet IDENTITY denselben Wert nicht erneut. Lücken können in den Werten auftreten, die die Spalte IDENTITY erzeugt.

Zuordnung von Werten

Aufgrund der verteilten Architektur der Warehouse-Engine garantiert die IDENTITY Eigenschaft nicht die Reihenfolge, in der Surrogatwerte zugeteilt werden. Die Eigenschaft lässt sich über mehrere Rechenknoten horizontal skalieren, um die Parallelität zu maximieren, ohne die Leistung beim Laden zu beeinträchtigen. Daher sind die Wertschwankungen verschiedener Aufnahmeaufgaben möglicherweise nicht sequenziell.

Dieses Verhalten wird im folgenden Beispiel veranschaulicht:

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

Beispielergebnis:

Screenshot der Ergebnismenge einer Abfrage einer Tabelle mit zwei Spalten, die mit Spalte1 und Spalte2 beschriftet sind, zeigt acht Datenzeilen. Spalte 1 enthält große Zahlenwerte, Spalte 2 enthält den Text.

In diesem Beispiel Ingestion task A und Ingestion task B werden sequentiell als unabhängige Aufgaben ausgeführt. Obwohl die Aufgaben nacheinander ausgeführt werden, haben die erste und die letzten vier Zeilen unterschiedliche Identitätsschlüsselbereiche in dbo.Table1.Column1. Es können auch Lücken zwischen den Bereichen der Aufgabe A und Aufgabe B auftreten.

IDENTITY In Fabric Data Warehouse garantiert, dass alle Werte in einer IDENTITY-Spalte eindeutig sind, solange IDENTITY_INSERT nicht verwendet wird, aber es können Lücken in den für eine Erfassungsaufgabe erzeugten Wertebereichen auftreten.

Systemmetadatenobjekte

Die folgenden Systemmetadatenobjekte sind verfügbar und nützlich beim Entwerfen und Arbeiten mit Identitätswerten in Fabric Data Warehouse.

IDENTITY-Spalten mit der Systemansicht sys.identity_columns auflisten

Verwenden Sie die sys.identity_columns Katalogansicht, um alle Identitätsspalten in einem Lager aufzulisten. Das folgende Beispiel listet alle Tabellen auf, die eine Spalte IDENTITY enthalten, einschließlich der Schema-, Tabellen- und Identitäts-Spaltennamen:

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 geben die Spalten seed_value und increment_value von sys.identity_columnsNULL zurück und werden nach dem Erstellen der Identitätsspalte nicht aktualisiert. Die Spalte last_value liefert standardmäßig NULL, wechselt jedoch nach dem ersten IDENTITY_INSERT-Vorgang für die Tabelle dauerhaft zu -1.

Werte mit IDENTITY_INSERT einfügen

Standardmäßig kann man keine Werte in eine Spalte IDENTITY einfügen. Allerdings müssen Sie möglicherweise bestimmte Werte während der Datenmigration, der Notfallwiederherstellung oder beim Ausfüllen von Sentinel-Werten einfügen, zum Beispiel -1 bei "Unbekannt" in Dimensionstabellen.

Verwenden Sie SET IDENTITY_INSERT, um vorübergehend explizite Einfügevorgänge in eine IDENTITY-Spalte zuzulassen:

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;

Wenn IDENTITY_INSERTON ist:

  • Eine Spaltenliste ist mit der INSERT Aussage erforderlich.
  • Pro Sitzung kann jeweils nur für eine Tabelle ON auf IDENTITY_INSERT festgelegt werden.

Von Bedeutung

Nach dem Deaktivieren von IDENTITY_INSERTdie Identitätswerte mit DBCC CHECKIDENT neu setzen.

IDENTITY-Werte mit DBCC CHECKIDENT neu setzen

Nachdem du explizite Werte mit IDENTITY_INSERTeingefügt hast, verwende DBCC CHECKIDENT , um die Identitätsspalte neu einzusetzen. Die Operation RESEED scannt alle verwendeten und reservierten Identitätsbereiche über verteilte Rechenknoten, um die korrekten nächsten Werte zu bestimmen, wodurch Eindeutigkeit sichergestellt und Schlüsselkollisionen verhindert werden.

DBCC CHECKIDENT('dbo.DimProduct', RESEED);

In Fabric Data Warehouse unterstützt nur DBCC CHECKIDENT die OptionRESEED. Das Warehouse bestimmt automatisch die richtigen nächsten Wertebereiche, und Sie können keinen benutzerdefinierten Neuinitialisierungswert angeben. Weitere Informationen finden Sie unter DBCC CHECKIDENT.

Einschränkungen

Weitere Informationen finden Sie unter IDENTITY-Spalten, IDENTITY (Transact-SQL) und Create tables in the Warehouse in Microsoft Fabric.

  • Nur der Bigint-Datentyp wird für IDENTITY Spalten in Fabric Data Warehouse unterstützt. Andere Datentypen führen zu einem Fehler.
  • Das Definieren eines Startwerts und eines Inkrements wird nicht unterstützt. Das System verwaltet Werte intern.
  • Das Hinzufügen einer Spalte IDENTITY zu einer vorhandenen Tabelle mit ALTER TABLE wird nicht unterstützt. Erwägen Sie, CREATE TABLE AS SELECT (CTAS) oder SELECT... INTO zu erstellen, um eine Kopie einer bestehenden Tabelle zu erstellen und eine Spalte IDENTITY hinzuzufügen.
  • Einschränkungen gelten dafür, wie IDENTITY Spalten erhalten bleiben, wenn man eine Tabelle erstellt, indem man aus einer anderen Tabelle mit CTAS oder SELECT...INTOwählt. Weitere Informationen finden Sie im Abschnitt Datentypen in SELECT - INTO Klausel (Transact-SQL).
  • DBCC CHECKIDENT Unterstützt nur die Option RESEED . Die Angabe eines benutzerdefinierten Reseed-Werts oder die Verwendung von NORESEED wird nicht unterstützt.
  • IDENTITY Spalten erzeugen Werte, die garantiert eindeutig sind, aber die Werte sind nicht unbedingt sequenziell oder geordnet, und es können Lücken auftreten.

Examples

A. Erstellen einer Tabelle mit einer IDENTITY-Spalte

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

Diese Anweisung erstellt eine Employees-Tabelle, in der jede neue Zeile automatisch eine eindeutige EmployeeID als bigint-Wert erhält.

B. Fügen Sie Zeilen mit einer Identitätsspalte in eine Tabelle ein

Wenn Sie für jede Nicht-Identitäts-Spalte in ihrer definierten Reihenfolge Werte angeben, müssen Sie keine Spaltenliste angeben:

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

Sie können auch eine Spaltenliste bereitstellen, die die Identitätsspalte weglässt:

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

C. Fügen Sie explizite Werte mit IDENTITY_INSERT ein

SET IDENTITY_INSERT dbo.Employees ON;

INSERT INTO dbo.Employees (EmployeeID, FirstName, LastName)
VALUES (100, 'Sentinel', 'Row');

SET IDENTITY_INSERT dbo.Employees OFF;

D. Fügen Sie explizite Werte mit COPY INTO ein

Die Anweisung COPY INTO unterstützt die Option IDENTITY_INSERT, explizite Werte im Befehl aufzunehmen. COPY INTO Optionen überschreiben jede Session-Level-Einstellung für 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. Den Startwert einer Tabelle nach expliziten Einfügungen zurücksetzen

DBCC CHECKIDENT('dbo.Employees', RESEED);

F. Erstelle eine Tabelle mit CREATE TABLE AS SELECT

Verwenden Sie CTAS, um eine Kopie einer Tabelle zu erstellen und die IDENTITY Eigenschaft in der Zieltabelle zu speichern:

CREATE TABLE RetiredEmployees
AS SELECT * FROM Employees;

Die Spalte in der Zieltabelle erbt die IDENTITY Eigenschaft von der Quelltabelle. Für Einschränkungen siehe den Abschnitt Datentypen in SELECT - INTO Klausel.

G. Erstelle eine Tabelle mit SELECT... INTO

Verwenden Sie SELECT...INTO, um eine Tabelle zu kopieren und die IDENTITY-Eigenschaft in der Zieltabelle beizubehalten:

SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE LastName = 'Esposito';

Die Spalte in der Zieltabelle erbt die IDENTITY Eigenschaft von der Quelltabelle. Für Einschränkungen siehe den Abschnitt Datentypen in SELECT - INTO Klausel.

Nächster Schritt