Fabric Data Warehouse'daki IDENTITY sütunları

Şunlar için geçerlidir:✅ Warehouse in Microsoft Fabric

Fabric Data Warehouse'ta, IDENTITY sütunlar bir tabloya yeni satırlar eklediğinizde otomatik olarak yeni sayısal değerler oluşturur.

Vekil anahtarlar, doğal anahtarlarından bağımsız olarak satırları benzersiz bir şekilde ayırt etmek için veri ambarında kullanılan tanımlayıcılardır. Bu makalede, IDENTITY kullanarak vekil anahtarların nasıl oluşturulacağı ve yönetileceği, ayrıca açıkça belirtilen değerlerin eklenmesi ve yeniden tohumlama işlemleri açıklanmaktadır.

Kimlik sütunu neden kullanılır?

IDENTITY Sütunlar, manuel anahtar atamayı ortadan kaldırır, hata riskini azaltır ve veri alımını kolaylaştırır. Sistem tarafından yönetilen benzersiz değerler vekil anahtarlar ve birincil anahtarlar olarak idealdir. Manuel yaklaşımlara kıyasla, IDENTITY sütunlar daha iyi performans sunar çünkü benzersiz anahtarlar ekstra sorgu mantığı olmadan otomatik olarak üretilir.

IDENTITY veri türü, sütunları için gereklidir ve 9.223.372.036.854.775.807 değerine kadar pozitif tamsayı değerleri depolayabilir. Bu aralık, tablonun kullanım ömrü boyunca her satırın IDENTITY sütununda benzersiz bir değer almasını sağlar.

Diğer veritabanı platformlarından yedek anahtarlarla veri geçirme planı için bkz. IDENTITY sütunlarını Doku Veri Ambarı'na geçirme.

Sözdizimi

Fabric Data Warehouse'de bir IDENTITY sütun tanımlamak için, IDENTITY sütun tanımındaki özelliği kullanın:

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

Kimlik sütununun tablo tanımında ilk sütun olması gerekmez.

KIMLIK sütunları nasıl çalışır?

Fabric Data Warehouse'de özel bir başlangıç değeri veya artış belirtemezsiniz. Sistem, değerleri içsel olarak yöneterek benzersizliği sağlar. IDENTITY sütunlar her zaman pozitif tamsayı değerleri üretir. Her yeni satır yeni bir değer alır ve tablo mevcut olduğu sürece benzersizlik garanti edilir. Bir değer kullanıldıktan sonra, IDENTITY aynı değeri tekrar kullanmaz. IDENTITY sütunun ürettiği değerlerde boşluklar bulunabilir.

Değerleri ayırma

Depo motorunun dağıtık mimarisi nedeniyle, IDENTITY bu özellik vekil değerlerin tahsis sırasını garanti etmez. Bu özellik, yük performansını etkilemeden paralelliği maksimize etmek için hesaplama düğümleri arasında ölçeklenir. Sonuç olarak, farklı içe aktarma görevlerinden gelen değer aralıkları ardışık olmayabilir.

Aşağıdaki örnekte bu davranış gösterilmektedir:

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

Örnek sonuç:

Column1 ve Column2 olarak etiketlenmiş iki sütunlu bir tablonun sorgusunun ekran görüntüsü, sekiz satır veri gösteriyor. Column1 büyük sayısal değerler içerir, Column2 metni içerir.

Bu örnekte Ingestion task A , Ingestion task B bağımsız görevler olarak ardışık olarak çalıştırılır. Görevler ardışık olarak çalışsa da, ilk dört satır ile son dört satırın dbo.Table1.Column1 farklı kimlik anahtar aralıkları vardır. Görev A ile görev B'ye atanan menziller arasında boşluklar da oluşabilir.

IDENTITY Fabric Data Warehouse, IDENTITY_INSERT kullanılmadığı sürece IDENTITY sütunundaki tüm değerlerin benzersiz olmasını garanti eder; ancak bir veri alma görevi için oluşturulan aralıklarda boşluklar oluşabilir.

Sistem meta veri nesneleri

Aşağıdaki sistem meta veri nesneleri, Fabric Data Warehouse'de kimlik değerlerini tasarlarken ve onlarla çalışırken kullanılabilir ve faydalıdır.

Kimlik sütunlarını sys.identity_columns sistem görünümüyle listeleyin

Bir depodaki tüm kimlik sütunlarını listelemek için sys.identity_columns katalog görünümünü kullanın. Aşağıdaki örnek, şema, tablo ve kimlik sütun adları dahil olmak üzere bir IDENTITY sütun içeren tüm tabloları listeler:

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;

Fabric Data Warehouse'ta, sys.identity_columns öğesinin seed_value ve increment_value sütunları NULL döndürür ve kimlik sütunu oluşturulduktan sonra güncellenmez. last_value sütunu varsayılan olarak NULL değerini döndürür, ancak tablodaki ilk identity insert işleminden sonra kalıcı olarak -1 değerine geçer.

Değerleri IDENTITY_INSERT ile ekleyin

