다음을 통해 공유


외부 테이블을 관리형 Unity 카탈로그 테이블로 변환

이 페이지에서는 이 명령을 사용하여 ALTER TABLE ... SET MANAGED 외부 테이블을 Azure Databricks의 Unity 카탈로그 관리형 테이블로 변환하는 방법을 설명합니다.

SET MANAGED 개요

SET MANAGED 기능을 사용하여 외부 테이블을 Azure Databricks의 Unity 카탈로그 관리형 테이블로 변환할 수 있습니다. SET MANAGED는 다음과 같은 이점을 제공합니다.

  • 판독기 및 기록기 가동 중지 시간을 최소화합니다.
  • 변환 중에 동시 쓰기 처리
  • 테이블 기록 유지
  • 동일한 이름, 설정, 사용 권한 및 보기를 포함하여 동일한 테이블 구성을 유지합니다.
  • 변환된 관리형 테이블을 외부 테이블로 롤백하는 기능.

Prerequisites

테이블 변환 기능을 사용하려면 다음 필수 구성 요소를 충족해야 합니다.

  • 외부 테이블에 대한 모든 판독기 및 기록기는 이름 기반 액세스를 사용해야 합니다. 다음은 그 예입니다.

    SELECT * FROM catalog_name.schema_name.table_name;
    

    경로 기반 액세스는 지원되지 않으며 테이블이 변환된 후 실패할 수 있습니다.

  • Databricks Runtime 17.0 이상 또는 서버리스 컴퓨팅을 사용하거나 SET MANAGED사용해야 UNSET MANAGED 합니다.

  • Iceberg 읽기(UniForm)가 이미 설정된 Unity 카탈로그 테이블을 변환하려면 Databricks Runtime 17.2 이상 또는 서버리스 컴퓨팅을 사용하여 TRUNCATE UNIFORM HISTORY을 사용해야 합니다.

  • Azure Databricks 판독기 및 기록기는 Databricks Runtime 15.4 LTS 이상을 사용해야 합니다. 판독기 또는 작성기가 14.3 LTS 이하를 사용하는 경우 Databricks Runtime 14.3 LTS 이하의 판독기 및 기록기에 대한 대체 옵션을 참조하세요.

  • SET MANAGED 명령은 테이블에 DELTA_TRUNCATED_TRANSACTION_LOG, minReaderVersion=2, 및 minWriterVersion=7가 있을 경우 tableFeatures={..., columnMapping} 오류로 인해 실패합니다. 를 사용하여 DESCRIBE DETAIL테이블에 이러한 속성이 있는지 확인할 수 있습니다.

  • 외부 비-Databricks 클라이언트는 Unity 카탈로그 관리 테이블에 대한 읽기를 지원해야 합니다. 델타 클라이언트를 사용하여 테이블 읽기를 참조하세요.

    • Access Insights 대시보드를 사용하여 테이블에 액세스하는 판독기와 기록기가 Databricks 런타임인지 아니면 외부 비 Databricks인지 확인합니다.

Important

충돌을 방지하려면 테이블에서 작동하는 기존 OPTIMIZE 명령 작업(액체 클러스터링, 압축, ZORDER)을 취소하고 외부 테이블을 관리되는 테이블로 변환하는 동안 작업을 예약하지 않습니다.

외부에서 관리되는 테이블로 변환

Important

SET MANAGED 명령은 Databricks Runtime 17.0 이상 및 서버리스 컴퓨팅에서 사용할 수 있습니다.

TRUNCATE UNIFORM HISTORY 명령은 Databricks Runtime 17.2 이상 및 서버리스 컴퓨팅에서 사용할 수 있습니다.

다음 명령 중 하나를 실행하여 Unity 카탈로그 외부 테이블을 Unity 카탈로그 관리형 테이블로 변환합니다.

  • Apache Iceberg 읽기(UniForm)를 사용하도록 설정하지 않은 Unity 카탈로그 외부 테이블의 경우:

    ALTER TABLE catalog.schema.my_external_table SET MANAGED;
    

    변환 후에는 호환성 문제 없이 관리되는 테이블에서 Iceberg 읽기를 사용하도록 설정할 수 있습니다.

  • Iceberg 읽기(UniForm)가 이미 사용하도록 설정된 Unity 카탈로그 외부 테이블의 경우:

    ALTER TABLE catalog.schema.my_external_table SET MANAGED TRUNCATE UNIFORM HISTORY;
    

    이 경우 최적의 테이블 성능 및 호환성을 유지하기 위해 포함합니다 TRUNCATE UNIFORM HISTORY . TRUNCATE UNIFORM HISTORY UniForm Iceberg 기록만 잘라내고 Delta 기록은 제거하지 않습니다. 이 명령은 잘림 후 Iceberg에 대한 짧은 읽기 및 쓰기 중단 시간을 초래합니다.

데이터를 복사하는 동안 명령이 중단되면 다시 시작할 수 있으며 중단된 위치에서 계속됩니다.

Warning

Databricks는 동일한 테이블에서 여러 SET MANAGED 명령을 동시에 실행하지 않는 것이 좋습니다. 이로 인해 테이블 상태가 일관되지 않을 수 있습니다.

테이블 변환 후에는 다음을 수행해야 합니다.

  • 외부 테이블을 사용하여 스트리밍 작업(읽기 또는 쓰기)을 다시 시작합니다.
  • 독자들과 작성자들이 관리되는 테이블과 함께 작업하는지 확인합니다.

예측 최적화는 수동으로 사용하지 않도록 설정한 경우를 제외하고 자동으로 사용하도록 설정됩니다. 예측 최적화가 사용되는지 여부를 확인합니다.

예측 최적화를 사용하도록 설정하면 Azure Databricks는 14일 후에 Unity 카탈로그 외부 위치에 있는 데이터를 자동으로 삭제합니다. 예측 최적화를 사용하지 않도록 설정한 경우 14일이 지난 후 새로 변환된 관리되는 테이블에서 실행 VACUUM (Databricks Runtime 17.0 이상 또는 서버리스 컴퓨팅 필요)할 수 있습니다.

VACUUM my_converted_table

Note

경우에 따라 예측 최적화를 사용하도록 설정한 경우에도 Unity 카탈로그 외부 위치의 데이터는 14일 후에 삭제되지 않을 수 있습니다. 예를 들어 Unity 카탈로그 관리 테이블이 자주 사용되지 않거나 매우 작은 경우 자동 삭제가 발생하지 않을 수 있습니다. 이 경우 14일 후에 새로 변환된 관리되는 테이블에서 수동으로 실행 VACUUM (Databricks Runtime 17.0 이상 또는 서버리스 컴퓨팅 필요)하여 이전 데이터를 제거합니다.

Azure Databricks는 외부 위치에 있는 데이터만 삭제합니다. Unity 카탈로그의 테이블에 대한 델타 트랜잭션 로그 및 참조가 유지됩니다.

변환 확인

외부 테이블이 관리되는 테이블로 변환되었는지 확인할 수 있습니다.

DESCRIBE EXTENDED catalog_name.schema_name.table_name

이 명령의 출력을 확인하여 테이블이 변환되었는지 확인합니다. 테이블 TypeMANAGED로 표시되어야 합니다.

카탈로그 탐색기에서 테이블 정보를 보는 경우 페이지를 새로 고칩니다. 세부 정보 탭의 이 테이블 정보에서 표 형식은 다음과 같이 MANAGED표시됩니다.

Databricks Runtime 14.3 LTS 이하의 판독기 및 기록기에 대한 대체 옵션

Databricks는 SET MANAGED 명령어를 이용하고 테이블 기록을 유지하는 기능을 포함한 혜택을 누리기 위해 모든 리더와 라이터를 Databricks Runtime 15.4 LTS 이상으로 업그레이드하는 것이 좋습니다.

