Table protocol versioning

유상기·2023년 2월 21일
0

Delta Lake

목록 보기
9/16
post-thumbnail

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

Delta 테이블의 트랜잭션 로그에는 Delta Lake 진화를 지원하는 프로토콜 버전 정보가 포함되어 있습니다. Delta Lake는 최소 리더 및 작성자 버전을 별도로 추적합니다.

Delta Lake는 하위 프로토콜 버전으로 작성된 데이터도 항상 높은 프로토콜 버전의 Delta Lake 리더가 읽을 수 있도록 보장합니다.

Delta Lake는 경우에 따라 전방 호환성을 깨 뜨릴 수 있습니다. 낮은 프로토콜 버전의 Delta Lake는 높은 프로토콜 버전의 Delta Lake로 작성된 데이터를 읽고 쓸 수 없을 수 있습니다. 프로토콜 버전이 너무 낮은 Delta Lake 테이블을 읽고 쓰려고 하면 업그레이드해야 한다는 오류가 발생합니다.

테이블을 만들 때, Delta Lake는 스키마 또는 테이블 속성과 같은 테이블 특성을 기반으로 최소 필요한 프로토콜 버전을 선택합니다. 또한 SQL 구성을 설정하여 기본 프로토콜 버전을 설정할 수 있습니다.

  • spark.databricks.delta.properties.defaults.minWriterVersion = 2 (기본값)
  • spark.databricks.delta.properties.defaults.minReaderVersion = 1 (기본값)

새 프로토콜 버전으로 테이블을 업그레이드하려면 DeltaTable.upgradeTableProtocol 메서드를 사용합니다.

💡 경고

프로토콜 버전 업그레이드는 되돌릴 수 없으며, 프로토콜 버전을 업그레이드하면 기존의 Delta Lake 테이블 리더, 라이터 또는 둘 다가 손상될 수 있습니다. 따라서 새로운 Delta Lake 기능을 사용하려는 경우와 같이 필요한 경우에만 특정 테이블을 업그레이드하는 것이 좋습니다. 또한 모든 현재 및 미래의 프로덕션 도구가 새 프로토콜 버전의 Delta Lake 테이블을 지원하는지 확인해야합니다.

-- Upgrades the reader protocol version to 1 and the writer protocol version to 3.
ALTER TABLE <table_identifier> SET TBLPROPERTIES('delta.minReaderVersion' = '1', 'delta.minWriterVersion' = '3')
from delta.tables import DeltaTable
delta = DeltaTable.forPath(spark, "path_to_table") # or DeltaTable.forName
delta.upgradeTableProtocol(1, 3) # Upgrades to readerVersion=1, writerVersion=3.

Features by protocol version

GitHub 웹 사이트의 delta-io / delta 레포지토리에서 ReadersWriter Version 요구 사항을 참조하십시오.

Column mapping

💡 칼럼 매핑 기능은 Delta Lake 1.2.0 이상에서 사용 가능합니다. 이 기능은 현재 알려진 제한 사항이 있는 실험적인 기능입니다.

칼럼 매핑 기능은 Delta 테이블 칼럼과 하위 Parquet 파일 칼럼에 서로 다른 이름을 사용할 수 있게 합니다. 이를 통해 Delta 테이블에서 RENAME COLUMNDROP COLUMNS와 같은 스키마 진화 작업을 실행할 수 있으며, 하위 Parquet 파일을 다시 작성하지 않아도 됩니다. 또한, 사용자는 Parquet에서 허용되지 않는 공백 등의 문자로 Delta 테이블 칼럼 이름을 지을 수 있으므로 CSV 또는 JSON 데이터를 별도의 칼럼 이름 변경 없이 Delta에 직접 인계할 수 있습니다.

칼럼 매핑을 사용하려면 Delta Lake 테이블 프로토콜을 업그레이드해야 합니다.

💡 경고

프로토콜 버전 업그레이드는 되돌릴 수 없으며, 기존 Delta Lake 테이블 리더, 작성기 또는 둘 다가 망가질 수 있습니다. 따라서, 새로운 Delta Lake 기능에 대한 옵트인과 같이 필요할 때에만 특정 테이블을 업그레이드하는 것이 좋습니다. 또한, 새로운 프로토콜 버전의 Delta Lake 테이블을 현재 및 향후 생산 도구에서 모두 지원하는지 확인하는 것이 좋습니다.

ALTER TABLE <table_name> SET TBLPROPERTIES (
   'delta.minReaderVersion' = '2',
   'delta.minWriterVersion' = '5',
   'delta.columnMapping.mode' = 'name'
)

알려진 제한 사항
Delta Lake 2.0.0에서는 Spark Structured StreamingChange data feed read가 열 매핑이 활성화된 테이블에서 명시적으로 차단됩니다.

Delta 테이블 프로토콜은 이름 및 ID별 열 매핑 두 가지 모드를 지정합니다. 현재 Delta Lake에서는 이름 모드만 지원됩니다.

profile
Data/AI Solution Architect

0개의 댓글