Constraints

유상기·2023년 2월 21일
0

Delta Lake

목록 보기
8/16
post-thumbnail

본 글은 Delta Lake 2.2.0 Constraints 을 번역 및 정리하였습니다.

Delta 테이블은 데이터의 품질과 무결성이 자동으로 검증되는 표준 SQL 제약 조건 관리 구문을 지원합니다. 제약 조건이 위반되면 Delta Lake는 InvariantViolationException을 throw하여 새 데이터를 추가할 수 없음을 알립니다.

💡 중요한 사항

제약 조건을 추가하면 자동으로 테이블 작성자 프로토콜 버전이 업그레이드됩니다. 테이블 프로토콜 버전 관리를 이해하고 프로토콜 버전을 업그레이드하는 것이 무엇을 의미하는지에 대해 Table protocol versioning을 참조하십시오.

두 가지 유형의 제약 조건이 지원됩니다:

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

NOT NULL constraint

NOT NULL 제약 조건은 테이블을 생성할 때 스키마에서 지정하며, ALTER TABLE CHANGE COLUMN 명령을 사용하여 NOT NULL 제약 조건을 삭제할 수 있습니다.

> CREATE TABLE default.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 default.people10m CHANGE COLUMN middleName DROP NOT NULL;

만약 struct 내에 있는 column에 NOT NULL 제약조건을 지정하면, parent struct도 null이 아닌 것으로 제약이 걸립니다. 그러나, array나 map type 내부에 있는 column은 NOT NULL 제약조건을 받지 않습니다.

CHECK constraint

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

> CREATE TABLE default.people10m (
   id INT,
   firstName STRING,
   middleName STRING,
   lastName STRING,
   gender STRING,
   birthDate TIMESTAMP,
   ssn STRING,
   salary INT
 ) USING DELTA;

> ALTER TABLE default.people10m ADD CONSTRAINT dateWithinRange CHECK (birthDate > '1900-01-01');
> ALTER TABLE default.people10m DROP CONSTRAINT dateWithinRange;

CHECK 제약 조건은 DESCRIBE DETAIL 및 SHOW TBLPROPERTIES 명령의 테이블 속성입니다.

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

> DESCRIBE DETAIL default.people10m;

> SHOW TBLPROPERTIES default.people10m;
profile
Data/AI Solution Architect

0개의 댓글