Important
일반적으로 외부 테이블을 관리되는 테이블로 변환할 수 있습니다.
외부 테이블을 관리되는 테이블로 변환하는 방법은 공개 미리 보기로 제공됩니다. Hive 메타스토어 및 Glue Federation을 사용하여 페더레이션된 외부 테이블만 지원됩니다.
외부 또는 포리즌 Delta Lake 테이블을 Azure Databricks의 Unity Catalog 관리 테이블로 변환하려면 ALTER TABLE ... SET MANAGED 명령을 사용하거나, 외부 테이블의 경우 Catalog Explorer를 사용합니다. 변환은 이름, 설정, 사용 권한 및 뷰를 비롯한 테이블 구성을 유지하고 테이블 기록을 유지합니다.
외부 테이블 변환의 경우 SET MANAGED 다음도 참조하세요:
- 판독기 및 기록기 가동 중지 시간을 최소화합니다.
- 변환 중에 동시 쓰기를 처리합니다.
- 변환된 관리 테이블을 외부 테이블로 롤백할 수 있습니다.
- 변환 후 레거시 코드가 작동할 수 있도록 경로 기반 읽기 및 쓰기를 리디렉션합니다.
외부 테이블을 변환하는 데 CREATE TABLE AS SELECT(CTAS)도 사용할 수 있지만, Databricks는 다음과 같은 이점 때문에 SET MANAGED를 권장합니다.
외부 테이블 변환의 경우 Databricks는 예측 최적화를 자동으로 활성화하는 대신, 변환된 테이블에서 이를 INHERIT로 설정합니다.
SQL을 사용하여 외장 테이블을 참조하세요.
외장 테이블을 외부 테이블로 변환하려면 외세 테이블을 외부 Unity 카탈로그 테이블로 변환을 참조하세요.
Prerequisites
필수 구성 요소는 외부 테이블 또는 외장 테이블을 변환하는지 여부에 따라 다릅니다.
외부 테이블
외부 테이블을 관리되는 테이블로 변환하려면 다음과 같은 필수 구성 요소가 있습니다.
- 형식: 테이블에서 Delta Lake 형식을 사용해야 합니다.
-
런타임:
SET MANAGED,UNSET MANAGED또는TRUNCATE UNIFORM HISTORY를 사용하려면 Databricks Runtime 17.3 LTS 이상 또는 서버리스 컴퓨팅을 사용해야 합니다. - 리더 및 라이터: 소스 테이블용 Azure Databricks 리더 및 라이터는 Databricks Runtime 15.4 LTS 이상을 사용해야 합니다. 독자 또는 작성자가 14.3 LTS 이하를 사용하는 경우 레거시 판독기 및 작성자를 참조하세요.
-
외부 클라이언트: 외부(Databricks 이외) 클라이언트는 Unity 카탈로그 관리 테이블에 대한 읽기 작업을 지원해야 합니다.
델타 클라이언트가 있는 Access 테이블을 참조하세요.
- Access Insights 대시보드를 사용하여 테이블에 액세스하는 판독기와 기록기가 Databricks 런타임인지 아니면 외부 비 Databricks인지 확인합니다.
-
기능 호환성: 테이블에
minReaderVersion=2,minWriterVersion=7,tableFeatures={..., columnMapping}이(가) 있으면SET MANAGED명령이DELTA_TRUNCATED_TRANSACTION_LOG오류와 함께 실패합니다. 를 사용하여DESCRIBE DETAIL테이블에 이러한 속성이 있는지 확인합니다. Delta Lake 기능 호환성 및 프로토콜을 참조하세요.
변환 후 경로 기반 읽기 및 쓰기는 약간의 성능 오버헤드로 새 관리되는 위치로 자동으로 리디렉션됩니다. Databricks는 성능 오버헤드를 방지하기 위해 모든 경로 기반 액세스를 이름 기반 액세스로 마이그레이션하는 것이 좋습니다. 경로 기반 리디렉션을 참조하세요.
Important
충돌을 방지하려면 외부 테이블에서 작동하는 기존 OPTIMIZE 명령 작업(액체 클러스터링, 압축, ZORDER)을 취소하고 외부 테이블을 관리되는 테이블로 변환하는 동안 작업을 예약하지 않습니다.
외세 테이블
Important
외부 테이블을 관리되는 테이블로 변환하는 방법은 공개 미리 보기로 제공됩니다.
외용 테이블을 관리되는 테이블로 변환하려면 다음과 같은 필수 구성 요소가 있습니다.
- 데이터 형식: 외세 테이블은 Delta Lake 형식을 사용해야 합니다. Parquet에 대해 일회성 변환을 수행하려면 Delta Lake로 변환을 참조하세요.
- 런타임: Databricks Runtime 17.3 이상.
- 테이블 형식: HMS(Hive metastore) 테이블 형식은 외부 HMS 테이블이어야 합니다. 테이블이 관리되는 HMS 테이블이면 명령이 실패합니다.
-
권한: 테이블에 대한
OWNER또는MANAGE권한 및CREATE에 대한EXTERNAL LOCATION권한.
가동 중지 시간 및 데이터 복사 시간
이 SET MANAGED 명령은 다음과 같은 DEEP CLONE대체 방법에 비해 가동 중지 시간을 최소화하거나 제거합니다.
외부 테이블
외부 테이블에 대한 변환 프로세스는 2단계 접근 방식을 사용합니다.
- 초기 데이터 복사(가동 중지 시간 없음): 명령은 외부 위치에서 관리되는 위치로 테이블 데이터 및 델타 트랜잭션 로그를 복사합니다. 외부 테이블에 대한 활성 판독기 및 기록기는 중단 없이 실행됩니다.
- 관리되는 위치로 전환(짧은 가동 중지 시간): 첫 번째 단계 동안 외부 위치에 대한 커밋이 관리되는 위치로 이동되고 테이블 메타데이터가 업데이트되어 새 관리되는 위치를 등록합니다. 이 단계에서는 외부 위치에 대한 모든 쓰기가 일시적으로 차단되어 기록기 가동 중지 시간이 발생합니다. Databricks Runtime 16.4 LTS 이상의 판독기는 가동 중지 시간이 발생하지 않지만 Databricks Runtime 15.4 LTS 이하의 판독기는 가동 중지 시간을 경험할 수 있습니다.
다음 표에서는 원본 테이블의 크기와 예상 처리량 속도 0.5-2GB/CPU 코어/분을 기준으로 예상 가동 중지 시간을 보여 냅니다.
| 테이블 크기 | 권장 클러스터 크기 | 예상 데이터 복사 시간 | 예상 판독기 및 기록기 가동 중지 시간 |
|---|---|---|---|
| 100GB 이하 | 32코어/X-Large SQL 웨어하우스 | ~6분 이하 | ~1-2분 이하 |
| 1TB | 64코어/2X 대형 SQL 웨어하우스 | ~30분 | ~1-2분 |
| 10TB | 256코어/4X 대형 SQL 웨어하우스 | ~1.5시간 | ~1-5분 |
Note
가동 중지 시간은 파일 크기, 파일 수 및 커밋 수와 같은 요인에 따라 달라질 수 있습니다.
외세 테이블
외부 테이블 변환 시 중단 시간은 MOVE 또는 COPY 사용 여부에 따라 달라집니다.
- 의 경우
MOVE외부 테이블에 대해 설명한 대로 가동 중지 시간이 발생할 수 있습니다. 외부 테이블을 참조하세요. - 따라서
COPY변환 프로세스에서 원본 테이블을 관리되는 스토리지 위치에 복사하여 데이터의 두 개의 별도 복사본을 만들기 때문에 가동 중지 시간을 관리할 책임이 있습니다. 외부 카탈로그의 원본 테이블에 대한 읽기 및 쓰기를 사용하지 않도록 설정 및 새 관리 테이블을 사용하도록 워크로드를 마이그레이션해야 합니다.
관리되는 테이블로 변환
카탈로그 탐색기 또는 SQL을 사용하여 외부 테이블을 변환하거나 SQL을 사용하여 외장 테이블을 변환합니다.
카탈로그 탐색기를 사용하는 외부 테이블(베타)
Important
카탈로그 탐색기를 사용하여 외부를 관리되는 테이블로 변환하는 작업은 베타 버전입니다.
카탈로그 탐색기를 사용하여 스키마에 있는 하나 이상의 외부 테이블을 한 번에 변환할 수 있습니다.
카탈로그 탐색기에서 변환하려는 테이블 또는 스키마로 이동합니다.
이 테이블에 대하여(테이블 세부 정보 페이지) 또는 이 스키마에 대하여(스키마 세부 정보 페이지)에서 최적화 탐색하기를 클릭합니다.
Unity 카탈로그 관리 테이블로 마이그레이션하는 이유 대화 상자에서 계속을 클릭합니다.
변환할 외부 테이블을 선택합니다. 테이블 세부 정보 페이지에서 대화 상자를 연 경우 카탈로그 탐색기가 테이블을 미리 선택합니다. 검색 창을 사용하여 추가 테이블을 찾습니다. 관리 테이블은 선택할 수 없습니다.
변환 전자 필기장 만들기를 클릭합니다.
필요에 따라 전자 필기장 이름을 입력합니다. 기본적으로 전자 필기장을 홈 폴더에 저장합니다. 찾아보기를 클릭하여 다른 위치에 저장합니다.
Notebook에서 모범 사례를 검토하고 모든 필수 구성 요소를 충족하는지 확인합니다.
SET MANAGED 쿼리 셀을 실행합니다.
셀이 실행되면 테이블 형식이 카탈로그 탐색기에서 EXTERNAL 대신 MANAGED로 표시됩니다. 상태가 즉시 업데이트되지 않는 경우 페이지를 새로 고칩니다.
SQL을 사용하는 외부 테이블
외부 테이블에 Apache Iceberg 읽기(UniForm)가 사용되는지 여부에 따라 다음 명령 중 하나를 실행합니다. 테이블에 Iceberg 읽기가 사용하도록 설정되어 있는지 확인하려면 Iceberg 읽기가 사용하도록 설정되어 있는지 확인합니다.
Iceberg 읽기가 활성화되지 않은 Unity 카탈로그 외부 테이블의 경우 다음 명령을 실행합니다.
ALTER TABLE catalog.schema.my_external_table SET MANAGED;변환 후에는 호환성 문제 없이 관리되는 테이블에서 Iceberg 읽기를 사용하도록 설정할 수 있습니다.
Iceberg 읽기가 이미 활성화된 Unity 카탈로그 외부 테이블의 경우 다음 명령을 실행합니다.
ALTER TABLE catalog.schema.my_external_table SET MANAGED TRUNCATE UNIFORM HISTORY;최적의 테이블 성능 및 호환성을 유지하기 위해 포함합니다
TRUNCATE UNIFORM HISTORY.TRUNCATE UNIFORM HISTORY는 UniForm Iceberg 히스토리만 잘라내며 Delta 히스토리는 제거하지 않습니다. 이 명령은 잘림 후 Iceberg에 대한 짧은 읽기 및 쓰기 중단 시간을 초래합니다.
테이블 변환 후 기존 읽기 및 쓰기 스트림이 실패합니다. 경로 기반 리디렉션을 자동으로 사용하려면 동일한 구성으로 스트림을 다시 시작합니다. 읽기 권한자와 작성기가 관리되는 테이블에서 작동하는지 확인합니다. 스트리밍 동작을 참조하세요.
수동으로 해제하지 않으면 변환 후에 예측 최적화가 자동으로 활성화됩니다. 예측 최적화를 사용할 수 있는지 여부를 확인합니다.
Azure Databricks 롤백을 허용하기 위해 14일 동안 Unity 카탈로그 외부 위치에 데이터를 보존합니다.
관리되는 테이블 변환 롤백을 참조하세요. 예측 최적화를 사용하도록 설정된 14일 후 Azure Databricks 자동으로 이 데이터를 삭제하여 스토리지를 회수하고 비용을 절감합니다. 예측 최적화를 해제한 경우, 스토리지를 직접 회수하려면 14일 후 새로 변환된 관리형 테이블에서 VACUUM(Databricks Runtime 17.3 LTS 이상 또는 서버리스 컴퓨팅 필요)를 실행하세요.
VACUUM my_converted_table
Note
예측 최적화를 사용하도록 설정하더라도 Unity 카탈로그 외부 위치의 데이터는 14일 후에 삭제되지 않을 수 있습니다. 예를 들어 관리되는 테이블이 자주 사용되지 않거나 작을 때 발생할 수 있습니다. 이전 데이터가 남아 있는 경우 수동으로 실행 VACUUM 하여 제거합니다.
Azure Databricks는 외부 위치에 있는 데이터만 삭제합니다. Unity 카탈로그의 테이블에 대한 델타 트랜잭션 로그 및 참조가 유지됩니다.
SQL을 사용하는 외용 테이블
Important
외부 테이블을 관리되는 테이블로 변환하는 방법은 공개 미리 보기로 제공됩니다.
Unity 카탈로그 외세 테이블을 Unity 카탈로그 관리형으로 변환하려면 다음 명령을 실행합니다.
ALTER TABLE source_table SET MANAGED {MOVE | COPY}
source_table
Unity 카탈로그에서 페더레이션된 기존 외부 테이블
MOVE테이블을 관리형으로 변환하고 외부 카탈로그의 원본 테이블에 대한 액세스를 사용하지 않도록 설정합니다.
테이블을 변환한 후 외부 카탈로그 또는 경로 기반 액세스를 통한 액세스가 실패합니다. 테이블에 대한 모든 판독기 및 기록기는 액세스에 Unity 카탈로그 네임스페이스를 사용해야 합니다. 다음은 그 예입니다.
SELECT * FROM catalog_name.schema_name.table_name;경로 기반 액세스는 지원되지 않으며 테이블을 변환한 후 실패합니다. 다음은 그 예입니다.
SELECT * FROM delta.`protocol://path/to/table`;판독기/작성기 버전 및 클라이언트 호환성 요구 사항은 필수 구성 요소 및 레거시 판독기 및 작성기에 설명된 것과 동일합니다.
수동으로 구성하지 않는 한, 예측 최적화는
INHERIT로 설정됩니다. 예측 최적화를 사용할 수 있는지 확인하려면 예측 최적화를 사용할 수 있는지 여부를 확인합니다.
COPY외부 카탈로그의 원본 테이블에 대한 액세스를 수정하거나 사용하지 않도록 설정하지 않고 테이블을 관리 테이블로 변환합니다.
- 관리형으로 변환하는 동안 변환 프로세스는 원본 테이블의 데이터를 외산 테이블에 대해 정의된 관리되는 스토리지 위치로 복사하여 새 관리되는 테이블과 외부 카탈로그의 원본 테이블이라는 두 개의 개별 복사본을 만듭니다.
- 읽기 및 쓰기가 실패하는 경우와 달리
MOVE, 사용할COPY때는 외부 카탈로그의 원본 테이블에 대한 읽기 및 쓰기를 적절하게 사용하지 않도록 설정하여 워크로드가 새 카탈로그로 마이그레이션되었는지 확인해야 합니다.
테이블 변환 후 외세 테이블을 사용하여 스트리밍 작업(읽기 또는 쓰기)을 다시 시작하고 판독기와 작성기가 관리되는 테이블에서 작동하는지 확인해야 합니다.
변환하기 전에 원본 테이블을 외부 카탈로그에 놓으면 Unity 카탈로그도 외장 테이블을 삭제합니다. 테이블을 관리형으로 변환한 후 외부 카탈로그에서 원본 테이블을 삭제해도 Unity 카탈로그 관리 테이블에는 영향을 주지 않습니다.
데이터를 복사하는 동안 명령이 중단되면 다시 시작합니다. 명령이 중단된 위치에서 다시 시작됩니다.
Warning
Databricks는 동일한 테이블에서 여러 SET MANAGED 명령을 동시에 실행하지 않는 것이 좋습니다. 이로 인해 테이블 상태가 일관되지 않게 될 수 있습니다.
변환 확인
테이블이 관리되는 테이블로 변환되었는지 확인하려면 테이블 TypeMANAGED이 있는지 확인합니다. 다음 중 하나를 수행할 수 있습니다.
새 탭을 열고 카탈로그 탐색기로 이동합니다. 세부 정보 탭의 이 테이블 정보에서 테이블 형식은 관리형으로 표시됩니다.
다음 SQL 명령을 실행하여 테이블을
Type확인합니다.DESCRIBE EXTENDED catalog_name.schema_name.table_name한 번에 여러 테이블을 확인하거나 검사를 스크립트하려면 다음을 대신 쿼리
information_schema.tables합니다.SELECT table_type FROM system.information_schema.tables WHERE table_catalog = 'catalog_name' AND table_schema = 'schema_name' AND table_name = 'table_name';
레거시 판독기 및 작성자
SET MANAGED의 모든 기능(테이블 히스토리 보존 포함)을 사용하려면 Databricks는 모든 리더와 라이터를 Databricks Runtime 15.4 LTS 이상으로 업그레이드할 것을 권장합니다.
Databricks Runtime 15.3 이하의 판독기 또는 기록기가 있는 경우에도 계속 사용할 SET MANAGED 수 있습니다. 그러나 관리되는 테이블로 변환한 후에는 타임스탬프가 아닌 버전별로만 기록 커밋으로 이동할 수 있습니다.
14일 이내에 외부 테이블로 롤백하면, 변환 전에 이루어진 과거 커밋에 대한 타임 트래블이 다시 활성화됩니다. 변환과 롤백 사이의 변환된 관리 테이블에 대한 커밋에는 타임스탬프를 사용한 시간 이동이 지원되지 않습니다. 관리되는 테이블 변환 롤백을 참조하세요.
Databricks Runtime 15.3 이하로 변환한 후 테이블에 쓰려면 다음 기능을 삭제 inCommitTimestamp 해야 합니다.
ALTER TABLE <table_name> DROP FEATURE inCommitTimestamp;
경로 기반 리디렉션
Databricks Runtime 18.1 이상에서 외부 테이블을 Unity 카탈로그 관리 테이블로 변환한 후 경로 기반 읽기 및 이전 외부 위치에 대한 쓰기는 자동으로 새 관리되는 위치로 리디렉션됩니다. 경로 기반 읽기는 다음과 같은 SELECT * FROM delta.`/path/to/my_table`코드입니다. 경로 기반 리디렉션은 스토리지 경로를 사용하는 레거시 코드가 리팩터링 없이 작업을 계속할 수 있도록 하여 관리되는 테이블로 마이그레이션하는 데 필요한 시간과 노력을 줄입니다.
외세 테이블 변환은 경로 기반 액세스를 리디렉션하지 않습니다.
짧은 대기 시간 사용 사례의 경우 Azure Databricks 경로 기반 액세스를 이름 기반 액세스로 마이그레이션하는 것이 좋습니다. 경로 기반 리디렉션은 각 경로 기반 읽기 또는 쓰기에 대해 수백 밀리초의 오버헤드를 추가하며, 이전 델타 로그가 Unity 카탈로그 외부 위치에서 활성 상태로 유지되어야 합니다. 이름 기반 읽기 및 쓰기에는 추가 성능 오버헤드가 없습니다. 경로 기반 코드를 이름 기반으로 마이그레이션을 참조하세요.
경로 기반 코드를 이름 기반으로 마이그레이션
경로 기반 리디렉션을 사용하지 않기로 결정한 경우 레거시 코드를 마이그레이션할 수 있습니다. 마이그레이션하려면 경로 기반 참조를 이름 기반 참조로 바꿉니다.
다음 코드 예제에는 파일에 대한 경로 기반 테이블 참조가 포함되어 있습니다.
SELECT * FROM delta.`/path/to/customers_table`;
다음 코드와 같이 경로 기반 참조를 외부 테이블에 대한 이름 기반 참조로 바꿉다.
SELECT * FROM catalog_name.schema_name.customers_table;
스트리밍 동작
경로 기반 리디렉션을 사용하는 스트리밍은 다음 Databricks 런타임 버전에서 읽기 및 쓰기를 지원합니다.
- 읽기는 Databricks Runtime 18.1 이상에서 지원됩니다.
- 쓰기는 Databricks Runtime 18.2 이상에서 지원됩니다.
변환 후 이전 테이블 위치에서 읽거나 쓰는 것을 방지하려면 모든 스트리밍 작업을 다시 시작해야 합니다.
마이그레이션 메시지를 사용하여 다음 검사점에서 경로 기반 스트리밍 읽기 및 쓰기가 실패하고 중지됩니다.
- 읽기의 경우 스트림에서 다음과 같은 오류가
DELTA_STREAMING_INTERRUPTED_BY_MANAGED_TABLE_CONVERSION: The table at <path> has been converted to a Unity Catalog managed table. The stream has been stopped to ensure data consistency. Restart the stream and it will automatically resume from the last committed offset using the converted table발생합니다. - 쓰기의 경우 변환 후 첫 번째 마이크로 일괄 처리에서 오류가
Operation not allowed: STREAMING WRITE cannot be performed on a table with redirect feature. The no redirect rules are not satisfied []발생합니다.
오류를 해결하려면 동일한 구성으로 스트림을 다시 시작합니다. 경로 기반 액세스는 관리되는 테이블로 자동으로 리디렉션됩니다.
경로 기반 리디렉션 제한 사항은 제한 사항을 참조하세요.
변환 오류 문제 해결
이 섹션에서는 외부 테이블을 사용하여 SET MANAGEDUnity 카탈로그 관리 테이블로 변환할 때 발생하는 일반적인 문제를 해결하는 방법을 설명합니다.
VERSIONED_CLONE_INTERNAL_ERROR.EXISTING_FILE_VALIDATION_FAILED
변환에 실패하면 항상 동일한 Databricks 런타임 버전을 사용하여 다시 시도합니다. 메타데이터는 버전 간에 다르게 직렬화될 수 있으며, 이로 인해 다른 Databricks 런타임 버전에서 변환을 다시 시도하면 오류가 발생 VERSIONED_CLONE_INTERNAL_ERROR.EXISTING_FILE_VALIDATION_FAILED 합니다.
변환 중 클러스터 종료
변환 중 클러스터가 종료되면 명령이 DELTA_ALTER_TABLE_SET_MANAGED_INTERNAL_ERROR와 함께 실패할 수 있습니다. 명령을 다시 시도하여 변환을 다시 시작합니다.
손상된 외부 테이블
외부 테이블이 이미 손상된 경우(예: 유효하지 않은 테이블 상태), 변환이 DELTA_TRUNCATED_TRANSACTION_LOG, DELTA_TXN_LOG_FAILED_INTEGRITY, 또는 DELTA_STATE_RECOVER_ERRORS 등의 오류와 함께 실패할 수 있습니다. 변환을 시도하기 전에 다음과 같이 DESCRIBE DETAIL외부 테이블에서 기본 작업을 실행할 수 있는지 확인합니다.
파일 유효성 검사 실패
이 SET MANAGED 명령은 테이블의 최신 스냅샷에 있는 모든 파일을 새 관리되는 테이블 위치에 복사했음을 확인합니다. 파일이 누락된 경우 오류와 함께 명령이 실패합니다 DELTA_ALTER_TABLE_SET_MANAGED_FAILED.FILE_VALIDATION_FAILED .
이 문제를 해결하려면:
- Spark 드라이버 로그를 확인하여 마이그레이션할 수 없는 파일을 식별합니다.
- 이러한 파일이 원본 외부 테이블 위치에 있고 액세스할 수 있는지 확인합니다.
-
ALTER TABLE ... SET MANAGED명령을 다시 시도하십시오.
문제가 지속되면 Databricks 지원에 문의하세요.
관리형 테이블 변환 되돌리기
Important
롤백 명령에는 서버리스 컴퓨팅 또는 Databricks Runtime 17.3 LTS 이상이 필요합니다.
외부 테이블
외부 테이블을 관리형 테이블로 변환한 후에는 UNSET MANAGED 명령을 사용하여 14일 이내에 롤백할 수 있습니다. 이렇게 하면 테이블 메타데이터가 원래 외부 위치를 다시 가리키도록 업데이트됩니다. Databricks는 변환 후 관리되는 위치에 대한 모든 쓰기를 유지합니다.
외부 테이블로 롤백하려면 다음 명령을 실행합니다.
ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED;
다음 정보를 숙지하세요.
- 롤백 명령이 중단되거나 실패하면 다시 실행하여 다시 시도합니다.
- 변환과 유사하게 롤백한 후 스트리밍 작업을 다시 시작해야 합니다.
- 변환과 롤백 사이의 관리되는 위치에 커밋하면 타임스탬프가 아닌 버전별 시간 이동이 허용됩니다.
- 롤백 후 7일 후에 Azure Databricks는 관리되는 위치에서 데이터를 자동으로 삭제합니다.
외부 테이블: MOVE
Warning
관리되는 테이블을 삭제하기 전에 실행 UNSET MANAGED 해야 합니다. 먼저 실행 UNSET MANAGED 하지 않고 테이블을 삭제하면 데이터가 손실되거나 불일치할 수 있습니다.
명령을 사용하여 UNSET MANAGED 테이블 마이그레이션을 롤백하고 외부 카탈로그의 원본 테이블에 대한 액세스 권한을 다시 얻을 수 있습니다. 롤백에는 두 단계가 필요합니다. 먼저 테이블을 외부 테이블로 롤백한 다음 외부 테이블을 삭제하여 테이블을 외세 테이블로 다시 페더레이션해야 합니다.
- 외부 테이블로 롤백하려면 다음 명령을 실행합니다.
ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED
- 테이블을 외세의 테이블에 다시 페더레이션하려면 다음 명령을 사용하여 외부 테이블을 삭제합니다.
DROP TABLE catalog.schema.my_managed_table
외세 테이블은 다음 카탈로그 동기화 후에 사용할 수 있습니다.
다음 정보를 숙지하세요.
- 변환과 롤백 사이의 외부 위치에 수행한 커밋의 경우 타임스탬프가 아닌 버전별로 시간 이동이 가능합니다.
- 롤백 후 7일 후에 Databricks는 관리되는 위치에서 데이터를 삭제합니다.
외부 테이블: COPY
테이블 마이그레이션을 롤백하려면 외부 카탈로그의 원본 테이블이 UNSET MANAGED 수정되지 않았기 때문에 명령을 실행할 필요가 없습니다. 관리되는 테이블을 삭제하고 Databricks는 다음 카탈로그 동기화 후 외용 테이블로 다시 페더레이션합니다.
롤백 확인
외부 및 외장 테이블에 대해 롤백을 다르게 확인합니다.
외부 테이블
관리되는 테이블이 외부 테이블로 성공적으로 롤백되었는지 확인하려면 테이블 Type이 EXTERNAL 상태인지 확인합니다. 다음 중 하나를 수행할 수 있습니다.
새 탭을 열고 카탈로그 탐색기로 이동합니다. 세부 정보 탭의 이 테이블 정보에서 테이블 형식은 외부로 표시됩니다.
다음 SQL 명령을 실행하여 테이블을
Type확인합니다.DESCRIBE EXTENDED catalog_name.schema_name.table_name한 번에 여러 테이블을 확인하거나 검사를 스크립트하려면 다음을 대신 쿼리
information_schema.tables합니다.SELECT table_type FROM system.information_schema.tables WHERE table_catalog = 'catalog_name' AND table_schema = 'schema_name' AND table_name = 'table_name';
외세 테이블
관리형 테이블이 외부 테이블로 성공적으로 롤백되었는지 확인하려면 테이블 Type이 FOREIGN인지 확인하세요. 다음 중 하나를 수행할 수 있습니다.
새 탭을 열고 카탈로그 탐색기로 이동합니다. 세부 정보 탭의 이 테이블 정보에서 테이블 형식은 외국어로 표시됩니다.
다음 SQL 명령을 실행하여 테이블 형식을 확인합니다.
SELECT table_type FROM system.information_schema.tables WHERE table_catalog = 'catalog_name' AND table_schema = 'schema_name' AND table_name = 'table_name';table_type열은FOREIGN로 표시됩니다.
Note
외부 테이블 변환 또는 롤백을 검증하는 데 DESCRIBE EXTENDED를 사용하지 마세요. 페더레이션은 이 명령에 hive_metastore 카탈로그 동작을 사용하므로 테이블의 실제 상태와 관계없이 테이블 Type을(를) EXTERNAL로 표시합니다.
고급 항목
이 섹션에는 외장 테이블과 외부 테이블을 관리되는 테이블로 변환하기 위한 고급 항목이 포함되어 있습니다.
스키마 또는 카탈로그 수준에서 변환
스키마 또는 카탈로그 수준에서 테이블 변환을 자동화하는 두 가지 옵션이 있습니다.
스키마들에 있는 테이블을 순회하면서 각 테이블을 개별적으로 변환합니다.
discoverx labs 프로젝트를 사용하여 전체 스키마 또는 카탈로그를 한 번에 변환합니다.
df = (dx.from_tables("prod.*.*") .with_sql("ALTER TABLE {full_table_name} SET MANAGED;") .apply())
Databricks Labs 및 discoverx를 참조하세요.
외국 카탈로그에서 테이블 만들기
외래 카탈로그에서 외부 또는 관리 테이블을 만들 수 있습니다. 동작은 스키마 구성에 따라 달라집니다.
-
Glue 또는 eHMS 스키마의 경우 또는 Unity 카탈로그에서 관리되는 위치가 설정된 스키마의 경우: 실행하는
CREATE TABLE foreign_catalog.schema.table경우 Unity 카탈로그 관리 테이블 또는 외부 테이블이 만들어집니다. Databricks는 테이블을 외부 카탈로그에 푸시하거나 동기화하지 않습니다. -
내부 Hive 메타스토어 연결의 스키마의 경우: 외부 스키마에서 테이블을 만들려고 하면 여전히 외부 테이블을 생성하고
hive_metastore에 테이블을 만듭니다. - 레거시 작업 영역 Hive 메타스토어의 경우: 읽기 및 쓰기 페더레이션이 있으므로 외세의 카탈로그에 테이블을 만들면 내부 Hive 메타스토어에도 테이블이 만들어집니다.
DBFS 기반 외부 테이블
DBFS 지원 테이블을 변환할 때 Databricks는 DBFS 경로의 현재 매핑을 외부 테이블의 클라우드 경로 위치로 저장합니다.
제한 사항
외부 또는 외장 테이블을 관리되는 테이블로 변환하는 데는 다음과 같은 제한 사항이 있습니다.
변환 후 하지만 롤백 전에 만들어진 커밋에 대한 테이블 기록은 타임스탬프가 아닌 버전별 시간 이동이 허용됩니다.
OpenSharing은
SET MANAGED명령과 완전히 호환되지 않습니다. Open OpenSharing은 지원되지만, 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 카탈로그 메타스토어, 카탈로그 또는 스키마의 기본 관리 위치가 원본 테이블의 스토리지 위치와 다른 클라우드 지역에 있는 경우 클라우드 공급자로부터 지역 간 데이터 전송 비용이 추가로 발생할 수 있습니다.
스키마 및 카탈로그의 위치를 확인하려면 다음 명령을 실행합니다.
DESC SCHEMA EXTENDED <catalog_name>.<schema_name>; DESC CATALOG EXTENDED <catalog_name>;metastore의 위치를 확인하려면 다음 명령 중 하나를 실행합니다.
DESC METASTORE; -- Option 1 SELECT * FROM system.information_schema.metastores; -- Option 2
경로 기반 리디렉션 제한 사항:
- 변환 후 스트리밍 작업을 다시 시작해야 합니다. 스트리밍 동작을 참조하세요.
- 경로 기반 리디렉션은 마이그레이션 프로세스에만 하위 호환성을 제공하며, Unity Catalog 관리 테이블에 대한 새로운 경로 기반 액세스는 지원하지 않습니다.
외부 테이블 제한 사항:
- Hive 메타스토어 및 Glue Federation을 사용해 페더레이션된 외부 테이블만 변환이 지원됩니다.