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

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

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

필수 구성 요소 및 제한 사항

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

  • 열 매핑이 사용하도록 설정된 테이블은 Databricks Runtime 10.4 LTS 이상에서만 읽을 수 있습니다.
  • 열 매핑을 사용하도록 설정하면 다음이 중단될 수 있습니다.

열 매핑 사용

다음 명령어를 사용하여 새 테이블에서 id 모드를 사용한 열 매핑을 활성화합니다.

CREATE table <table-name> (
  id INT,
  name STRING
)
USING DELTA
TBLPROPERTIES (
  'delta.columnMapping.mode' = 'id'
);

다음 명령을 사용하여 기존 테이블에서 name 모드로 열 매핑을 사용하도록 설정합니다.

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

열 매핑 모드에 대한 자세한 내용은 열 매핑 모드를 참조하세요.

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

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

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

열 이름 바꾸기

Note

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

Delta Lake 테이블에 열 매핑을 사용하는 경우 열 이름을 바꿀 수 있습니다.

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

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

열 삭제

Note

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

Delta Lake 테이블에 열 매핑을 사용하도록 설정하면 하나 이상의 열을 삭제할 수 있습니다.

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

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

열 매핑 모드

delta.columnMapping.mode 테이블 속성 컨트롤을 사용하면 데이터 파일을 다시 작성하지 않고도 메타데이터 전용 변경 내용으로 열을 삭제하거나 이름을 바꿀 수 있습니다. 다음 모드를 사용할 수 있습니다.

  • none (기본값): 열 매핑을 사용할 수 없습니다. 열 이름은 Parquet 명명 제약 조건이 적용됩니다.
  • name: 메타데이터 전용 열의 이름을 바꾸고 삭제할 수 있으며 열 이름에 특수 문자를 사용할 수 있습니다. name 모드는 새 테이블과 기존 테이블에 설정할 수 있습니다.
  • id: 메타데이터 전용 열의 이름을 바꾸고 삭제할 수 있으며 열 이름에 특수 문자를 사용할 수 있습니다. id 모드는 테이블을 만들 때 설정해야 하며 기존 테이블에 설정할 수 없습니다.

Note

Databricks는 id 호환성을 위해 대부분의 사용 사례에 모드를 권장합니다. 그러나 name 값을 delta.columnMapping.mode 제공하지 않고 UniForm과 같은 Iceberg 호환성 기능을 사용하도록 설정하면 모드가 자동으로 설정됩니다.

열 이름에서 지원되는 문자

Delta Lake 테이블에 열 매핑을 사용하도록 설정하면 열 이름 ,;{}()\n\t=에 공백과 이러한 문자를 포함할 수 있습니다.

열 매핑 제거

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

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

Warning

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

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

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

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

열 매핑 사용 안 함

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

Important

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

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

열 매핑 및 스트리밍

열 매핑이 활성화된 Delta Lake 테이블에서 스트리밍이 가능하도록 스키마 추적 위치를 제공할 수 있습니다. 이렇게 하면 비가산적 스키마 변경으로 인해 스트림이 손상될 수 있는 문제가 해결됩니다.

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

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

Important

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

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

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

스키마 추적 위치 지정

다음 예제에서는 열 매핑이 적용된 Delta Lake 테이블에서 스트리밍 읽기를 수행하기 위한 schemaTrackingLocation를 지정하는 방법을 보여줍니다.

checkpoint_path = "/path/to/checkpointLocation"

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

추가 리소스