ADD CONSTRAINT 절
적용 대상: Databricks SQL Databricks Runtime
정보 기본 키, 정보 외부 키 또는 강제 검사 제약 조건을 기존 Delta Lake 테이블에 추가합니다.
구문
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 }
비표준 SQL 언어와의 호환성을 위해 ENABLE NOVALIDATE
대신 NOT ENFORCED DEFERRABLE INITIALLY DEFERRED
를 지정할 수 있습니다.
매개 변수
check_constraint
Delta Lake 테이블에 대한 검사 제약 조건을 정의합니다.
CONSTRAINT
이름제약 조건의 이름을 지정합니다. 이름은 테이블 내에서 고유해야 합니다.
FOREIGN KEY
또는PRIMARY KEY
제약 조건에 대한 이름이 제공되지 않으면 Azure Databricks에서 해당 제약 조건을 생성합니다.CHECK (
condition)
condition
는 을 반환하는 결정적 식이어야BOOLEAN
합니다.condition
은 다음을 제외하고 리터럴, 테이블 내의 열 식별자 및 결정적 기본 제공 SQL 함수 또는 연산자로 구성될 수 있습니다.또한
condition
에는 하위 쿼리가 포함되어서는 안 됩니다.CHECK
Azure Databricks에서 제약 조건을 충족하려면 다음으로true
평가해야 합니다.Delta Lake는 새 데이터와 기존 데이터에 대한 검사 제약 조건의 유효성을 확인했습니다. 기존 행이 제약 조건을 위반하는 경우 오류가 발생합니다.
key_constraint
Important
이 기능은 공개 미리 보기 상태입니다.
적용 대상: Databricks SQL Databricks Runtime 11.3 LTS 이상
Delta Lake 테이블에 대한 정보 기본 키 또는 정보 외래 키 제약 조건을 정의합니다.
CONSTRAINT
이름필요에 따라 제약 조건의 이름을 지정합니다. 이름은 스키마 내에서 고유해야 합니다. 이름이 제공되지 않으면 Azure Databricks에서 이름이 생성됩니다.
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]
적용 대상: Unity 카탈로그만
Delta Lake 테이블에 기본 키 제약 조건을 추가합니다. 테이블은 최대 하나의 기본 키를 가질 수 있습니다.
hive_metastore
카탈로그의 테이블에는 기본 키 제약 조건이 지원되지 않습니다.-
NOT NULL
로 정의된 제목 테이블의 열입니다. 열 이름은 반복해서는 안 됩니다. TIMESERIES
적용 대상: Databricks SQL Databricks Runtime 13.3 LTS 이상
필요에 따라 기본 키 열 구성 요소에 시간 표시로 레이블을 지정합니다.
FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option
적용 대상: Unity 카탈로그만
외래 키(참조 무결성) 제약 조건을 Delta Lake 테이블에 추가합니다.
hive_metastore
카탈로그의 테이블에는 외래 키 제약 조건이 지원되지 않습니다.-
제목 테이블의 열입니다. 열 이름은 반복해서는 안 됩니다. 각 열의 데이터 형식은 일치하는
parent_column
의 형식과 일치해야 합니다. 열의 수는parent_columns
의 수와 일치해야 합니다. 두 개의 외래 키는 동일한 외래 키 열 세트를 공유할 수 없습니다. -
외래 키가 참조하는 테이블을 지정합니다. 테이블에 정의된
PRIMARY KEY
제약 조건이 있어야 하며 테이블에 대한 권한이 있어야 합니다SELECT
. -
기본 키의 일부인 부모 테이블의 열입니다. 부모 테이블의 모든 기본 키 열이 나열되어야 합니다.
부모 열이 나열되지 않으면
PRIMARY KEY
정의에 지정된 순서대로 지정되는 것으로 암시됩니다.
외래 키 열의 순열만 다른 외래 키 제약 조건은 허용되지 않습니다.
-
constraint_option
제약 조건의 속성을 나열합니다. 모든 속성은 선택 사항이지만 기본적으로 암시됩니다. 각 속성은 최대 한 번 지정할 수 있습니다.
NOT ENFORCED
Azure Databricks는 기존 행 또는 새 행에 적용하는 작업을 수행하지 않습니다.
DEFERRABLE
제약 조건 적용을 연기할 수 있습니다.
INITIALLY DEFERRED
제약 조건 적용이 지연됩니다.
NORELY
또는RELY
적용 대상: 제약 조건에 대한 Databricks SQL
PRIMARY KEY
Databricks Runtime 14.2 이상적용 대상: Databricks SQL
FOREIGN KEY
제약 조건에 따른 Databricks Runtime 15.4 이상이 경우
RELY
Azure Databricks가 제약 조건을 악용하여 쿼리를 다시 작성할 수 있습니다. 제약 조건이 충족되는지 확인하는 것은 사용자의 책임입니다. 충족되지 않는 제약 조건에 의존하면 잘못된 쿼리 결과가 발생할 수 있습니다.기본값은
NORELY
입니다.
foreign_key_option
외래 키 제약 조건과 관련된 속성을 나열합니다. 모든 속성은 선택 사항이지만 기본적으로 암시됩니다. 각 속성은 최대 한 번 지정할 수 있습니다.
MATCH FULL
제약 조건을 true로 간주하려면 모든 열 값이
NOT NULL
이어야 합니다.ON UPDATE NO ACTION
부모
PRIMARY KEY
가 업데이트되면 Azure Databricks는 업데이트를 제한하거나 외래 키를 업데이트하는 작업을 수행하지 않습니다.ON DELETE NO ACTION
부모 행이 삭제되면 Azure Databricks는 작업을 제한하거나, 외래 키를 업데이트하거나, 종속 행을 삭제하는 작업을 수행하지 않습니다.
Important
Azure Databricks는 기본 키 또는 외래 키 제약 조건을 적용하지 않습니다. 기본 또는 외래 키를 추가하기 전에 키 제약 조건을 확인합니다. 수집 프로세스는 이러한 보증을 제공하거나 데이터에 대한 검사를 실행할 수 있습니다.
예제
-- 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);