Iceberg 클라이언트를 사용하여 Delta Lake 테이블 읽기

Databricks Runtime 14.3 LTS 이상에서 제공되며, Iceberg는 Delta Lake 테이블을 자동으로 생성하도록 읽고 설정하여 Iceberg 클라이언트가 파일을 다시 쓰지 않고도 Delta Lake 데이터를 읽을 수 있도록 합니다.

Unity 카탈로그가 Iceberg 카탈로그로 작동하도록 외부 연결을 구성할 수 있습니다. Apache Iceberg 클라이언트에서 Azure Databricks 테이블에 액세스하는 방법을 참조하세요.

빙산 읽기의 작동 방식

Delta Lake와 Apache Iceberg는 모두 Parquet 데이터 파일과 메타데이터 계층으로 구성됩니다. Iceberg 읽기를 활성화하면 Azure Databricks가 메타데이터 계층에 Universal Format(UniForm)을 사용하도록 테이블을 구성합니다. UniForm은 Parquet 데이터 파일을 다시 작성하지 않고 Delta Lake 메타데이터와 비동기적으로 Iceberg 메타데이터를 자동으로 생성합니다. 데이터 파일 단일 사본은 Delta와 Iceberg 클라이언트 모두를 지원합니다.

Iceberg 읽기를 사용하는 경우 다음을 고려합니다.

  • Iceberg 읽기가 활성화된 Delta Lake 테이블은 기본 Parquet 데이터 파일의 압축 코덱으로 Snappy 대신 Zstandard를 사용합니다.
  • Iceberg 메타데이터 생성은 Delta Lake 테이블에 데이터를 쓰는 데 사용되는 컴퓨팅에서 비동기적으로 실행되어 드라이버 리소스 사용량이 증가할 수 있습니다.

레거시 UniForm 테이블 기능에 대한 설명서는 레거시 UniForm IcebergCompatV1IcebergCompatV1을 참조하세요.

요구 사항

Iceberg 읽기를 사용하도록 설정하려면 다음 요구 사항을 충족해야 합니다.

  • Delta Lake 테이블은 Unity 카탈로그에 등록해야 합니다. 관리 테이블과 외부 테이블이 모두 지원됩니다.
  • 테이블에 열 매핑을 사용하도록 설정해야 합니다. Delta Lake 열 매핑을 사용하여 열 이름 바꾸기 및 삭제를 참조하세요.
    • IcebergCompatV2가 테이블에 대해 사용 설정된 후에는 columnMapping 테이블 기능을 삭제할 수 없습니다.
  • Delta Lake 테이블에는 minReaderVersion>= 2 및 minWriterVersion>= 7이 있어야 합니다. Delta Lake 기능 호환성 및 프로토콜을 참조하세요.
  • 테이블에 대한 쓰기는 Databricks Runtime 14.3 LTS 이상을 사용해야 합니다.

메모

Iceberg 읽기를 사용하도록 설정된 테이블에서 삭제 벡터를 사용하도록 설정할 수 없습니다.

삭제 벡터가 활성화된 기존 테이블에서 Iceberg 읽기를 활성화하는 동시에 삭제 벡터를 해제하고 완전히 제거하려면 REORG를 사용합니다. REORG을 사용하여 Iceberg 읽기 지원을 활성화하거나 업그레이드하는 방법을 참조하세요.

Iceberg 읽기 활성화

메모

Iceberg 읽기를 사용하도록 설정하면 쓰기 프로토콜 기능이 추가 IcebergCompatV2 되고 기록기 프로토콜이 업그레이드됩니다. 이 테이블 기능을 지원하는 클라이언트만 테이블에 쓸 수 있습니다. 이는 외부 Delta Lake 클라이언트와의 호환성에 영향을 줄 수 있습니다. Delta Lake 기능 호환성 및 프로토콜을 참조하세요.

Iceberg 읽기를 처음 사용하도록 설정하면 비동기 메타데이터 생성이 시작됩니다. 외부 클라이언트가 Iceberg를 사용하여 테이블을 쿼리하려면 먼저 이 작업을 완료해야 합니다. Iceberg 메타데이터 생성 상태 확인을 참조하세요.

제한 사항 목록은 제한 사항참조하세요.

테이블 생성 중

