KIMLIK sütunları (Önizleme)

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

Önemli

Bu özellik önizleme aşamasındadır.

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. Fabric Veri Ambarı'nda sütunlar, IDENTITY tabloya yeni satır eklerken bu vekil anahtarların otomatik olarak oluşturulmasını sağlar. Bu makalede, Fabric Veri Ambarı'ndaki IDENTITY sütunları kullanarak yedek anahtarların nasıl verimli bir şekilde oluşturulup yönetileceği açıklanmaktadır.

Kimlik sütunu neden kullanılır?

IDENTITY sütunlar el ile anahtar atama gereksinimini ortadan kaldırarak hata riskini azaltır ve veri alımını basitleştirir. Sistem tarafından yönetilen benzersiz değerler vekil anahtarlar ve birincil anahtarlar olarak idealdir. Vekil anahtar üretmeye yönelik el ile yapılan yaklaşımlarla karşılaştırıldığında, IDENTITY benzersiz anahtarlar sorgularda ek mantık olmadan otomatik olarak oluşturulduğundan sütunlar üstün performans sunar.

Bigint veri türü, IDENTITY sütunları için gereklidir ve 9.223.372.036.854.775.807 pozitif tamsayı değerini depolayarak tablonun ö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

Kumaş Veri Ambarı'nda bir IDENTITY sütun tanımlamak için IDENTITY özelliği istenen sütunla kullanılır. Söz dizimi aşağıdaki gibidir:

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

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

Doku Veri Ambarı'nın içinde özel bir başlangıç değeri veya artış belirtemezsiniz; sistem, benzersizliği sağlamak için değerleri dahili olarak yönetir. 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ığında, IDENTITY aynı değeri bir daha kullanmaz ve hem anahtar bütünlüğünü hem de benzersizliğini korur. Sütunun IDENTITY ürettiği değerlerde boşluklar görünebilir.

Değerleri ayırma

Ambar motorunun dağıtılmış mimarisinden dolayı IDENTITY özelliği, temsilci değerlerin ayrılma sırasını garantilemez. IDENTITY özelliği, yük performansını etkilemeden paralelliği en üst düzeye çıkarmak için işlem düğümleri arasında ölçeği genişletecek şekilde tasarlanmıştır. Sonuç olarak, farklı alma görevlerindeki değer aralıkları farklı sıra aralıklarına sahip olabilir.

Bu davranışı göstermek için aşağıdaki örneği göz önünde bulundurun:

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

Örnek sonuç:

Sekiz veri satırını gösteren C1 ve C2 etiketli iki sütunlu bir tablo. C1 sütunu büyük sayısal değerler içerir. C2 sütunu metni içerir.

Bu örnekte Ingestion task A ve Ingestion task B, bağımsız görevler olarak sıralı şekilde yürütülür. Görevler ardışık olarak çalıştırılasa da, ilk ve son dört satır içinde dbo.T1.C1farklı kimlik anahtarı aralıklarına sahiptir. Buna ek olarak, bu örnekte de gözlemlendiği gibi, A görevi ve B görevi için atanan aralıklar arasında boşluklar oluşabilir.

IDENTITY Doku Veri Ambarı'nda bir IDENTITY sütundaki tüm değerlerin benzersiz olmasını garanti eder, ancak belirli bir alma görevi için üretilen aralıklarda boşluklar olabilir.

Sistem görünümleri

sys.identity_columns katalog görünümü, bir ambardaki tüm kimlik sütunlarını listelemek için kullanılabilir. Aşağıdaki örnekte, tanımlarında ilgili şema adı ve bu tablodaki sütunun IDENTITY adıyla birlikte bir IDENTITY sütun içeren tüm tablolar listelenmiştir:

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;

Sınırlamalar

  • Fabric Veri Ambarı'ndaki sütunlar için yalnızca bigint veri türü desteklenir. Diğer veri türlerini kullanmaya çalışmak hataya neden olur.
  • IDENTITY_INSERT Fabric Veri Ambarı'nda desteklenmez. Kullanıcılar Doku Veri Ambarı'ndaki kimlik sütunlarına sütun değerlerini güncelleştiremez veya el ile ekleyemez.
  • seed ve increment tanımlamak desteklenmez. Sonuç olarak, IDENTITY sütununun yeniden belirlenmesi desteklenmez.
  • ile IDENTITY var olan bir tabloya yeni ALTER TABLE sütun ekleme desteklenmez. Mevcut bir tablonun tanımına sütun ekleyen bir kopyasını oluşturmak için CREATE TABLE AS SELECT (CTAS) veya SELECT... INTO kullanmayı alternatifler olarak düşünün.
  • Yeni bir tablo oluşturulurken, IDENTITY sütunlarının CREATE TABLE AS SELECT (CTAS) veya SELECT... INTO ile farklı bir tablodan seçilmesi sonucunda nasıl korunacağına dair bazı sınırlamalar geçerlidir. Daha fazla bilgi için SELECT - INTO Yan Tümcesi 'nin Veri Türleri bölümüne (Transact-SQL) bakın.

Ö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 benzersiz bir EmployeeIDbigint değeri aldığı bir Employees tablosu oluşturur.

B. Kimlik sütunu olan bir tabloya INSERT

İlk sütun bir IDENTITY sütun olduğunda, sütun listesinde belirtmeniz gerekmez.

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

Hedef tablonun tüm sütunları için değerler sağlanmışsa (kimlik sütunu hariç) sütun adlarını yaymak da mümkündür:

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

C. CREATE TABLE AS SELECT (CTAS) kullanarak IDENTITY sütunuyla yeni bir tablo oluşturma

Basit bir tabloyu örnek olarak ele alalım:

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

Bu tablonun bir kopyasını oluşturmak için CREATE TABLE AS SELECT (CTAS) kullanabiliriz, ve özelliği hedef tabloda kalıcı hale getirmek için IDENTITY:

CREATE TABLE RetiredEmployees
AS SELECT * FROM Employees

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

D. SELECT... INTO ifadesini kullanarak bir IDENTITY sütunu içeren yeni bir tablo oluşturun

Basit bir tabloyu örnek olarak ele alalım:

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

Bu tabloda, SELECT... INTO kullanarak bir kopya oluşturabilir ve IDENTITY özelliğini hedef tabloda koruyabiliriz.

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

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