Varsayılan olarak, bir IDENTITY sütuna değer ekleyemezsiniz. Ancak, veri taşıma, felaket kurtarma sırasında veya boyut tablolarında "Bilinmeyen" için -1 gibi sentinel değerleri doldururken belirli değerler eklemeniz gerekebilir.

Kimlik sütununa açık eklemelere geçici olarak izin vermek için SET IDENTITY_INSERT kullanın:

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;

IDENTITY_INSERT ON olduğunda:

  • INSERT ifadesiyle birlikte bir sütun listesi gereklidir.
  • Oturum başına, aynı anda yalnızca bir tabloda IDENTITY_INSERT, ON olarak ayarlanabilir.

Önemli

IDENTITY_INSERT kapatıldıktan sonra, DBCC CHECKIDENT ile kimlik değerlerini yeniden başlatın.

Kimlik değerlerini DBCC CHECKIDENT ile yeniden ayarlayın

IDENTITY_INSERT ile açık değerler ekledikten sonra, kimlik sütununu yeniden tohumlamak için DBCC CHECKIDENT kullanın. İşlem, RESEED dağıtık hesaplama düğümleri boyunca kullanılan ve ayrılmış tüm kimlik aralıklarını tarar ve doğru sonraki değerleri belirler; böylece benzersizliği sağlar ve anahtar çarpışmalarını önler.

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

Fabric Data Warehouse'de DBCC CHECKIDENT sadece bu RESEED seçeneği destekler. Depo otomatik olarak doğru sonraki değer aralıklarını belirler ve özel bir yeniden tohumlama değeri belirtemezsiniz. Daha fazla bilgi için bkz. DBCC CHECKIDENT.

Sınırlamalar

Daha fazla bilgi için IDENTITY sütunları, IDENTITY (Transact-SQL) ve Microsoft Fabric'de Depoda tablo oluştur bölümlerine bakınız.

  • Fabric Veri Ambarı'ndaki sütunlar için yalnızca bigint veri türü desteklenir. Diğer veri türleri hata ile sonuçlanır.
  • Başlangıç değeri ve artış değeri tanımlama desteklenmiyor. Sistem değerleri içsel olarak yönetir.
  • IDENTITY bulunan mevcut bir tabloya sütun eklemek desteklenmez. CREATE TABLE AS SELECT (CTAS) veya SELECT... kullanmayı düşünün... INTO ile mevcut bir tablonun bir kopyasını oluşturup bir IDENTITY sütun ekleyin.
  • Bir tabloyu CTAS veya IDENTITY ile başka bir tablodan seçerek oluşturduğunuzda, SELECT...INTO sütunlarının nasıl korunduğu konusunda sınırlamalar vardır. Daha fazla bilgi için SELECT - INTO Maddesi (Transact-SQL) dosyasının Veri tipleri bölümüne bakınız.
  • DBCC CHECKIDENT sadece bu RESEED seçeneği destekliyor. Özel bir yeniden başlatma değeri belirtmek veya NORESEED kullanmak desteklenmez.
  • IDENTITY Sütunlar, benzersiz garanti edilen değerler üretir, ancak değerler mutlaka ardışık veya sıralı değildir ve boşluklar oluşabilir.

Örnekler

A. IDENTITY sütunuyla tablo oluşturma

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

Bu ifade, her yeni satırın otomatik olarak bigint değeri olarak benzersiz EmployeeID bir değer aldığı bir Employees tablo oluşturur.

B. Bir kimlik sütunuyla bir tabloya satır ekleyin

Her kimlik olmayan sütun için değerleri tanımlanmış sırayla sağladığınızda, bir sütun listesi belirtmenize gerek yoktur:

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

Ayrıca, kimlik sütununu çıkaran bir sütun listesi de sağlayabilirsiniz:

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

C. IDENTITY_INSERT ile açık değerler ekleme

SET IDENTITY_INSERT dbo.Employees ON;

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

SET IDENTITY_INSERT dbo.Employees OFF;

D. COPY INTO ile açık değerler ekleyin

Bu ifade COPY INTO , komut içinde açık değerleri alma seçeneğini destekler IDENTITY_INSERT . COPY INTO seçenekleri, IDENTITY_INSERT için oturum düzeyindeki herhangi bir ayarı geçersiz kılar.

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. Açık ekleme işlemlerinden sonra bir tablonun tohum değerini yeniden ayarlama

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

F. CREATE TABLE AS SELECT ile bir tablo oluşturun

Bir tablonun kopyasını oluşturmak ve IDENTITY özelliğini hedef tabloda korumak için CTAS kullanın:

CREATE TABLE RetiredEmployees
AS SELECT * FROM Employees;

Hedef tablodaki sütun, IDENTITY özelliği kaynak tablodan miras alır. Sınırlamalar için SELECT - INTO Maddesi'nin Veri tipleri bölümüne bakınız.

G. SELECT ile bir tablo oluşturun... INTO

Bir tablonun kopyasını oluşturmak ve SELECT...INTO özelliğini hedef tabloda korumak için IDENTITY kullanın:

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

Hedef tablodaki sütun, IDENTITY özelliği kaynak tablodan miras alır. Sınırlamalar için SELECT - INTO Maddesi'nin Veri tipleri bölümüne bakınız.

Sonraki adım