테이블을 만드는 동안 Iceberg 읽기를 사용하도록 설정하면 열 매핑이 자동으로 활성화됩니다.

CREATE TABLE T(c1 INT) TBLPROPERTIES(
  'delta.columnMapping.mode' = 'id',
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

Databricks는 호환성을 위해 설정하는 delta.columnMapping.mode = id 것이 좋습니다. Delta Lake 열 매핑을 사용하여 열 이름 바꾸기 및 삭제를 참조하세요.

기존 테이블에서

Databricks Runtime 15.4 LTS 이상의 기존 테이블에서 Iceberg 읽기를 사용하도록 설정하려면 다음을 수행합니다.

ALTER TABLE table_name SET TBLPROPERTIES(
  'delta.columnMapping.mode' = 'name',
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

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

REORG을 사용하여 Iceberg 읽기 지원을 활성화하거나 업그레이드하기

다음 중 하나라도 해당하면 Iceberg 읽기를 활성화하려면 REORG를 사용합니다.

  • 테이블에서 삭제 벡터를 사용하도록 설정했습니다.
  • 이전에 UniForm Iceberg의 IcebergCompatV1 버전을 사용하도록 설정했습니다.
  • 아테나 또는 Redshift와 같은 Hive 스타일의 Parquet 파일을 지원하지 않는 Iceberg 엔진에서 읽어야 합니다.

Iceberg 읽기를 사용하도록 설정하고 기본 데이터 파일을 다시 쓰려면 다음 예제와 같이 사용합니다 REORG .

REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));

Iceberg 읽기가 사용하도록 설정되어 있는지 확인

테이블에서 Iceberg 리드가 활성화되어 있는지 확인하기 위해 사용 DESCRIBE EXTENDED 하세요:

DESCRIBE EXTENDED catalog_name.schema_name.table_name;

출력에서 Delta Uniform Iceberg 섹션을 찾아보세요. 이 섹션이 포함되어 있으면 테이블에서 Iceberg 읽기가 활성화됩니다.

또는 SHOW TBLPROPERTIES를 사용할 수 있습니다.

SHOW TBLPROPERTIES catalog_name.schema_name.table_name;

다음 속성을 확인합니다.

  • delta.enableIcebergCompatV2 = true
  • delta.universalFormat.enabledFormats = iceberg

두 속성이 모두 이러한 값과 함께 있으면 Iceberg 읽기가 사용하도록 설정됩니다.

Iceberg 읽기 끄기

delta.universalFormat.enabledFormats 테이블 속성 설정을 해제하여 Iceberg 읽기를 끌 수 있습니다.

ALTER TABLE table_name UNSET TBLPROPERTIES ('delta.universalFormat.enabledFormats');

Delta Lake 판독기 및 기록기 프로토콜 버전으로의 업그레이드는 취소할 수 없습니다. Delta Lake 기능 호환성 및 프로토콜을 참조하세요.

Iceberg 메타데이터 생성

Azure Databricks는 Delta Lake 쓰기 트랜잭션이 완료된 후 메타데이터 생성을 비동기적으로 트리거합니다. 이 메타데이터 생성 프로세스는 Delta Lake 트랜잭션을 완료한 것과 동일한 컴퓨팅을 사용합니다.

Iceberg 메타데이터 생성을 수동으로 트리거할 수도 있습니다. 수동으로 Iceberg 메타데이터 변환 트리거를 참조하세요.

메타데이터 생성과 관련된 쓰기 대기 시간을 방지하기 위해 자주 커밋된 Delta Lake 테이블은 여러 Delta Lake 커밋을 Iceberg 메타데이터에 대한 단일 커밋으로 그룹화할 수 있습니다.

Delta Lake는 지정된 컴퓨팅 리소스에서 하나의 메타데이터 생성 프로세스만 진행되도록 합니다. 두 번째 동시 메타데이터 생성 프로세스를 트리거하는 커밋은 Delta Lake에 성공적으로 커밋되지만 비동기 Iceberg 메타데이터 생성을 트리거하지는 않습니다. 이렇게 하면 커밋이 자주 발생하는(커밋 간 간격이 몇 초~몇 분) 워크로드에 대한 메타데이터 생성 시 연속 대기 시간이 방지됩니다.

