Delta Lake 스키마 유효성 검사

Delta Lake는 작성 중인 DataFrame의 스키마가 테이블의 스키마와 호환되는지 자동으로 유효성을 검사합니다. Delta Lake는 다음 규칙을 사용하여 DataFrame에서 테이블로의 쓰기가 호환되는지 여부를 확인합니다.

  • 모든 DataFrame 열은 대상 테이블에 있어야 합니다. 테이블에 없는 DataFrame에 열이 있는 경우 예외가 발생합니다. 테이블에 있지만 DataFrame에 없는 열은 null로 설정됩니다.
  • DataFrame 열 데이터 형식은 대상 테이블의 열 데이터 형식과 일치해야 합니다. 일치하지 않으면 예외가 발생합니다.
  • 데이터 프레임 열 이름은 대/소문자만 다를 수 없습니다. 즉, 동일한 테이블에 "Foo" 및 "foo"와 같은 열이 정의되어 있을 수 없습니다. Spark를 대/소문자 구분 또는 민감하지 않음(기본값) 모드에서 사용할 수 있지만 Parquet는 열 정보를 저장하고 반환할 때 대/소문자를 구분합니다. Delta Lake는 대/소문자를 보존하지만 스키마를 저장할 때는 민감하지 않으며 잠재적인 실수, 데이터 손상 또는 손실 문제를 방지하기 위해 이러한 제한이 있습니다.

Delta Lake는 DDL을 지원하여 새 열을 명시적으로 추가하고 스키마를 자동으로 업데이트하는 기능을 지원합니다.

추가 모드와 함께 과 같은 partitionBy다른 옵션을 지정하면 Delta Lake는 일치하는지 확인하고 불일치에 대한 오류를 throw합니다. 가 없으면 partitionBy 가 자동으로 기존 데이터의 분할을 따릅니다.

참고

INSERT 구문은 스키마 적용을 제공하고 스키마 진화를 지원합니다. 열의 데이터 형식을 Delta Lake 테이블의 데이터 형식으로 안전하게 캐스팅할 수 없는 경우 런타임 예외가 throw됩니다. 스키마 진화를 사용하도록 설정하면 스키마가 진화할 스키마의 마지막 열(또는 중첩 열)으로 새 열이 존재할 수 있습니다.

Delta Lake 병합에 대한 스키마 유효성 검사

merge 는 삽입 및 업데이트 식에 의해 생성된 데이터의 스키마가 테이블의 스키마와 호환되는지 자동으로 유효성을 검사합니다. 다음 규칙을 사용하여 작업이 호환되는지 여부를 merge 확인합니다.

  • insert 작업의 경우 update 지정된 대상 열이 대상 델타 테이블에 있어야 합니다.
  • insertAll 작업의 경우 updateAll 원본 데이터 세트에는 대상 델타 테이블의 모든 열이 있어야 합니다. 원본 데이터 세트에는 추가 열이 있을 수 있으며 무시됩니다.
  • 모든 작업의 경우 대상 열을 생성하는 식에서 생성된 데이터 형식이 대상 델타 테이블 merge 의 해당 열과 다른 경우 테이블의 형식으로 캐스팅하려고 합니다.

Delta Lake 병합에 대한 자동 스키마 진화를 참조하세요.