중요합니다
이 기능은 공개 미리 보기로 제공되며 현재 참여 고객에게만 제공됩니다. 미리 보기에 참여하려면 이 양식을 작성하여 제출하세요. 이 기능은 HMS 및 Glue 페더레이션을 사용하여 페더레이션된 외부 테이블 변환만 지원합니다.
이 페이지에서는 외세 테이블을 관리되는 테이블로 변환하는 데 사용하는 SET MANAGED 방법을 설명합니다.
- 외부 테이블을 관리되는 테이블로 변환하는 방법에 대한 자세한 내용은 외부 테이블을 관리형 Unity 카탈로그 테이블로 변환을 참조하세요.
- 외부 테이블을 외부 Unity 카탈로그 테이블로 변환하는 방법에 대한 자세한 내용은 외부 테이블을 외부 Unity 카탈로그 테이블로 변환하기를 참조하세요.
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())