Batasan pada Azure Databricks

Azure Databricks mendukung klausul manajemen batasan SQL standar:

  • Batasan yang diberlakukan memverifikasi integritas data sebelum menambahkan baris ke tabel.
  • Kunci primer informasi dan batasan kunci asing menentukan hubungan antara bidang dalam tabel dan tidak diberlakukan.

Semua batasan di Azure Databricks memerlukan Delta Lake.

Untuk konsep terkait dalam Alur Deklaratif Lakeflow Spark, lihat Mengelola kualitas data dengan ekspektasi pipeline.

Batasan yang Diterapkan pada Azure Databricks

Ketika batasan dilanggar, transaksi gagal dengan kesalahan. Azure Databricks mendukung dua jenis batasan:

  • NOT NULL: menunjukkan bahwa nilai dalam kolom tertentu tidak boleh null.
  • CHECK: menunjukkan bahwa ekspresi boolean tertentu harus benar untuk setiap baris input.

Penting

Saat Anda menambahkan batasan, Azure Databricks secara otomatis meningkatkan versi protokol penulis tabel jika versi penulis sebelumnya kurang dari 3. Lihat Kompatibilitas dan protokol fitur Delta Lake untuk memahami versi protokol tabel dan apa artinya melakukan upgrade versi protokol.

Mengatur batasan NOT NULL di Azure Databricks

Saat Anda membuat tabel, tentukan NOT NULL batasan dalam skema. Untuk menghilangkan atau menambahkan NOT NULL batasan, gunakan 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;

Azure Databricks memverifikasi bahwa semua baris yang ada memenuhi batasan sebelum menambahkan batasan NOT NULL ke tabel.

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 NOT NULL batasan.

Lihat CREATE TABLE [USING] dan ALTER TABLE ALTER COLUMN.

Mengatur batasan CHECK di Azure Databricks

Kelola CHECK batasan dengan perintah ALTER TABLE ADD CONSTRAINT dan ALTER TABLE DROP CONSTRAINT. ALTER TABLE ADD CONSTRAINT memverifikasi bahwa semua baris yang ada memenuhi batasan sebelum menambahkan batasan ke tabel.

Pembatasan berikut berlaku untuk memeriksa batasan:

  • CHECK Ekspresi batasan dapat menggunakan fungsi SQL apa pun di Spark yang selalu mengembalikan hasil yang sama saat diberi nilai argumen yang sama, kecuali jenis fungsi berikut:
    • Fungsi yang ditentukan pengguna.
    • Fungsi agregat.
    • Fungsi jendela.
    • Fungsi yang mengembalikan beberapa baris.

Tambahkan ke tabel yang sudah ada

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.

Lihat properti tabel batasan pemeriksaan

Gunakan perintah DESCRIBE DETAIL dan SHOW TBLPROPERTIES untuk melihat batasan CHECK tabel.

ALTER TABLE people10m ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);

DESCRIBE DETAIL people10m;

SHOW TBLPROPERTIES people10m;

Menghapus batasan pemeriksaan

Di Databricks Runtime 15.4 LTS ke atas, gunakan DROP FEATURE perintah untuk menghapus batasan pemeriksaan dari tabel dan menurunkan tingkat protokol tabel.

Lihat Menghilangkan fitur tabel Delta Lake dan menurunkan protokol tabel.

Mendeklarasikan kunci primer dan hubungan kunci asing

Batasan kunci utama dan kunci asing tersedia untuk tabel Unity Catalog dan Delta Lake di Databricks Runtime 13.3 LTS ke atas, dan merupakan GA dalam Databricks Runtime 15.2 ke atas.

Kunci primer dan asing hanya untuk tujuan informasi saja dan tidak diberlakukan. Kunci asing harus mengacu pada kunci primer dalam tabel lain. Batasan kunci informasi dapat meningkatkan performa dengan pengoptimalan kueri.

Kueri atau information_schema gunakan DESCRIBE untuk mendapatkan detail tentang bagaimana batasan diterapkan di seluruh katalog tertentu.

Tambahkan ke tabel baru

Deklarasikan kunci primer dan kunci asing sebagai bagian dari klausul spesifikasi tabel selama pembuatan tabel:

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);

Pernyataan CTAS tidak mendukung klausul batasan ini.

Tambahkan ke tabel yang sudah ada

Untuk menambahkan batasan ke tabel yang sudah ada:

ALTER TABLE T ADD CONSTRAINT t_pk PRIMARY KEY(pk1, pk2);
ALTER TABLE S ADD CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES T;