Databricks Runtime 14.3 이하의 판독기 또는 기록기가 있는 경우에도 SET MANAGED 명령을 사용할 수 있습니다. 그러나 관리되는 테이블로 변환한 후에는 타임스탬프별로 기록 커밋으로 시간 이동이 불가능합니다. 버전별로만 수행할 수 있습니다. 만약 14일 동안 외부 테이블로 롤백하면, 변환 전에 수행된 기록 커밋으로의 시간 여행 기능이 다시 활성화됩니다.

모든 경우(DBR 버전에 관계없이) 타임스탬프를 통해 UC 외부로 롤백하려는 작업은 변환된 UC 관리 테이블에 변환 완료 후 롤백을 시도하기 전 사이에 이루어진 커밋에 대해 작동하지 않습니다.

Databricks Runtime 15.4 LTS 이하로 변환한 후 테이블에 쓰려면 inCommitTimestamp 기능을 삭제해야 합니다.

ALTER TABLE <table_name> DROP FEATURE inCommitTimestamp;

변환 오류 문제 해결

이 섹션에서는 외부 테이블을 Unity 카탈로그 관리 테이블로 변환할 때 발생하는 일반적인 문제와 이를 해결하는 방법을 설명합니다.

DBR 버전 일관성

다른 Databricks 런타임 버전을 사용하여 동일한 테이블의 변환을 실행하거나 다시 시도하지 마세요. 메타데이터는 버전 간에 다르게 직렬화될 수 있으므로 오류가 발생합니다 VERSIONED_CLONE_INTERNAL_ERROR.EXISTING_FILE_VALIDATION_FAILED . 변환에 실패하면 항상 동일한 Databricks 런타임 버전을 사용하여 다시 시도합니다.

변환 중 클러스터 종료

변환 중 클러스터가 종료되면 명령이 DELTA_ALTER_TABLE_SET_MANAGED_INTERNAL_ERROR와 함께 실패할 수 있습니다. 명령을 다시 시도하여 변환을 다시 시작합니다.

손상된 외부 테이블

외부 테이블이 이미 손상된 경우(예: 잘못된 테이블 상태) 변환이 실패할 수 있습니다(예: DELTA_TRUNCATED_TRANSACTION_LOG, DELTA_TXN_LOG_FAILED_INTEGRITY, DELTA_STATE_RECOVER_ERRORS). 변환을 시도하기 전에 다음과 같은 DESCRIBE DETAIL외부 테이블에서 기본 작업을 실행할 수 있는지 확인합니다.

외부 테이블로 롤백

Important

UNSET MANAGED 명령은 Databricks Runtime 17.0 이상 및 서버리스 컴퓨팅에서 사용할 수 있습니다.

외부 테이블을 관리되는 테이블로 변환한 후 14일 이내에 롤백할 수 있습니다.

롤백하는 경우 변환과 롤백 사이의 외부 위치에 대한 커밋은 버전별로 시간 이동 가능하지만 타임스탬프로는 이동되지 않습니다. 롤백 후 7일 후에 관리되는 위치의 데이터가 삭제됩니다.

외부 테이블로 롤백하려면 다음 명령을 실행합니다.

ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED

롤백 명령이 중단되면 MANAGED 명령과 유사 SET 하게 다시 실행하여 다시 시도할 수 있습니다.

롤백 확인

변환이 롤백되었는지 확인할 수 있습니다.

DESCRIBE EXTENDED catalog_name.schema_name.table_name

이 명령의 출력을 확인하여 테이블이 롤백되었는지 확인합니다. 테이블 TypeEXTERNAL로 표시되어야 합니다.

카탈로그 탐색기에서 테이블 정보를 보는 경우 페이지를 새로 고칩니다. 세부 정보 탭의 이 테이블 정보에서 표 형식은 다음과 같이 EXTERNAL표시됩니다.

또한 변환과 유사하게 외부 테이블로 롤백한 후 스트리밍 작업을 다시 시작해야 합니다.

가동 중지 시간 및 데이터 복사 시간

