다음을 통해 공유


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

이 페이지에서는 Delta Lake 열 매핑을 통해 데이터 파일을 다시 작성하지 않고도 메타데이터 전용 변경 내용을 사용하여 열을 삭제 또는 이름 바꾸기로 표시하는 방법을 설명합니다.

Azure Databricks는 Delta Lake 테이블에 대한 열 매핑을 지원합니다. 열 매핑을 사용하면 데이터 파일을 다시 작성하지 않고도 메타데이터 전용 변경 내용으로 열을 삭제하거나 이름을 바꿀 수 있습니다. 열 매핑을 사용하면 Parquet에서 허용하지 않는 문자를 공백과 같은 열 이름에 사용할 수도 있습니다. 이렇게 하면 열 이름을 변경하지 않고 CSV 또는 JSON 데이터를 Delta로 직접 수집할 수 있습니다.

필수 구성 요소 및 제한 사항

열 매핑을 사용하도록 설정하기 전에 다음 제한 사항을 이해합니다.

열 매핑 사용

다음 명령을 사용하여 열 매핑을 사용하도록 설정합니다.

ALTER TABLE <table-name> SET TBLPROPERTIES (
  'delta.columnMapping.mode' = 'name'
)

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

  • 판독기 버전 2 이상
  • 라이이터 버전 5 또는 그 이상

Delta Lake 기능 호환성 및 프로토콜을 참조하세요.

열 이름 바꾸기

참고

Databricks Runtime 10.4 LTS 이상에서 지원됩니다.

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

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

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

열 삭제

참고

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, ...)

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

열 이름에서 지원되는 문자

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

열 매핑 제거

다음 명령을 사용하여 테이블에서 열 매핑을 제거할 수 있습니다.

ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.columnMapping.mode' = 'none')

경고

열 매핑을 제거하면 모든 데이터 파일을 다시 작성하여 실제 열 이름을 논리적 이름으로 대체합니다. 이 작업은 행 수준 또는 물리적 충돌 해결을 지원하지 않습니다.

동시 쓰기 작업으로 인해 ConcurrentModificationException. 열 매핑을 제거하기 전에 다음을 수행합니다.

  1. 스트리밍 작업 및 ETL 파이프라인을 포함하여 모든 동시 쓰기 작업을 일시 중지합니다.
  2. 테이블에서 예측 최적화 를 사용하지 않도록 설정합니다.
  3. 큰 테이블의 경우 활동량이 적은 기간 동안 이 작업을 예약합니다.

테이블 프로토콜의 다운그레이드를 지원하는 다른 방법은 열 매핑 사용 안 함을 참조하세요.

열 매핑 사용 안 함

Databricks Runtime 15.3 이상에서는 이 명령을 사용하여 DROP FEATURE 열 매핑을 제거하고 테이블 프로토콜을 다운그레이드할 수 있습니다. 이전 판독기와의 호환성을 위해 프로토콜 버전을 다운그레이드해야 하는 경우 열 매핑을 제거하는 대신 이 방법을 사용합니다.

중요

테이블에서 열 매핑을 삭제해도 분할된 테이블의 디렉터리 이름에 사용되는 임의의 접두사는 제거되지 않습니다.

Delta Lake 테이블 기능 삭제 및 테이블 프로토콜 다운그레이드를 참조하세요.

열 매핑 및 스트리밍

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

데이터 원본에 대한 각 스트리밍 읽기는 고유한 schemaTrackingLocation 지정이 있어야 합니다. 지정된 schemaTrackingLocation 내용은 스트리밍 쓰기를 위해 checkpointLocation 대상 테이블의 지정된 디렉터리 내에 포함되어야 합니다. 여러 원본 델타 테이블의 데이터를 결합하는 스트리밍 워크로드의 경우 각 원본 테이블에 대해 고유한 디렉터리를 checkpointLocation 지정해야 합니다.

실행 중인 작업에서 열 매핑 사용

중요

실행 중인 스트리밍 작업에서 열 매핑을 사용하도록 설정하려면 다음을 수행합니다.

  1. 작업 중지
  2. 테이블에서 열 매핑 사용
  3. 작업 다시 시작(먼저 다시 시작 - 열 매핑 초기화)
  4. 작업을 다시 시작합니다(두 번째 재시작 - 스키마 변경을 허용)

추가 스키마 변경(열 추가 또는 삭제, 열 형식 변경)도 작업을 다시 시작해야 합니다.

스키마 추적 위치 지정

다음 예제는 Delta 테이블에서 열 매핑으로 스트리밍을 읽을 때 schemaTrackingLocation를 지정하는 방법을 보여줍니다.

checkpoint_path = "/path/to/checkpointLocation"

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

다음 단계: