UniForm을 사용하여 Iceberg 클라이언트에서 델타 테이블 읽기

Delta Universal Format(UniForm)을 사용하면 Iceberg 판독기 클라이언트를 사용하여 델타 테이블을 읽을 수 있습니다. 이 기능을 사용하려면 Databricks Runtime 14.3 LTS 이상이 필요합니다.

Important

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

UniForm은 Delta Lake와 Iceberg가 모두 Parquet 데이터 파일과 메타데이터 계층으로 구성되어 있다는 사실을 활용합니다. UniForm은 데이터를 다시 작성하지 않고도 자동으로 Iceberg 메타데이터를 비동기적으로 생성하므로 Iceberg 클라이언트는 Iceberg 테이블처럼 델타 테이블을 읽을 수 있습니다. 데이터 파일의 단일 복사본은 두 형식을 모두 제공합니다.

Unity 카탈로그가 Iceberg 카탈로그로 작동하도록 외부 연결을 구성할 수 있습니다. Unity 카탈로그 Iceberg 카탈로그 엔드포인트를 사용하여 읽기를 참조하세요.

UniForm은 기본 Parquet 데이터 파일의 압축 코덱으로 snappy 대신 zstd를 사용합니다.

참고 항목

UniForm 메타데이터 생성은 델타 테이블에 데이터를 쓰는 데 사용되는 컴퓨팅에서 비동기적으로 실행되어 드라이버 리소스 사용량이 증가할 수 있습니다.

요구 사항

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

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

참고 항목

UniForm이 설정된 테이블에서 삭제 벡터를 사용하도록 설정할 수 없습니다. 삭제 벡터가 활성화된 기존 테이블에서 UniForm을 사용하도록 설정하면 유니 폼은 삭제 벡터를 사용하지 않도록 설정하고 제거하며 필요에 따라 데이터 파일을 다시 작성합니다.

Delta UniForm 사용

Important

Delta UniForm을 사용하도록 설정하면 쓰기 프로토콜 기능인 델타 테이블 기능이 IcebergCompatV2설정됩니다. 이 테이블 기능을 지원하는 클라이언트만 UniForm 지원 테이블에 쓸 수 있습니다. 이 기능을 사용하도록 설정된 델타 테이블에 쓰려면 Databricks Runtime 14.3 LTS 이상을 사용해야 합니다.

테이블 속성을 설정 해제하여 UniForm을 해제할 delta.universalFormat.enabledFormats 수 있습니다. 열 매핑을 사용하도록 설정한 후에는 열 매핑을 해제할 수 없으며 Delta Lake 판독기 및 기록기 프로토콜 버전으로의 업그레이드는 실행 취소할 수 없습니다.

Iceberg에 대해 UniForm 지원을 사용하도록 설정하려면 다음 테이블 속성을 설정해야 합니다.

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

또한 UniForm을 사용하려면 열 매핑을 사용하도록 설정해야 합니다. 다음 예제와 같이 테이블을 만드는 동안 UniForm을 사용하도록 설정하면 자동으로 활성화됩니다.

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

다음 구문을 사용하여 기존 테이블에서 UniForm을 사용하도록 설정할 수 있습니다.

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

참고 항목

이 구문은 테이블 기능을 IcebergCompatV1사용한 UniForm의 공개 미리 보기 버전에서 업그레이드하는 데도 작동합니다.

이 구문은 테이블에서 삭제 벡터를 자동으로 사용하지 않도록 설정하고 제거합니다. 기존 파일은 Iceberg 호환을 위해 필요에 따라 다시 작성됩니다.

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

참고 항목

BigQuery를 Iceberg 판독기 클라이언트로 사용하려는 경우 데이터 레이아웃에 대한 BigQuery 요구 사항을 수용하려면 Azure Databricks로 설정 spark.databricks.delta.write.dataFilesToSubdirtrue 해야 합니다.

제한 사항을 참조 하세요.

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

Azure Databricks는 Delta Lake 쓰기 트랜잭션이 델타 트랜잭션을 완료한 것과 동일한 컴퓨팅을 사용하여 완료된 후 Iceberg 메타데이터 생성을 비동기적으로 트리거합니다. Iceberg 메타데이터 생성을 수동으로 트리거할 수도 있습니다. 수동으로 Iceberg 메타데이터 변환 트리거를 참조하세요.

