다음을 통해 공유


Azure Databricks의 제약 조건

Azure Databricks는 표준 SQL 제약 조건 관리 절을 지원합니다. 제약 조건은 다음과 같은 두 가지 범주로 나뉩니다.

  • 강제 제약 조건은 테이블에 추가된 데이터의 품질 및 무결정이 자동으로 확인되도록 합니다.
  • 정보 기본 키 및 외래 키 제약 조건은 테이블의 필드 간 관계를 인코딩하며 강제로 적용되지 않습니다.

Azure Databricks의 모든 제약 조건에는 Delta Lake가 필요합니다.

Delta Live Tables에는 기대치라고 하는 유사한 개념이 있습니다. Delta Live Tables를 사용하여 데이터 품질 관리를 참조하세요.

Azure Databricks의 강제 제약 조건

제약 조건을 위반하면 트랜잭션이 오류와 함께 실패합니다. 다음 두 가지 유형의 제약 조건이 지원됩니다.

  • NOT NULL: 특정 열의 값이 null일 수 없음을 나타냅니다.
  • CHECK: 지정된 부울 식이 각 입력 행에 대해 true여야 함을 나타냅니다.

Important

제약 조건을 추가하면 이전 작성기 버전이 3 미만인 경우 테이블 작성기 프로토콜 버전이 자동으로 업그레이드됩니다. Azure Databricks가 Delta Lake 기능 호환성을 어떻게 관리하나요? 테이블 프로토콜 버전 관리를 이해하고 프로토콜 버전을 업그레이드하는 것이 무엇을 의미하는지 알아보세요.

Azure Databricks에서 NOT NULL 제약 조건 설정

테이블을 만들 때 스키마의 NOT NULL 제약 조건을 지정합니다. ALTER TABLE ALTER COLUMN 명령을 사용하여 NOT NULL 제약 조건을 삭제하거나 추가합니다.

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;

테이블에 NOT NULL 제약 조건을 추가하기 전에 Azure Databricks는 모든 기존 행이 제약 조건을 충족하는지 확인합니다.

구조체 내 중첩된 열에 NOT NULL 제약 조건을 지정하면 부모 구조체도 null이 아니어야 합니다. 배열 또는 맵 형식 내에 중첩된 열은 NOT NULL 제약 조건을 허용하지 않습니다.

CREATE TABLE [USING]ALTER TABLE ALTER COLUMN을 참조하세요.

Azure Databricks에서 CHECK 제약 조건 설정

ALTER TABLE ADD CONSTRAINTALTER TABLE DROP CONSTRAINT 명령을 사용하여 CHECK 제약 조건을 관리합니다. ALTER TABLE ADD CONSTRAINT는 기존 행을 테이블에 추가하기 전에 모든 기존 행이 제약 조건을 충족하는지 확인합니다.

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;

ALTER TABLE ADD CONSTRAINTALTER TABLE DROP CONSTRAINT를 참조하세요.

CHECK 제약 조건은 DESCRIBE DETAILSHOW TBLPROPERTIES 명령의 출력에 있는 테이블 속성으로 노출됩니다.

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

DESCRIBE DETAIL people10m;

SHOW TBLPROPERTIES people10m;

CHECK 제약 조건 사용 안 함

Databricks Runtime 15.4 LTS 이상에서는 이 명령을 사용하여 DROP FEATURE 테이블에서 CHECK 제약 조건을 제거하고 테이블 프로토콜을 다운그레이드할 수 있습니다.

델타 테이블 기능 삭제를 참조하세요.

기본 키 및 외래 키 관계 선언

참고 항목

  • 기본 키 및 외래 키 제약 조건은 Databricks Runtime 11.3 LTS 이상에서 사용할 수 있으며 Databricks Runtime 15.2 이상에서는 완전히 GA입니다.
  • 기본 키 및 외래 키 제약 조건에는 Unity Catalog 및 Delta Lake가 필요합니다.

Unity Catalog 테이블의 필드에 기본 키 및 외래 키 관계를 사용할 수 있습니다. 기본 키와 외래 키는 정보용이며 강제로 적용되지 않습니다. 외래 키는 다른 테이블의 기본 키를 참조해야 합니다.

테이블을 만드는 동안 기본 키와 외래 키를 테이블 사양 절의 일부로 선언할 수 있습니다. CTAS 문에서는 이 절을 사용할 수 없습니다. 기존 테이블에 제약 조건을 추가할 수도 있습니다.

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

information_schema를 쿼리하거나 DESCRIBE를 사용하여 특정 카탈로그에 제약 조건이 적용되는 방법에 대한 세부 정보를 가져올 수 있습니다.

참조