다음을 통해 공유


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

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

중요

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

델타 테이블을 읽기 위해 디렉터리 이름을 사용하는 레거시 패턴을 사용하는 경우 열 매핑을 사용하도록 설정하면 레거시 워크로드가 중단될 수 있습니다. 열 매핑을 사용하도록 설정된 분할된 테이블은 파티션 디렉터리에 열 이름 대신 임의의 접두사를 사용합니다. Delta Lake와 Parquet가 파티셔닝 전략을 공유하는지 참조하세요..

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

테이블에서 열 매핑을 활성화하면 델타 테이블을 원본으로 사용한 스트리밍 읽기가 중단될 수 있으며, 이는 Lakeflow 선언적 파이프라인에서도 마찬가지입니다. 열 매핑 및 스키마 변경 내용이 포함된 스트리밍을 참조하세요.

열 매핑 사용

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

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

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

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

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

열 매핑 사용 안 함

Databricks Runtime 15.3 이상에서는 이 명령을 사용하여 DROP FEATURE 테이블에서 열 매핑을 제거하고 테이블 프로토콜을 다운그레이드할 수 있습니다.

중요

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

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

열 이름 바꾸기

참고

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=에 공백과 이러한 문자를 포함할 수 있습니다.

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

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

데이터 원본에 대한 각 스트리밍 읽기는 고유한 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")
)