Delta Lake 열 매핑을 사용하여 열 이름 바꾸기 및 삭제

Important

이 기능은 공개 미리 보기 상태입니다.

Azure Databricks는 Delta Lake 테이블에 대한 열 매핑을 지원합니다. 이를 통해 메타데이터 전용 변경 내용이 데이터 파일을 다시 작성하지 않고도 열을 삭제되거나 이름이 바뀐 것으로 표시할 수 있습니다. 또한 사용자가 이전 문자 제약 조건으로 인해 열 이름을 바꿀 필요 없이 CSV 또는 JSON 데이터를 Delta로 직접 수집할 수 있도록 공백과 같이 Parquet에서 허용되지 않는 문자를 사용하여 델타 테이블 열의 이름을 지정할 수 있습니다.

Important

열 매핑을 사용하도록 설정하면 임의 파일 접두사도 사용할 수 있으므로 Hive 스타일 분할을 사용하여 데이터를 탐색하는 기능이 제거됩니다. Delta Lake 및 Parquet 공유 분할 전략을 참조하세요.

테이블에서 열 매핑을 사용하도록 설정하면 델타 변경 데이터 피드를 사용하는 다운스트림 작업이 중단될 수 있습니다. 열 매핑이 사용하도록 설정된 테이블에 대한 변경 데이터 피드 제한을 참조하세요.

테이블에서 열 매핑을 사용하도록 설정하면 델타 라이브 테이블을 포함하여 델타 테이블에서 원본으로 읽은 스트리밍이 중단될 수 있습니다. 열 매핑 및 스키마 변경 내용이 포함된 스트리밍을 참조하세요.

Delta Lake 열 매핑을 사용하도록 설정하는 방법

Important

테이블에 열 매핑을 사용하도록 설정하면 델타 테이블 버전이 업그레이드됩니다. 이 프로토콜 업그레이드는 되돌릴 수 없습니다. 열 매핑을 사용하도록 설정된 테이블은 Databricks Runtime 10.4 LTS 이상에서만 읽을 수 있습니다.

열 매핑에는 다음 델타 프로토콜이 필요합니다.

  • 판독기 버전 2 이상.
  • 기록기 버전 5 이상.

필요한 프로토콜 버전이 있는 델타 테이블의 경우 열 매핑을 로 설정하여 사용하도록 설정할 delta.columnMapping.modename수 있습니다.

다음 명령을 사용하여 테이블 버전을 업그레이드하고 열 매핑을 사용하도록 설정할 수 있습니다.

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

참고 항목

열 매핑을 사용하도록 설정한 후에는 열 매핑을 해제할 수 없습니다. 설정 'delta.columnMapping.mode' = 'none'하려고 하면 오류가 발생합니다.

열 이름 바꾸기

참고 항목

Databricks Runtime 10.4 LTS 이상에서 사용할 수 있습니다.

Delta 테이블에 열 매핑을 활성화하면 열 이름을 바꿀 수 있습니다.

ALTER TABLE <table-name> RENAME COLUMN old_col_name TO new_col_name

자세한 예제는 Delta Lake 테이블 스키마 업데이트를 참조하세요.

열 삭제

참고 항목

Databricks Runtime 11.3 LTS 이상에서 사용할 수 있습니다.

Delta 테이블에 열 매핑을 활성화하면 하나 이상의 열을 삭제할 수 있습니다.

ALTER TABLE table_name DROP COLUMN col_name
ALTER TABLE table_name DROP COLUMNS (col_name_1, col_name_2, ...)

자세한 내용은 Delta Lake 테이블 스키마 업데이트를 참조하세요.

열 이름에서 지원되는 문자

델타 테이블에 대해 열 매핑을 사용하는 경우 테이블의 열 이름 ,;{}()\n\t=에 공백과 이러한 문자를 포함할 수 있습니다.

열 매핑 및 스키마 변경 내용이 있는 스트리밍

Important

이 기능은 Databricks Runtime 13.3 LTS 이상의 공개 미리 보기에 있습니다.

스키마 추적 위치를 제공하여 열 매핑을 사용하도록 설정된 델타 테이블에서 스트리밍을 사용하도록 설정할 수 있습니다. 이렇게 하면 비가산적 스키마 변경으로 인해 스트림이 손상될 수 있는 문제가 해결됩니다.

데이터 원본에 대해 읽은 각 스트리밍에는 고유한 schemaTrackingLocation 지정이 있어야 합니다. 지정된 schemaTrackingLocation 내용은 스트리밍 쓰기를 위해 checkpointLocation 대상 테이블의 지정된 디렉터리 내에 포함되어야 합니다.

참고 항목

여러 원본 델타 테이블의 데이터를 결합하는 스트리밍 워크로드의 경우 각 원본 테이블에 대해 고유한 디렉터리를 checkpointLocation 지정해야 합니다.

이 옵션은 schemaTrackingLocation 다음 코드 예제와 같이 스키마 추적 경로를 지정하는 데 사용됩니다.

checkpoint_path = "/path/to/checkpointLocation"

(spark.readStream
  .option("schemaTrackingLocation", checkpoint_path)
  .table("delta_source_table")
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .toTable("output_table")
)