TAMBAHKAN klausa BATASAN
Penting
Fitur ini ada di Pratinjau Publik.
Berlaku untuk: Databricks SQL Databricks Runtime
Menambahkan kunci primer informasi, kunci asing informasi, atau batasan pemeriksaan yang diberlakukan ke tabel Delta Lake yang ada.
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_table [ ( 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 tabel Delta Lake.
CONSTRAINT
namaMenentukan nama untuk batasan. Nama harus unik dalam tabel. Jika tidak ada nama yang disediakan, Azure Databricks akan menghasilkannya.
CHECK (
kondisi)
condition
harus berupa ekspresi deterministik yangBOOLEAN
mengembalikan .condition
dapat terdiri atas literal, pengidentifikasi kolom dalam tabel, dan fungsi atau operator SQL bawaan deterministik kecuali:- Fungsi agregat
- Fungsi jendela analitik
- Fungsi jendela peringkat
- Fungsi generator bernilai tabel
Juga
condition
tidak boleh berisi subkueri apa pun.CHECK
Agar batasan 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 ada 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 informasi untuk tabel Delta Lake.
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 Katalog Unity
Menambahkan batasan kunci utama ke tabel Delta Lake. Tabel dapat memiliki paling banyak satu kunci primer.
Batasan kunci primer tidak didukung untuk tabel dalam
hive_metastore
katalog.-
Kolom tabel 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 melabeli komponen kolom kunci utama sebagai mewakili timeseries.
FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option
Berlaku untuk: Hanya Katalog Unity
Menambahkan batasan kunci asing (integritas referensial) ke tabel Delta Lake.
Batasan kunci asing tidak didukung untuk tabel dalam
hive_metastore
katalog.-
Kolom tabel subjek. Nama kolom tidak boleh diulang. Jenis data setiap kolom harus cocok dengan jenis pencocokan
parent_column
. Jumlah kolom harus cocok dengan jumlahparent_columns
. Dua kunci asing tidak dapat berbagi sekumpulan kolom kunci asing yang identik. -
Menentukan tabel yang dirujuk oleh kunci asing. Tabel harus memiliki batasan yang ditentukan
PRIMARY KEY
, dan Anda harus memiliki tabel tersebut. -
Kolom dalam tabel induk yang merupakan bagian dari kunci utamanya. Semua kolom kunci utama tabel induk harus dicantumkan.
Jika kolom induk tidak tercantum, kolom tersebut tersirat untuk ditentukan dalam urutan yang
PRIMARY KEY
diberikan dalam definisi.
Batasan kunci asing yang hanya berbeda dalam permutasi kolom kunci asing tidak diizinkan.
-
constraint_option
Mencantumkan properti batasan. Semua properti bersifat opsional tetapi tersirat secara default. Setiap properti paling banyak dapat ditentukan sekali.
NOT ENFORCED
Azure Databricks tidak mengambil tindakan untuk memberlakukannya untuk baris yang sudah ada atau baru.
DEFERRABLE
Penegakan batasan dapat ditangguhkan.
INITIALLY DEFERRED
Pemberlakuan batasan ditangguhkan.
NORELY
atauRELY
Berlaku untuk: Databricks SQL Databricks Runtime 14.2 ke atas
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 khusus untuk batasan kunci asing. Semua properti bersifat opsional tetapi tersirat secara default. Setiap properti paling banyak dapat ditentukan sekali.
MATCH FULL
Agar batasan dianggap benar semua nilai kolom harus
NOT NULL
.ON UPDATE NO ACTION
Jika induk
PRIMARY KEY
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);