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.
Azure Databricks standart SQL kısıtlama yönetimi yan tümcelerini destekler:
- Uygulanan kısıtlamalar tabloya satır eklemeden önce veri bütünlüğünü doğrular.
- Bilgilendirme kısıtlamaları (birincil anahtar, yabancı anahtar ve benzersiz kısıtlamalar), tablolardaki alanlar arasındaki ilişkileri tanımlar ve uygulanmaz.
Azure Databricks'te tüm kısıtlamalar Delta Lake gerektirir.
Lakeflow işlem hatlarında ilgili bir kavram için bkz. İşlem hattı beklentileriyle veri kalitesini yönetme.
Zorunlu kısıtlamalar
Bir kısıtlama ihlal edildiğinde işlem bir hatayla başarısız olur. Azure Databricks iki tür kısıtlamayı destekler:
-
NOT NULL: belirli sütunlardaki değerlerin null olamayacağını gösterir. -
CHECK: belirtilen boole ifadesinin her giriş satırı için true olması gerektiğini gösterir.
Note
Geçerli yazıcı sürümü 3'ten küçükse, kısıtlama eklendiğinde tablo yazıcı protokolü yükseltilir. Bu, dış Delta Lake istemcileriyle uyumluluğu etkileyebilir. Bkz . Delta Lake özellik uyumluluğu ve protokolleri.
NOT NULL kısıtlama
Tablo oluşturduğunuzda, şemada kısıtlamaları belirtin NOT NULL . Oluşturduktan sonra NOT NULL kısıtlamalarını eklemek veya kaldırmak için ALTER TABLE ... ALTER COLUMN komutunu kullanın. Aşağıdaki örnek, bu bölümün geri kalanının tekrar kullandığı bir people_demo tablo oluşturur:
CREATE OR REPLACE TABLE main.default.people_demo (
id INT NOT NULL,
firstName STRING,
middleName STRING NOT NULL,
lastName STRING,
gender STRING,
birthDate TIMESTAMP,
ssn STRING,
salary INT
);
ALTER TABLE main.default.people_demo ALTER COLUMN middleName DROP NOT NULL;
ALTER TABLE main.default.people_demo ALTER COLUMN ssn SET NOT NULL;
Azure Databricks, bir tabloya NOT NULL kısıtlaması eklemeden önce var olan tüm satırların kısıtlamayı karşılayıp karşılamadığını doğrular.
Yapı içinde iç içe yerleştirilmiş bir sütunda NOT NULL kısıtlaması belirtirseniz, üst yapı da null olmamalıdır. Dizi veya eşleme türleri içinde iç içe yerleştirilmiş sütunlar kısıtlamaları kabul NOT NULL etmemektedir.
Bkz. CREATE TABLE [USING] ve ALTER TABLE ALTER COLUMN.
CHECK kısıtlama
CHECK kısıtlamalarını ALTER TABLE ADD CONSTRAINT ve ALTER TABLE DROP CONSTRAINT komutları ile yönetin.
ALTER TABLE ADD CONSTRAINT , kısıtlamayı tabloya eklemeden önce var olan tüm satırların kısıtlamayı karşıladığını doğrular.
Denetim kısıtlamaları için aşağıdaki kısıtlamalar geçerlidir:
- Kısıtlama
CHECKifadesi, Spark'ta aşağıdaki işlev türleri dışında aynı bağımsız değişken değerleri verildiğinde her zaman aynı sonucu döndüren tüm SQL işlevlerini kullanabilir:- Kullanıcı tanımlı işlevler.
- Toplama işlevleri.
- Pencere işlevleri.
- Birden çok satır döndüren işlevler.
Var olan bir tabloya ekleme
Aşağıdaki örnek, önceki bölümde oluşturulan people_demo tabloya bir CHECK kısıtlama ekliyor, sonra onu kaldırıyor:
ALTER TABLE main.default.people_demo ADD CONSTRAINT dateWithinRange CHECK (birthDate > '1900-01-01');
ALTER TABLE main.default.people_demo DROP CONSTRAINT dateWithinRange;
Bkz. ALTER TABLE ADD CONSTRAINT ve ALTER TABLE DROP CONSTRAINT.
Denetim kısıtlaması tablosu özelliklerini görüntüleme
DESCRIBE DETAIL ve SHOW TBLPROPERTIES komutlarını kullanarak bir tablonun CHECK kısıtlamalarını görebilirsiniz. Aşağıdaki örnek, people_demo öğesine bir kısıtlama ekler, ardından bunu görüntüler:
ALTER TABLE main.default.people_demo ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);
DESCRIBE DETAIL main.default.people_demo;
SHOW TBLPROPERTIES main.default.people_demo;
Denetim kısıtlamalarını kaldırma
Databricks Runtime 15.4 LTS ve üzeri sürümlerde, tablodan DROP FEATURE denetim kısıtlamalarını kaldırmak ve tablo protokollerini düşürmek için komutunu kullanın.
Bkz . Delta Lake tablosu özelliğini bırakma ve tablo protokolünü düşürme.
Birincil anahtar, yabancı anahtar ve benzersiz kısıtlamaları bildirme
Birincil anahtar, yabancı anahtar ve benzersiz kısıtlamalar yalnızca bilgilendirme amaçlıdır ve uygulanmaz. Sorgu iyileştirmeleri aracılığıyla performansı artırabilirler.
- Birincil anahtar ve yabancı anahtar: Unity Kataloğu ve Delta Lake tablolarında Databricks Runtime 13.3 LTS ve üzeri için kullanılabilir. Databricks Runtime 15.2 ve sonraki sürümlerde genel kullanıma sunulmuştur. Yabancı anahtarlar başka bir tablodaki birincil anahtara veya benzersiz bir kısıtlamaya başvurmalıdır.
-
Benzersiz: Unity Catalog ve Databricks SQL ile Databricks Runtime 18.2 ve üzerindeki Delta Lake tabloları için Genel Önizleme kapsamında sunulmaktadır. Bir tablonun birden çok benzersiz kısıtlaması olabilir. Yabancı anahtarlar,
REFERENCES parent_table(unique_col)kullanarak benzersiz bir sütuna başvurabilir. Benzersiz sütunlar,NULLdeğerleri birbirinden farklı kabul edildiği için null olabilir.
Belirli bir katalog genelinde kısıtlamaların nasıl uygulandığıyla ilgili ayrıntıları almak için information_schema öğesini sorgulayın, DESCRIBE TABLE EXTENDED kullanın veya SHOW CREATE TABLE kullanın.
Yeni tablolara ekle
Tablo oluşturma sırasında tablo belirtimi yan tümcesinin bir parçası olarak birincil anahtarları, yabancı anahtarları ve benzersiz kısıtlamaları bildirin:
CREATE OR REPLACE TABLE main.default.T(pk1 INTEGER NOT NULL, pk2 INTEGER NOT NULL,
CONSTRAINT t_pk PRIMARY KEY(pk1, pk2));
CREATE OR REPLACE TABLE main.default.S(pk INTEGER NOT NULL PRIMARY KEY,
fk1 INTEGER, fk2 INTEGER,
CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES main.default.T);
CREATE OR REPLACE TABLE main.default.U(id INTEGER NOT NULL, email STRING NOT NULL,
CONSTRAINT u_uq_email UNIQUE(email));
CTAS ifadeleri bu kısıtlama ifadesini desteklemez.
Var olan tablolara ekle
Alternatif olarak, zaten var olan tablolara aynı kısıtlamaları ekleyin. Bu yaklaşım, önceki bölümle aynı sonuca ulaşır. Aşağıdaki örnek, S, U ve T öğelerini kısıtlama olmadan yeniden oluşturur, ardından her kısıtlamayı ALTER TABLE ADD CONSTRAINT ile ekler. Referans veren yabancı anahtarın önüne bir birincil anahtar ekleyin:
CREATE OR REPLACE TABLE main.default.T(pk1 INTEGER NOT NULL, pk2 INTEGER NOT NULL);
CREATE OR REPLACE TABLE main.default.S(pk INTEGER NOT NULL, fk1 INTEGER, fk2 INTEGER);
CREATE OR REPLACE TABLE main.default.U(id INTEGER NOT NULL, email STRING NOT NULL);
ALTER TABLE main.default.T ADD CONSTRAINT t_pk PRIMARY KEY(pk1, pk2);
ALTER TABLE main.default.S ADD CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES main.default.T;
ALTER TABLE main.default.U ADD CONSTRAINT u_uq_email UNIQUE(email);