다음을 통해 공유


Iceberg 클라이언트를 사용하여 델타 테이블 읽기

이 문서에서는 Azure Databricks에서 Delta Lake와 함께 저장된 테이블에서 Iceberg 읽기를 사용하도록 설정하는 세부 정보를 제공합니다. 이 기능을 사용하려면 Databricks Runtime 14.3 LTS 이상이 필요합니다.

참고 항목

이 기능을 이전에 Delta Lake Universal Format(UniForm)이라고 했습니다.

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

Iceberg 읽기(UniForm)는 어떻게 작동하나요?

Delta Lake와 Iceberg는 Parquet 데이터 파일과 메타데이터 계층으로 구성됩니다. Iceberg 읽기를 사용하도록 설정하면 Iceberg 클라이언트가 Azure Databricks에서 작성한 델타 테이블을 읽을 수 있도록 데이터를 다시 작성하지 않고도 자동으로 Iceberg 메타데이터를 비동기적으로 생성하도록 테이블이 구성됩니다. 데이터 파일의 단일 복사본은 여러 형식을 제공합니다.

Important

  • Iceberg 읽기가 사용하도록 설정된 테이블은 기본 Parquet 데이터 파일에 대한 압축 코덱으로 Snappy 대신 Zstandard를 사용합니다.
  • Iceberg 메타데이터 생성은 델타 테이블에 데이터를 쓰는 데 사용되는 컴퓨팅에서 비동기적으로 실행되어 드라이버 리소스 사용량이 증가할 수 있습니다.
  • 레거시 UniForm IcebergCompatV1 테이블 기능에 대한 설명서를 보려면 레거시 UniForm IcebergCompatV1를 참조하세요.

요구 사항

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

  • 델타 테이블은 Unity 카탈로그에 등록해야 합니다. 관리 테이블과 외부 테이블이 모두 지원됩니다.
  • 테이블에 열 매핑을 사용하도록 설정해야 합니다. Delta Lake 열 매핑을 사용하여 열 이름 바꾸기 및 삭제를 참조하세요.
  • 델타 테이블에는 minReaderVersion>= 2, minWriterVersion>= 7이 있어야 합니다. Azure Databricks에서 Delta Lake 기능 호환성을 관리하는 방법을 참조하세요.
  • 테이블에 대한 쓰기는 Databricks Runtime 14.3 LTS 이상을 사용해야 합니다.

참고 항목

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

기존 삭제 벡터가 설정된 테이블에서 Iceberg 읽기를 활성화하면서 REORG을 사용하여 삭제 벡터를 비활성화하고 삭제하세요. REORG을 사용하여 Iceberg 읽기 지원을 활성화하거나 업그레이드하는 방법을 참조하세요.

Iceberg 읽기 활성화(UniForm)

Important

Iceberg 읽기를 사용하도록 설정하면 IcebergCompatV2 쓰기 프로토콜 기능이 테이블에 추가됩니다. 이 테이블 기능을 지원하는 클라이언트만 Iceberg 읽기를 사용하도록 설정된 테이블에 쓸 수 있습니다. Azure Databricks에서 Databricks Runtime 14.3 LTS 이상을 사용하여 사용 가능한 테이블에 작성해야 합니다.

delta.universalFormat.enabledFormats 테이블 속성을 설정 해제하여 Iceberg 읽기를 끌 수 있습니다. Delta Lake 판독기 및 기록기 프로토콜 버전으로의 업그레이드는 취소할 수 없습니다.

다음 테이블 속성을 설정하여 Iceberg 읽기를 사용하도록 설정해야 합니다.

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

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

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

테이블 생성 중 Iceberg 읽기 활성화

열 매핑은 Iceberg 읽기를 사용하기 위해 활성화되어야 합니다. 다음 예제와 같이 테이블을 만드는 동안 Iceberg 읽기를 사용하도록 설정하면 자동으로 발생합니다.

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

기존 테이블에서 Iceberg 읽기를 활성화

Databricks Runtime 15.4 LTS 이상에서는 다음 구문을 사용하여 기존 테이블에서 Iceberg 읽기를 사용하거나 업그레이드할 수 있습니다.

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

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

다음 예제와 같이 REORG 사용하여 Iceberg 읽기를 사용하도록 설정하고 기본 데이터 파일을 다시 쓸 수 있습니다.

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

다음 중 어느 것이 true이면 REORG 사용합니다.

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

Iceberg 메타데이터 생성은 언제 발생하나요?

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

참고 항목

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

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

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

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

델타 및 빙산 테이블 버전

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

일반적으로 델타 테이블 버전은 커밋 타임스탬프 또는 버전 ID에 따라 Iceberg 버전과 일치하지 않습니다. 지정된 버전의 Iceberg 테이블에 해당하는 델타 테이블의 버전을 확인하려면 해당 테이블 속성을 사용할 수 있습니다. Iceberg 메타데이터 생성 상태 확인을 참조하세요.

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

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

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

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

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

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

SHOW TBLPROPERTIES <table-name>;

수동으로 Iceberg 메타데이터 변환 트리거

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

이 작업은 정상적인 조건에서는 필요하지 않지만 다음과 같은 경우에 도움이 될 수 있습니다.

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

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

MSCK REPAIR TABLE <table-name> SYNC METADATA

REPAIR TABLE을 참조하세요.

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

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

Iceberg를 구성하기 위해 메타데이터 JSON 경로를 사용하는 클라이언트에는 BigQuery가 포함됩니다. 구성 세부 정보는 Iceberg 판독기 클라이언트 설명서를 참조하세요.

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

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

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

  • Delta Uniform Iceberg에서 반환한 DESCRIBE EXTENDED table_name 섹션을 검토합니다.
  • 카탈로그 탐색기를 사용하여 테이블 메타데이터 검토
  • REST API와 함께 다음 명령을 사용합니다.
GET api/2.1/unity-catalog/tables/<catalog-name>.<schame-name>.<table-name>

응답에는 다음과 같은 정보가 포함됩니다.

{
    ...
          "delta_uniform_iceberg": {
              "metadata_location":  "<cloud-storage-uri>/metadata/v<version-number>-<uuid>.metadata.json"
    }
}

Important

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

제한 사항

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

  • 삭제 벡터가 활성화된 테이블에서는 Iceberg 읽기가 작동하지 않습니다. 삭제 벡터란?을 참조하세요.
  • Iceberg 읽기가 사용하도록 설정된 델타 테이블은 VOID 형식을 지원하지 않습니다.
  • Iceberg 클라이언트 지원은 읽기 전용입니다. 쓰기는 지원되지 않습니다.
  • Iceberg 판독기 클라이언트는 Iceberg 읽기에 대한 Azure Databricks 지원에 관계없이 개별 제한 사항이 있을 수 있습니다. 선택한 클라이언트에 대한 설명서를 참조하세요.
  • Delta Sharing의 수신자는 Iceberg 읽기를 사용하는 경우에도 테이블을 델타로 읽을 수 있습니다.
  • Iceberg 읽기에서 사용되는 일부 Delta Lake 테이블 기능은 일부 델타 공유 판독기 클라이언트에서 지원되지 않습니다. Delta Sharing이란?을 참조하세요.

변경 데이터 피드는 Iceberg 읽기를 사용할 때 델타 클라이언트에서 작동하지만, Iceberg 자체에서는 지원되지 않습니다.