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.

Delta Live Tables memiliki konsep serupa yang dikenal sebagai ekspektasi. Lihat Mengelola kualitas data dengan Tabel Langsung Delta.

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 NOT NULL batasan di Azure Databricks

Anda menentukan NOT NULL batasan 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
) USING DELTA;

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 NOT NULL batasan pada kolom yang berlapis dalam struct, struct induk juga harus tidak null. Kolom yang ditumpuk dalam jenis array atau peta tidak menerima NOT NULL batasan.

Lihat MEMBUAT TABEL [MENGGUNAKAN] DAN MENGUBAH KOLOM UBAH TABEL.

Mengatur CHECK batasan di Azure Databricks

Anda mengelola batasan CHECK menggunakan ALTER TABLE ADD CONSTRAINT perintah dan perintah 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
) USING DELTA;

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.

CHECK batasan diekspos sebagai properti tabel dalam output DESCRIBE DETAIL perintah dan SHOW TBLPROPERTIES .

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

DESCRIBE DETAIL people10m;

SHOW TBLPROPERTIES people10m;

Mendeklarasikan kunci primer dan hubungan kunci asing

Penting

Fitur ini ada di Pratinjau Publik.

Catatan

  • Batasan kunci primer dan kunci asing tersedia di Databricks Runtime 11.3 LTS ke atas.
  • Batasan kunci primer dan kunci asing memerlukan Katalog Unity 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 mereferensikan 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: