다음을 통해 공유


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

중요합니다

이 기능은 공개 미리 보기로 제공되며 현재 참여 고객에게만 제공됩니다. 미리 보기에 참여하려면 이 양식을 작성하여 제출하세요. 이 기능은 HMS 및 Glue 페더레이션을 사용하여 페더레이션된 외부 테이블 변환만 지원합니다.

이 페이지에서는 외세 테이블을 관리되는 테이블로 변환하는 데 사용하는 SET MANAGED 방법을 설명합니다.

SET MANAGED 개요

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

  • 테이블 기록 유지
  • 동일한 이름, 설정, 사용 권한 및 보기를 포함하여 동일한 테이블 구성을 유지합니다.
  • 예측 최적화의 이점을 활용합니다. 테이블을 관리형으로 변환할 때 예측 최적화는 스키마 또는 카탈로그 수준에서 설정을 상속하는 것으로 설정 INHERIT됩니다. 기본적으로 이 기능은 현재 사용하지 않도록 설정되어 있습니다. 변환된 테이블에서 ALTER TABLE <table_name> ENABLE PREDICTIVE OPTIMIZATION을 실행하여 예측 최적화를 활성화할 수 있으며, 이를 통해 ENABLED 대신 INHERIT로 설정됩니다.

필수 조건

  • 데이터 형식: 외세 테이블의 데이터 형식은 Delta Lake여야 합니다. Parquet에 대해 일회성 변환을 수행하려면 Delta Lake로 변환을 참조하세요.
  • 테이블 형식: HMS 테이블 형식은 외부 HMS 테이블이어야 합니다. 테이블이 관리되는 HMS 테이블이면 명령이 실패합니다.
  • 런타임: Databricks Runtime 17.3 이상
  • 사용 권한: OWNER 또는 MANAGE 테이블에 대한 사용 권한 및 CREATEEXTERNAL LOCATION에 대한 사용 권한

문법

Unity 카탈로그 외세 테이블을 Unity 카탈로그 관리형으로 변환하려면 다음 명령을 실행합니다.

ALTER TABLE source_table SET MANAGED {MOVE | COPY}

매개 변수

  • source_table

    Unity 카탈로그의 기존 외부 테이블입니다. 외장 테이블에는 외부 카탈로그에서 관리하는 데이터 및 메타데이터가 포함됩니다. 변환하기 전에 원본 테이블을 외부 카탈로그에 놓으면 Unity 카탈로그에서도 외국 테이블이 삭제됩니다. 테이블이 관리형으로 변환되면 외부 카탈로그에서 원본 테이블을 삭제해도 Unity 카탈로그 관리 테이블에는 영향을 주지 않습니다.

  • MOVE

    테이블을 관리형으로 변환하고 외부 카탈로그의 원본 테이블에 대한 액세스를 사용하지 않도록 설정합니다.

    • 테이블을 변환한 후 외부 카탈로그 또는 경로 기반 액세스를 통한 액세스가 실패합니다. 테이블에 대한 모든 판독기 및 기록기는 액세스에 Unity 카탈로그 네임스페이스를 사용해야 합니다.

    • 모든 판독기 및 작성자는 이름 기반 액세스를 사용해야 합니다. 다음은 그 예입니다.

      SELECT * FROM catalog_name.schema_name.table_name;
      
    • 경로 기반 액세스는 지원되지 않으며 테이블을 변환한 후 실패합니다. 다음은 그 예입니다.

      SELECT * FROM delta.`protocol://path/to/table`;
      
    • 외부(비 Azure Databricks) 클라이언트는 Unity 카탈로그 관리 테이블에 대한 읽기를 지원해야 합니다. 호환 모드를 참조하세요.

    • Access Insights 대시보드를 사용하여 테이블에 액세스하는 판독기 및 기록기가 Databricks 런타임 또는 외부 비 Azure Databricks 클라이언트인지 확인합니다.

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

    • 변환 중에 판독기 또는 기록기가 테이블에 액세스할 때 가동 중지 시간이 발생할 수 있습니다. 자세한 내용은 외부 테이블을 관리형 Unity 카탈로그 테이블로 변환을 참조하세요.

    • 명령이 중단되면 관리되는 테이블로의 변환이 완료되지 않아 테이블이 외부 테이블로 남을 수 있습니다. 명령을 완료하려면 외부 테이블에서 다시 실행 SET MANAGED 합니다.

    • 수동으로 구성하지 않는 한, 예측 최적화는 INHERIT로 설정됩니다. 예측 최적화를 사용할 수 있는지 확인하려면 예측 최적화를 사용할 수 있는지 여부를 확인합니다.

    • 롤백: 테이블 마이그레이션을 롤백하고 외부 카탈로그의 원본 테이블에 다시 액세스하려면 명령을 실행합니다 UNSET MANAGED . 명령을 실행한 후 테이블이 외부 테이블이 됩니다. 테이블을 외부 테이블로 반환하려면 테이블을 삭제하고 다음 카탈로그 동기화 시 외부 테이블로 다시 연동됩니다.

      ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED
      

      경고

      테이블을 삭제하기 전에 반드시 UNSET MANAGED를 실행해야 합니다. 먼저 실행 UNSET MANAGED 하지 않고 테이블을 삭제하면 시스템이 잘못된 상태로 남을 수 있으며 데이터 손실 또는 불일치가 발생할 수 있습니다.

    • 롤백하는 경우 변환과 롤백 사이의 외부 위치에 대해 수행한 커밋은 버전별로 시간 이동 가능하지만 타임스탬프에서는 이동 가능하지 않습니다. 롤백 후 7일 후에 관리되는 위치의 데이터가 삭제됩니다. Databricks Runtime 15.4 LTS 이상의 판독기 및 기록기에서는 변환 후 하지만 롤백 전에 수행한 커밋에 대한 테이블 기록은 버전별로 시간 이동이 가능하지만 타임스탬프에 의해서는 이동 가능하지 않습니다.

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

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

    외부 카탈로그의 원본 테이블에 대한 액세스를 수정하거나 사용하지 않도록 설정하지 않고 테이블을 관리 테이블로 변환합니다.

    • 관리형으로 변환하는 동안 원본 테이블의 데이터가 외세 테이블에 대해 정의된 관리되는 스토리지 위치로 복사되어 외부 카탈로그의 새 관리되는 테이블과 원본 테이블이라는 두 개의 개별 복사본을 만듭니다.
    • 읽기 및 쓰기가 실패하는 경우와 달리 MOVE , 사용할 COPY때는 외부 카탈로그의 원본 테이블에 대한 읽기 및 쓰기를 적절하게 사용하지 않도록 설정하여 워크로드가 새 카탈로그로 마이그레이션되었는지 확인해야 합니다.
    • 롤백: 테이블 마이그레이션을 롤백하려면 원본 테이블이 외부 카탈로그에서 중단되지 않았기 때문에 명령을 실행할 UNSET MANAGED 필요가 없습니다. 테이블을 삭제하면, 다음 카탈로그 동기화 시 외부 테이블로 다시 결합됩니다.

