Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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ç:
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:
-
INSERTifadesiyle birlikte bir sütun listesi gereklidir. - Oturum başına, aynı anda yalnızca bir tabloda
IDENTITY_INSERT,ONolarak 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.
-
IDENTITYbulunan 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 birIDENTITYsütun ekleyin. - Bir tabloyu CTAS veya
IDENTITYile başka bir tablodan seçerek oluşturduğunuzda,SELECT...INTOsü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 CHECKIDENTsadece buRESEEDseçeneği destekliyor. Özel bir yeniden başlatma değeri belirtmek veyaNORESEEDkullanmak desteklenmez. -
IDENTITYSü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.