Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:✅ Magazyn w systemie Microsoft Fabric
W Fabric Data Warehouse IDENTITY kolumny automatycznie generują nowe wartości liczbowe podczas wstawiania nowych wierszy do tabeli.
Klucze zastępcze to identyfikatory używane w magazynowaniu danych w celu unikatowego odróżnienia wierszy niezależnie od ich kluczy naturalnych. Ten artykuł wyjaśnia, jak tworzyć i zarządzać kluczami zastępczymi za pomocą IDENTITY, w tym wstawianie wartości jawnych i ponowne seedowanie.
Dlaczego warto używać kolumny IDENTITY?
IDENTITY Kolumny eliminują ręczne przypisywanie kluczy, zmniejszając ryzyko błędów i upraszczając pobieranie danych. Unikatowe wartości zarządzane przez system są idealne jako klucze zastępcze i klucze podstawowe. W porównaniu z podejściami manualnymi, kolumny oferują lepszą wydajność, IDENTITY ponieważ unikalne klucze są generowane automatycznie bez dodatkowej logiki zapytań.
Typ danych bigint , wymagany dla IDENTITY kolumn, może przechowywać do 9 223 372 036 854 775 807 dodatnich wartości całkowitoliczbowych. Ten zakres zapewnia, że każdy wiersz otrzymuje unikalną wartość w swojej IDENTITY kolumnie przez cały czas trwania tabeli.
Aby zapoznać się z planem migracji danych przy użyciu kluczy zastępczych z innych platform baz danych, zobacz Migrowanie kolumn IDENTITY do Fabric Data Warehouse.
Składnia
Aby zdefiniować kolumnę IDENTITY w usłudze Fabric Data Warehouse, użyj właściwości IDENTITY w definicji kolumny:
CREATE TABLE { warehouse_name.schema_name.table_name | schema_name.table_name | table_name } (
[ column_name ] BIGINT IDENTITY ,
[ ,...n ]
-- Other columns here
);
Kolumna tożsamości nie musi być pierwszą kolumną w definicji tabeli.
Jak działają kolumny IDENTITY
W Fabric Data Warehouse nie możesz określić niestandardowej wartości początkowej ani przyrostu. System zarządza wartościami wewnętrznie, aby zapewnić unikalność.
IDENTITY kolumny zawsze generują dodatnie wartości całkowite. Każdy nowy wiersz otrzymuje nową wartość, a unikatowość jest gwarantowana tak długo, jak tabela istnieje. Gdy wartość zostanie użyta, IDENTITY nie używa ponownie tej samej wartości. Luki mogą pojawić się w wartościach generowanych przez kolumnę IDENTITY .
Alokacja wartości
Ze względu na rozproszoną architekturę silnika magazynu danych właściwość IDENTITY nie gwarantuje kolejności przydzielania wartości surogatowych. Własność skaluje się pomiędzy węzłami obliczeniowymi, maksymalizując równoległość bez wpływu na wydajność obciążenia. W rezultacie zakres wartości z różnych zadań pobierania może nie być sekwencyjny.
Poniższy przykład ilustruje to zachowanie:
-- 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;
Przykładowy wynik:
W tym przykładzie Ingestion task A i Ingestion task B są uruchamiane sekwencyjnie jako niezależne zadania. Chociaż zadania wykonują się kolejno, pierwszy i ostatni cztery wiersze mają różne zakresy kluczy tożsamości w dbo.Table1.Column1. Mogą również wystąpić przerwy między zakresami przypisanymi do zadania A i zadania B.
IDENTITY w Fabric Data Warehouse gwarantuje, że wszystkie wartości w kolumnie IDENTITY są unikalne, o ile nie jest używane IDENTITY_INSERT, ale mogą wystąpić luki w zakresach generowanych podczas zadania pozyskiwania danych.
Obiekty metadanych systemu
Następujące obiekty metadanych systemowych są dostępne i przydatne przy projektowaniu i pracy z wartościami tożsamości w Fabric Data Warehouse.
Wyświetlanie kolumn tożsamości za pomocą widoku systemowego sys.identity_columns
Użyj widoku katalogu sys.identity_columns , aby wyświetlić wszystkie kolumny tożsamości w magazynie. Poniższy przykład przedstawia wszystkie tabele zawierające kolumnę IDENTITY, w tym nazwy schematu, tabeli i kolumny tożsamości:
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;
W usłudze Fabric Data Warehouse kolumny seed_value i sys.identity_columns tabeli increment_value zwracają wartość NULL i nie są aktualizowane po utworzeniu kolumny IDENTITY. Kolumna last_value domyślnie zwraca NULL, ale po pierwszej operacji IDENTITY_INSERT w tabeli na stałe przełącza się na -1.
Wstawianie wartości przy użyciu IDENTITY_INSERT
Domyślnie nie można wstawiać wartości do kolumny IDENTITY . Jednak może być konieczne wprowadzenie konkretnych wartości podczas migracji danych, odzyskiwania po awarii lub przy wypełnianiu wartości sentinelowych, na przykład -1 dla "Nieznane" w tabelach wymiarowych.
Użyj SET IDENTITY_INSERT, aby tymczasowo zezwolić na jawne wstawianie wartości do kolumny identyfikatora:
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;
Gdy IDENTITY_INSERT ma wartość ON:
- Wymagana jest lista kolumn wraz z wyznaczeniem
INSERT. - W ramach jednej sesji tylko jedna tabela może mieć ustawione
IDENTITY_INSERTnaONjednocześnie.
Ważne
Po wyłączeniu IDENTITY_INSERT ponownie zasiewaj wartości tożsamości za pomocą DBCC CHECKIDENT.
Zresetuj wartości tożsamości za pomocą DBCC CHECKIDENT
Po wstawieniu jawnych wartości za pomocą IDENTITY_INSERT użyj DBCC CHECKIDENT, aby ponownie ustawić wartość początkową kolumny identity. Operacja RESEED skanuje wszystkie używane i zarezerwowane zakresy tożsamości w rozproszonych węzłach obliczeniowych, aby określić poprawne kolejne wartości, zapewniając unikalność i zapobiegając kolizjom kluczy.
DBCC CHECKIDENT('dbo.DimProduct', RESEED);
W usłudze Fabric Data Warehouse element DBCC CHECKIDENT obsługuje tylko opcję RESEED. Magazyn automatycznie ustala poprawne zakresy kolejnych wartości i nie możesz określić niestandardowej wartości ponownego seedu. Aby uzyskać więcej informacji, zobacz DBCC CHECKIDENT.
Ograniczenia
Więcej informacji można znaleźć w kolumnach IDENTITY, IDENTITY (Transact-SQL) oraz Create tables in the Warehouse in Microsoft Fabric.
- Tylko typ danych bigint jest obsługiwany w przypadku
IDENTITYkolumn w magazynie danych Fabric. Inne typy danych powodują błąd. - Definiowanie wartości początkowej i kroku nie jest obsługiwane. System zarządza wartościami wewnętrznie.
- Dodawanie kolumny
IDENTITYdo istniejącej tabeli zALTER TABLEnie jest obsługiwane. Rozważ użycie CREATE TABLE AS SELECT (CTAS) lub SELECT... INTO do utworzenia kopii istniejącej tabeli i dodania kolumnyIDENTITY. - Istnieją ograniczenia dotyczące sposobu zachowania kolumn
IDENTITY, gdy tworzysz tabelę na podstawie danych z innej tabeli za pomocą CTAS lubSELECT...INTO. Więcej informacji można znaleźć w sekcji Typy danych w klauzuli SELECT - INTO (Transact-SQL). -
DBCC CHECKIDENTobsługuje tylko opcjęRESEED. Określanie niestandardowej wartości reseed lub używanieNORESEEDnie jest obsługiwane. -
IDENTITYKolumny generują wartości gwarantowane jako unikalne, ale wartości te niekoniecznie są sekwencyjne czy uporządkowane, a luki mogą występować.
Przykłady
A. Tworzenie tabeli z kolumną IDENTITY
CREATE TABLE Employees (
EmployeeID BIGINT IDENTITY,
FirstName VARCHAR(50),
LastName VARCHAR(50)
);
To stwierdzenie tworzy tabelę Employees , w której każdy nowy wiersz automatycznie otrzymuje unikalną EmployeeID wartość jako bigint .
B. Wstaw wiersze do tabeli za pomocą kolumny tożsamości
Gdy podajesz wartości dla każdej kolumny nieidentycznej w ich zdefiniowanej kolejności, nie musisz określać listy kolumn:
INSERT INTO Employees VALUES ('Quarantino', 'Esposito');
Możesz także podać listę kolumn, która pomija kolumnę tożsamości:
INSERT INTO Employees (FirstName, LastName)
VALUES ('Ensi', 'Vasala');
C. Wstawianie wartości jawnych przy użyciu 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. Wstaw wartości jawne za pomocą COPY INTO
Instrukcja COPY INTO obsługuje opcję IDENTITY_INSERT, która umożliwia przyjmowanie jawnych wartości w instrukcji.
COPY INTO Opcje zastępują wszelkie ustawienia sesji dla 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. Resetowanie tabeli po jawnych operacjach wstawiania
DBCC CHECKIDENT('dbo.Employees', RESEED);
F. Stwórz tabelę za pomocą CREATE TABLE AS SELECT
Użyj CTAS, aby utworzyć kopię tabeli i zachować tę właściwość IDENTITY w docelowej tabeli:
CREATE TABLE RetiredEmployees
AS SELECT * FROM Employees;
Kolumna w tabeli docelowej dziedziczy IDENTITY właściwość z tabeli źródłowej. W przypadku ograniczeń zobacz sekcję typów danych w klauzuli SELECT - INTO.
G. Utwórz tabelę za pomocą SELECT...INTO
Użyj SELECT...INTO, aby utworzyć kopię tabeli i zachować właściwość IDENTITY w tabeli docelowej:
SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE LastName = 'Esposito';
Kolumna w tabeli docelowej dziedziczy właściwość IDENTITY z tabeli źródłowej. W przypadku ograniczeń zobacz sekcję typów danych w klauzuli SELECT - INTO.