Iceberg 메타데이터 생성과 관련된 쓰기 대기 시간을 방지하기 위해 커밋이 자주 발생하는 델타 테이블은 여러 델타 커밋을 단일 Iceberg 커밋으로 번들로 묶을 수 있습니다.

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

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

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

UniForm은 다음 필드를 Unity 카탈로그 및 Iceberg 테이블 메타데이터에 추가하여 메타데이터 생성 상태 추적합니다.

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

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

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 테이블을 등록하기 위해 버전이 지정된 메타데이터 파일에 대한 경로를 제공해야 합니다. UniForm은 델타 테이블의 새 버전을 Iceberg로 변환할 때마다 새 메타데이터 JSON 파일을 만듭니다.

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

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

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

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

  • 에서 반환DESCRIBE EXTENDED table_nameDelta Uniform Iceberg 섹션 검토
  • 카탈로그 탐색기를 사용하여 테이블 메타데이터 검토
  • 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 데이터 파일이 델타 테이블에서 제거될 때 오래된 버전을 사용하여 Iceberg 테이블을 VACUUM쿼리할 때 오류가 발생할 수 있습니다.

Unity 카탈로그 Iceberg 카탈로그 엔드포인트를 사용하여 읽기

일부 Iceberg 클라이언트는 Iceberg REST 카탈로그에 연결할 수 있습니다. Unity 카탈로그는 엔드포인트 /api/2.1/unity-catalog/iceberg를 사용하여 UniForm을 사용하도록 설정된 Delta 테이블에 대한 Iceberg REST 카탈로그 API의 읽기 전용 구현을 제공합니다. 이 REST API 사용에 대한 자세한 내용은 Iceberg REST API 사양을 참조하세요.

Iceberg 카탈로그 API를 지원하는 것으로 알려진 클라이언트에는 Apache Spark, Flink 및 Trino가 포함됩니다. UniForm을 사용하도록 설정된 Delta 테이블을 포함하는 기본 클라우드 개체 스토리지에 대한 액세스를 구성해야 합니다. 구성 세부 정보는 Iceberg 판독기 클라이언트에 대한 설명서를 참조하세요.

다른 서비스가 Unity 카탈로그에 연결할 수 있도록 Azure Databricks 개인용 액세스 토큰을 생성하고 구성해야 합니다. Azure Databricks 자동화에 대한 인증 - 개요를 참조하세요.

다음은 UniForm을 Iceberg로 읽도록 OSS Apache Spark를 구성하는 설정의 예입니다.

"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.sql.catalog.unity"="org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.unity.catalog-impl": "org.apache.iceberg.rest.RESTCatalog",
"spark.sql.catalog.unity.uri": "<api-root>/api/2.1/unity-catalog/iceberg",
"spark.sql.catalog.unity.token":"<your_personal_access_token>",
"spark.sql.catalog.unity.io-impl": "org.apache.iceberg.aws.s3.S3FileIO

개인 액세스 토큰을 생성한 작업 영역의 전체 URL을 대체합니다 <api-root>.

참고 항목

이 메서드를 사용하여 Unity 카탈로그의 테이블을 쿼리할 때 개체 식별자는 다음 패턴을 사용합니다.

unity.<catalog-name>.<schema-name>.<table-name>

이 패턴은 Unity 카탈로그에 있는 동일한 3계층 이름 간격을 사용하지만 추가 접두 unity사를 추가합니다.

Delta 및 Iceberg 테이블 버전

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

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

제한 사항

다음 제한 사항이 존재합니다.

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

변경 데이터 피드는 UniForm이 사용하도록 설정되어 있지만 Iceberg에서 지원되지 않는 경우 델타 클라이언트에 대해 작동합니다.

UniForm에서 사용하는 일부 Delta Lake 테이블 기능은 일부 델타 공유 판독기 클라이언트에서 지원되지 않습니다. 델타 공유를 사용하여 안전하게 데이터 및 AI 자산 공유를 참조하세요.