변환 중에 판독기 또는 기록기가 테이블에 액세스할 때 가동 중지 시간이 발생할 수 있습니다. 그러나 이 명령은 'DEEP CLONE' 명령에 SET MANAGED 비해 판독기와 작성기에 대한 가동 중지 시간을 최소화하거나 제거합니다. Databricks Runtime 16.1 이상의 판독기는 가동 중지 시간이 발생하지 않습니다. 테이블 데이터와 델타 로그가 복사되는 첫 번째 단계에서는 판독기와 기록기가 영향을 받지 않습니다.

두 번째 단계에서는 Unity 카탈로그 외부 위치에 대한 쓰기가 차단되고 첫 번째 데이터 복사 중에 외부 위치에 대한 커밋이 이동됩니다. 이 두 번째 데이터 복사 단계에서는 Databricks Runtime 15.4 LTS 이하의 기록기 및 판독기에 가동 중지 시간이 발생합니다.

그러면 판독기와 작성기가 Unity 카탈로그 관리 위치로 이동되고 새 관리되는 테이블 위치가 Unity 카탈로그에 등록됩니다. Databricks Runtime 16.1 이상을 사용하는 판독기는 가동 중지 시간이 발생하지 않습니다.

예상 가동 중지 시간은 다음과 같습니다.

테이블 크기 권장 클러스터 크기 데이터 복사 시간 판독기 및 기록기 가동 중지 시간
100GB 이하 32코어/DBSQL 작음 ~6분 이하 ~1-2분 이하
1TB 64코어/DBSQL 중간 ~30분 ~1-2min
10TB 256코어/DBSQL 엑스라지 ~1.5시간 ~1-5min

예상 처리량은 0.5-2GB/CPU 코어/분이라고 가정합니다.

Note

가동 중지 시간은 다를 수 있습니다. 변환의 성능은 파일 크기, 파일 수 및 커밋 수와 같은 요인에 따라 달라집니다.

알려진 제한 사항

외부 테이블을 관리되는 테이블로 변환하는 데는 다음과 같은 제한 사항이 있습니다.

  • 스트리밍 클라이언트: 변환 후 스트리밍 작업을 다시 시작해야 합니다.

  • 롤백 후 테이블 기록 제약 조건: Databricks Runtime 15.4 LTS 이상의 판독기/기록기에서 커밋에 대한 테이블 기록은 변환 후 수행되었지만 롤백 전의 테이블 기록은 버전별로 이동 가능하지만 타임스탬프가 아닌 시간 이동이 가능합니다.

  • 델타 공유 제한 사항: 이 SET MANAGED 명령은 델타 공유와 완전히 호환되지 않습니다. 열린 델타 공유는 예상대로 작동하지만 Databricks-to-Databricks 공유는 받는 사람 테이블의 관리되는 위치를 자동으로 업데이트하지 않습니다. 받는 사람은 테이블을 다시 공유할 때까지 이전 위치에서 계속 읽습니다. 테이블을 다시 공유하려면 다음을 수행합니다.

    ALTER SHARE <share_name> REMOVE TABLE <table_name>;
    ALTER SHARE <share_name> ADD TABLE <table_name> AS <table_share_name> WITH HISTORY;
    
  • 여러 클라우드 지역: Unity 카탈로그 메타스토어, 카탈로그 또는 스키마의 기본 관리 위치가 변환 중인 외부 테이블의 스토리지 위치와 다른 클라우드 지역에 있는 경우 지역 간 데이터 전송 비용이 추가로 발생할 수 있습니다. 클라우드 공급자는 Databricks 제어 외부에서 이러한 요금을 부과합니다.

    스키마, 카탈로그 및 메타스토어의 위치를 확인하려면 다음 명령을 사용할 수 있습니다.

    DESC SCHEMA EXTENDED <catalog_name>.<schema_name>;
    
    DESC CATALOG EXTENDED <catalog_name>;
    
    SELECT * FROM system.information_schema.metastores;