Delta 및 Iceberg 테이블 버전참조하세요.

델타 및 빙산 테이블 버전

Delta Lake 및 Iceberg는 테이블 메타데이터에 저장된 테이블 버전 또는 타임스탬프를 사용하여 시간 이동 쿼리를 허용합니다.

Delta Lake 테이블 버전은 커밋 타임스탬프 또는 버전 ID를 통해 Iceberg 버전과 일치하도록 보장되지 않습니다. 지정된 버전의 Iceberg 테이블이 해당하는 Delta Lake 테이블의 버전을 확인하려면 해당 테이블 속성을 사용합니다. Iceberg 메타데이터 생성 상태 확인을 참조하세요.

Iceberg 메타데이터 생성 상태 확인

테이블에서 Iceberg 읽기를 사용하도록 설정하면 Unity 카탈로그 및 Iceberg 테이블 메타데이터에 다음 필드가 추가되어 메타데이터 생성 상태를 추적합니다.

메타데이터 필드 Description
converted_delta_version Iceberg 메타데이터가 성공적으로 생성된 Delta Lake 테이블의 최신 버전입니다.
converted_delta_timestamp Iceberg 메타데이터가 성공적으로 생성된 최신 Delta Lake 커밋의 타임스탬프입니다.

Azure Databricks에서 다음 중 하나를 수행하여 이러한 메타데이터 필드를 검토할 수 있습니다.

  • Delta Uniform Iceberg에서 반환한 DESCRIBE EXTENDED table_name 섹션을 검토합니다.
  • 카탈로그 탐색기를 사용하여 테이블 메타데이터 검토

Azure Databricks 외부에서 테이블 속성을 검토하는 방법은 Iceberg 판독기 클라이언트에 대한 설명서를 참조하세요. OSS Apache Spark의 경우 다음 구문을 사용하여 이러한 속성을 볼 수 있습니다.

SHOW TBLPROPERTIES <table-name>;

수동으로 Iceberg 메타데이터 변환을 시작합니다.

Delta Lake 테이블의 최신 버전에 대해 Iceberg 메타데이터 생성을 수동으로 트리거할 수 있습니다. 이 작업은 동기적으로 실행됩니다. 완료되면 Iceberg에서 사용할 수 있는 테이블 내용에는 변환 프로세스가 시작될 때 사용할 수 있는 Delta Lake 테이블의 최신 버전이 반영됩니다.

이 작업은 정상적인 조건에서는 필요하지 않습니다. 다음 상황에서 복구하는 데 사용합니다:

  • 자동 메타데이터 생성이 성공하기 전에 클러스터가 종료됩니다.
  • 오류 또는 작업 실패로 메타데이터 생성이 중단됩니다.
  • UniForm Iceberg 메타데이터 생성을 지원하지 않는 클라이언트는 Delta Lake 테이블에 씁니다.

다음 구문을 사용하여 Iceberg 메타데이터 생성을 수동으로 트리거합니다.

MSCK REPAIR TABLE <table-name> SYNC METADATA

REPAIR TABLE을(를) 참조하세요.

메타데이터 JSON 경로를 사용하여 Iceberg 읽기

BigQuery와 같은 일부 Iceberg 클라이언트에서는 버전이 지정된 메타데이터 파일에 대한 경로를 제공하여 외부 Iceberg 테이블을 등록해야 합니다. Azure Databricks Delta Lake 테이블의 새 버전을 Iceberg로 변환할 때마다 새 메타데이터 JSON 파일을 만듭니다.

구성 세부 정보는 특정 Iceberg 판독기 클라이언트에 대한 설명서를 참조하세요.

Delta Lake는 다음 패턴을 사용하여 테이블 디렉터리 아래에 Iceberg 메타데이터를 저장합니다.

<table-path>/metadata/<version-number>-<uuid>.metadata.json

Azure Databricks에서 다음 중 하나를 수행하여 이 메타데이터 위치를 검토할 수 있습니다.

  • Delta Uniform Iceberg에서 반환한 DESCRIBE EXTENDED table_name 섹션을 검토합니다.
  • 카탈로그 탐색기를 사용하여 테이블 메타데이터 검토

Important

경로 기반 Iceberg 판독기 클라이언트는 현재 테이블 버전을 읽기 위해 메타데이터 JSON 경로를 수동으로 업데이트하고 새로 고쳐야 할 수 있습니다. Parquet 데이터 파일이 VACUUM를 사용해 Delta Lake 테이블에서 제거되므로, 오래된 버전으로 Iceberg 테이블을 쿼리하면 오류가 발생할 수 있습니다. VACUUM 및 Iceberg 메타데이터 정리를 참조하세요.

VACUUM 및 Iceberg 메타데이터 정리

Iceberg 읽기가 활성화된 Delta Lake 테이블에서는 테이블이 변경됨에 따라 Iceberg 메타데이터가 디렉터리에 metadata/ 누적됩니다. OPTIMIZE 그리고 Iceberg 작업으로의 변환은 이전 테이블 버전의 메타데이터를 삭제하지 않습니다. 오직 VACUUM만이 이를 제거합니다.

Databricks Runtime 17.2 이상에서 제공되며, VACUUM 디렉터리 내 metadata/ 추적되지 않은 파일을 삭제하되 클라이언트가 현재 테이블 버전을 읽기 위해 필요한 Iceberg 메타데이터를 유지합니다. 이 정리 작업은 VACUUM 모드로 실행되며, 이는 FULL의 기본값입니다.

이전 테이블 버전의 메타데이터를 정리하려면 보존 기간이 delta.deletedFileRetentionDuration 지난 후에 실행 VACUUM 하세요:

VACUUM table_name FULL

진공 모드에 대한 자세한 내용은 Full 모드와 lite 모드 비교를, 보존 기간에 대한 자세한 내용은 시간 여행 쿼리의 데이터 보존 기간 구성을 참조하세요.

예측 최적화가 활성화되어 있으면 Databricks가 자동으로 정리를 처리하므로 Iceberg 메타데이터 정리를 수동으로 실행할 VACUUM 필요가 없습니다.

제한 사항

Iceberg 읽기가 활성화된 모든 테이블에는 다음과 같은 제한 사항이 있습니다.

  • Iceberg 클라이언트 지원은 읽기 전용입니다. 쓰기는 지원되지 않습니다.
    • Iceberg 판독기 클라이언트는 Iceberg 읽기에 대한 Azure Databricks 지원에 관계없이 개별 제한 사항이 있을 수 있습니다. 선택한 클라이언트에 대한 설명서를 참조하세요.
  • 삭제 벡터는 Iceberg v2 읽기에 대해 지원되지 않습니다. 그러나 Apache Iceberg v3는 삭제 벡터를 지원합니다. Databricks에서Apache Iceberg v3 기능 및 삭제 벡터 사용을 참조하세요.
  • IcebergCompatV2를 사용하는 구체화된 뷰 또는 스트리밍 테이블에서는 Iceberg 읽기를 활성화할 수 없습니다. 파이프라인으로 관리되는 구체화 뷰와 스트리밍 테이블의 경우 IcebergCompatV3를 사용하여 외부 Iceberg 액세스를 활성화할 수 있습니다. 스트리밍 테이블 및 구체화된 뷰에 대한 외부 데이터 액세스 사용을 참조하세요.
  • Iceberg 메타데이터 생성을 자동으로 트리거하려면 Delta Lake 테이블에 경로가 아닌 이름으로 액세스해야 합니다.
  • Iceberg 읽기가 활성화된 Delta Lake 테이블은 VOID 형식을 지원하지 않습니다.
  • Iceberg 읽기에서 사용되는 일부 Delta Lake 테이블 기능은 일부 OpenSharing 판독기 클라이언트에서 지원되지 않습니다. OpenSharing이란?을 참조하세요.
  • OpenSharing 수신자는 Iceberg REST 카탈로그 API를 사용하여 Iceberg 읽기가 활성화된 Delta Lake 테이블을 Iceberg 테이블로 읽을 수 있습니다. 이 기능은 공개 미리보기 단계에 있습니다. 외부 Iceberg 클라이언트에 대한 공유 사용 설정을 참조하세요.
  • 레거시 변경 데이터 피드는 Iceberg 읽기가 사용 설정된 경우 Delta 클라이언트에서 작동하지만, Iceberg에서는 지원되지 않습니다. Delta Lake에 대한 레거시 변경 데이터 피드를 참조하세요.