Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: Databricks SQL
Databricks Runtime
Menambahkan kunci primer bersifat informasional, kunci asing bersifat informasional, atau batasan pemeriksaan yang diberlakukan ke tabel Delta Lake yang ada, tampilan materialisasi, atau tabel streaming.
Sintaks
ADD [check_constraint | key_constraint ]
check_constraint
CONSTRAINT name CHECK ( condition ) [ ENFORCED ]
key_constraint
{ [ CONSTRAINT name ]
{
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
{ FOREIGN KEY (foreign_key_column [, ...] )
REFERENCES parent_relation [ ( parent_column [, ...] ] )
[ constraint_option | foreign_key_option ] [...]
}
}
constraint_option
{ NOT ENFORCED |
DEFERRABLE |
INITIALLY DEFERRED |
{ NORELY | RELY } }
foreign_key_option
{ MATCH FULL |
ON UPDATE NO ACTION |
ON DELETE NO ACTION }
Untuk kompatibilitas dengan dialek SQL non-standar, Anda dapat menentukan ENABLE NOVALIDATE
alih-alih NOT ENFORCED DEFERRABLE INITIALLY DEFERRED
.
Parameter
check_constraint
Menentukan batasan pemeriksaan untuk relasi.
CONSTRAINT
namaMenentukan nama untuk batasan. Nama harus unik dalam hubungan.
CHECK (
kondisi)
Hubungan
DEFAULT COLLATION
harus dalam keadaanUTF8_BINARY
pada saat batasan ditambahkan.condition
harus berupa ekspresi deterministik yang mengembalikanBOOLEAN
.condition
dapat terdiri dari literal, pengidentifikasi kolom dalam hubungan, dan deterministik, fungsi atau operator SQL bawaan kecuali:- Fungsi agregat
- fungsi jendela analitik
- Fungsi jendela peringkat
- Fungsi generator yang menghasilkan tabel
-
STRING
kolom dengan pengurutan selainUTF8_BINARY
Juga
condition
tidak boleh berisi subkueri apa pun.Agar batasan
CHECK
terpenuhi di Azure Databricks, batasan harus dievaluasi ketrue
.Delta Lake memverifikasi validitas batasan pemeriksaan terhadap data baru dan yang sudah ada. Jika ada baris yang melanggar batasan, akan muncul kesalahan.
key_constraint
Penting
Fitur ini ada di Pratinjau Publik.
Berlaku untuk:
Databricks SQL
Databricks Runtime 11.3 LTS ke atas
Menentukan kunci primer informasi atau batasan kunci asing informasional untuk relasi. Batasan kunci informasi tidak diberlakukan tetapi dapat meningkatkan performa dengan mendukung pengoptimalan kueri .
CONSTRAINT
namaSecara opsional menentukan nama untuk batasan. Nama harus unik dalam skema. Jika tidak ada nama yang disediakan, Azure Databricks akan menghasilkannya.
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]
Berlaku untuk:
hanya untuk Katalog Unity
Menambahkan batasan kunci utama ke relasi. Hubungan dapat memiliki paling banyak satu kunci primer.
Batasan kunci primer tidak didukung untuk hubungan dalam
hive_metastore
katalog.-
Kolom hubungan subjek yang didefinisikan sebagai
NOT NULL
. Nama kolom tidak boleh diulang. TIMESERIES
Berlaku untuk:
Databricks SQL
Databricks Runtime 13.3 LTS ke atas
Secara opsional, menandai komponen kolom kunci utama sebagai mewakili seri waktu.
FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_relation [ ( parent_column [, ...] ) ] foreign_key_option
Berlaku untuk:
hanya untuk Katalog Unity
Menambahkan batasan kunci asing (integritas referensial) ke relasi.
Batasan kunci asing tidak didukung untuk hubungan dalam katalog
hive_metastore
.-
Kolom hubungan subjek. Nama kolom tidak boleh diulang. Jenis data setiap kolom harus cocok dengan jenis
parent_column
yang cocok. Jumlah kolom harus cocok dengan jumlahparent_columns
. Dua kunci asing tidak dapat berbagi sekumpulan kolom kunci asing yang identik. -
Menentukan hubungan yang dirujuk oleh kunci asing. Hubungan harus memiliki batasan yang ditentukan
PRIMARY KEY
, dan Anda harus memilikiSELECT
hak istimewa pada hubungan tersebut. -
Kolom dalam relasi induk yang merupakan bagian dari kunci utamanya. Semua kolom kunci utama relasi induk harus dicantumkan.
Jika kolom induk tidak tercantum, kolom tersebut tersirat untuk ditentukan dalam urutan yang diberikan dalam definisi
PRIMARY KEY
.
Batasan kunci asing yang hanya berbeda dalam permutasi kolom kunci asing tidak diizinkan.
-
constraint_option
Mencantumkan properti kendala. Semua properti bersifat opsional tetapi tersirat secara default. Setiap properti hanya dapat ditentukan satu kali.
NOT ENFORCED
Azure Databricks tidak mengambil tindakan untuk memberlakukannya untuk baris yang sudah ada atau baru.
DEFERRABLE
Penegakan batasan dapat ditangguhkan.
INITIALLY DEFERRED
Pemberlakuan pembatasan ditangguhkan.
NORELY
atauRELY
Berlaku untuk:
Databricks SQL
Databricks Runtime 14.2 ke atas untuk
PRIMARY KEY
batasanBerlaku untuk:
Databricks SQL
Databricks Runtime 15.4 ke atas untuk batasan
FOREIGN KEY
Jika
RELY
, Azure Databricks dapat mengeksploitasi batasan untuk menulis ulang kueri. Adalah tanggung jawab pengguna untuk memastikan batasan terpenuhi. Mengandalkan batasan yang tidak terpenuhi dapat menyebabkan hasil kueri yang salah.Default adalah
NORELY
.
foreign_key_option
Mencantumkan properti yang spesifik untuk batasan kunci asing. Semua properti bersifat opsional tetapi tersirat secara default. Setiap properti hanya dapat ditentukan satu kali.
MATCH FULL
Agar batasan dianggap benar semua nilai kolom harus
NOT NULL
.ON UPDATE NO ACTION
Jika
PRIMARY KEY
induk diperbarui, Azure Databricks tidak mengambil tindakan untuk membatasi pembaruan atau memperbarui kunci asing.ON DELETE NO ACTION
Jika baris induk dihapus, Azure Databricks tidak mengambil tindakan untuk membatasi tindakan, memperbarui kunci asing, atau menghapus baris dependen.
Penting
Azure Databricks tidak memberlakukan batasan kunci primer atau kunci asing. Konfirmasi batasan kunci sebelum menambahkan kunci primer atau asing. Proses penyerapan Anda dapat memberikan jaminan tersebut, atau Anda dapat menjalankan pemeriksaan terhadap data Anda.
Contoh
-- Add a primary key
> CREATE TABLE persons(first_name STRING NOT NULL, last_name STRING NOT NULL, nickname STRING);
> ALTER TABLE persons ADD CONSTRAINT persons_pk PRIMARY KEY(first_name, last_name);
-- Add a foreign key which Databricks does not enforce, but can rely upon.
> CREATE TABLE pets(name STRING, owner_first_name STRING, owner_last_name STRING);
> ALTER TABLE pets ADD CONSTRAINT pets_persons_fk
FOREIGN KEY(owner_first_name, owner_last_name) REFERENCES persons
NOT ENFORCED RELY;
-- Add a check contraint
> ALTER TABLE pets ADD CONSTRAINT pets_name_not_cute_chk CHECK (length(name) < 20);