변환 확인

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

DESCRIBE EXTENDED catalog_name.schema_name.table_name

테이블이 변환된 경우 아래와 Type 같이 col_name 아래에 MANAGEDdata_type표시됩니다.

알려진 제한 사항

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

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

  • 여러 클라우드 지역: Unity 카탈로그 메타스토어, 카탈로그 또는 스키마의 기본 관리 위치가 변환 중인 외세의 스토리지 위치와 다른 클라우드 지역에 있는 경우 지역 간 데이터 전송 비용이 추가로 발생할 수 있습니다. 클라우드 공급자는 Azure Databricks의 제어 외부에서 이러한 요금을 부과합니다. 스키마, 카탈로그 및 메타스토어의 위치를 확인하려면 다음 명령을 사용합니다.

    -- Check schema location
    DESCRIBE SCHEMA EXTENDED catalog_name.schema_name;
    
    -- Check catalog location
    DESCRIBE CATALOG EXTENDED catalog_name;
    
    -- Check metastore location
    DESCRIBE METASTORE;
    

자주 묻는 질문(FAQ)

테이블을 만들고 외국 카탈로그에서 테이블을 변환할 수 있나요?

예, 외부 또는 관리형 테이블을 외국 카탈로그에 만들 수 있습니다. 동작은 스키마 구성에 따라 달라집니다.

  • Glue 또는 eHMS 스키마의 경우 또는 Unity 카탈로그에서 관리되는 위치가 설정된 스키마의 경우: 실행하는 CREATE TABLE foreign_catalog.schema.table경우 Unity 카탈로그 관리 테이블 또는 외부 테이블이 만들어집니다. 테이블이 외부 카탈로그에 푸시되거나 동기화되지 않습니다.
  • 내부 Hive 메타스토어 연결의 스키마의 경우: 외부 스키마에서 테이블을 만들려고 하면 여전히 외부 테이블을 생성하고 hive_metastore에 테이블을 만듭니다.
  • 레거시 작업 영역 Hive 메타스토어의 경우: 읽기 및 쓰기 페더레이션이므로 외세의 카탈로그에 테이블을 만들면 내부 Hive 메타스토어에도 테이블이 만들어집니다.

외부 테이블이 DBFS로 뒷받침되면 어떻게 되나요?

DBFS 지원 테이블을 변환할 때 클라우드 경로에 대한 DBFS 경로의 현재 매핑을 외부 테이블의 클라우드 경로 위치로 저장합니다.

스키마 또는 카탈로그 수준에서 변환할 수 있나요?

스키마의 테이블을 반복하여 개별적으로 변환하거나 discoverx labs 프로젝트를 활용하여 전체 스키마 또는 카탈로그를 한 번에 변환할 수 있습니다.

df = (dx.from_tables("prod.*.*")
.with_sql("ALTER TABLE {full_table_name} SET MANAGED;")
.apply())