Batasan pada Azure Databricks
Azure Databricks mendukung klausul manajemen batasan SQL standar. Batasan termasuk dalam dua kategori:
- Kontrain yang diberlakukan memastikan bahwa kualitas dan integritas data yang ditambahkan ke tabel diverifikasi secara otomatis.
- Kunci primer informasi dan batasan kunci asing mengodekan hubungan antara bidang dalam tabel dan tidak diberlakukan.
Semua batasan di Azure Databricks memerlukan Delta Lake.
DLT memiliki konsep serupa yang dikenal sebagai ekspektasi. Lihat Mengelola kualitas data dengan harapan alur kerja.
Batasan yang diberlakukan pada Azure Databricks
Ketika batasan dilanggar, transaksi gagal dengan kesalahan. Dua jenis batasan yang didukung:
-
NOT NULL
: menunjukkan bahwa nilai dalam kolom tertentu tidak boleh null. -
CHECK
: menunjukkan bahwa ekspresi boolean tertentu harus benar untuk setiap baris input.
Penting
Menambahkan batasan secara otomatis meningkatkan versi protokol penulis tabel jika versi penulis sebelumnya kurang dari 3. Lihat Bagaimana Azure Databricks mengelola kompatibilitas fitur Delta Lake? untuk memahami penerapan versi protokol tabel dan apa artinya meningkatkan versi protokol.
Mengatur batasan NOT NULL
di Azure Databricks
Anda menentukan batasan NOT NULL
dalam skema saat membuat tabel. Anda menghilangkan atau menambahkan NOT NULL
batasan menggunakan ALTER TABLE ALTER COLUMN
perintah .
CREATE TABLE people10m (
id INT NOT NULL,
firstName STRING,
middleName STRING NOT NULL,
lastName STRING,
gender STRING,
birthDate TIMESTAMP,
ssn STRING,
salary INT
);
ALTER TABLE people10m ALTER COLUMN middleName DROP NOT NULL;
ALTER TABLE people10m ALTER COLUMN ssn SET NOT NULL;
Sebelum menambahkan batasan NOT NULL
ke tabel, Azure Databricks memverifikasi bahwa semua baris yang ada memenuhi batasan.
Jika Anda menentukan batasan NOT NULL
pada kolom yang berada dalam struct, maka struct induk juga harus tidak boleh null. Kolom yang ditumpuk dalam jenis array atau peta tidak menerima batasan NOT NULL
.
Lihat CREATE TABLE [USING] dan ALTER TABLE ALTER COLUMN.
Mengatur batasan CHECK
di Azure Databricks
Anda mengelola batasan CHECK
menggunakan perintah ALTER TABLE ADD CONSTRAINT
dan ALTER TABLE DROP CONSTRAINT
.
ALTER TABLE ADD CONSTRAINT
memverifikasi bahwa semua baris yang ada memenuhi batasan sebelum menambahkannya ke tabel.
CREATE TABLE people10m (
id INT,
firstName STRING,
middleName STRING,
lastName STRING,
gender STRING,
birthDate TIMESTAMP,
ssn STRING,
salary INT
);
ALTER TABLE people10m ADD CONSTRAINT dateWithinRange CHECK (birthDate > '1900-01-01');
ALTER TABLE people10m DROP CONSTRAINT dateWithinRange;
Lihat ALTER TABLE ADD CONSTRAINT dan ALTER TABLE DROP CONSTRAINT.
batasan CHECK
diekspos sebagai properti tabel dalam output perintah DESCRIBE DETAIL
dan SHOW TBLPROPERTIES
.
ALTER TABLE people10m ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);
DESCRIBE DETAIL people10m;
SHOW TBLPROPERTIES people10m;
Menonaktifkan batasan pemeriksaan
Di Databricks Runtime 15.4 LTS ke atas, Anda dapat menggunakan perintah DROP FEATURE
untuk menghapus batasan pemeriksaan dari tabel dan menurunkan tingkat protokol tabel.
Lihat fitur-fitur tabel Drop Delta .
Mendeklarasikan kunci primer dan hubungan kunci asing
Catatan
- Kendala kunci primer dan kunci asing tersedia di Databricks Runtime 11.3 LTS ke atas, dan sepenuhnya GA dalam Databricks Runtime 15.2 ke atas.
- Batasan kunci primer dan kunci asing membutuhkan Unity Catalog dan Delta Lake.
Anda dapat menggunakan kunci primer dan hubungan kunci asing pada bidang dalam tabel Unity Catalog. Kunci primer dan asing hanya bersifat informasi dan tidak diberlakukan. Kunci asing harus mengacu pada kunci primer dalam tabel lain.
Anda dapat mendeklarasikan kunci primer dan kunci asing sebagai bagian dari klausul spesifikasi tabel selama pembuatan tabel. Klausa ini tidak diizinkan selama pernyataan CTAS. Anda juga dapat menambahkan batasan ke tabel yang sudah ada.
CREATE TABLE T(pk1 INTEGER NOT NULL, pk2 INTEGER NOT NULL,
CONSTRAINT t_pk PRIMARY KEY(pk1, pk2));
CREATE TABLE S(pk INTEGER NOT NULL PRIMARY KEY,
fk1 INTEGER, fk2 INTEGER,
CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES T);
Anda bisa mengkueri information_schema
atau menggunakan DESCRIBE
untuk mendapatkan detail tentang bagaimana batasan diterapkan di seluruh katalog tertentu.
Lihat: