주요 컨텐츠로 이동

Hive 테이블을 Unity Catalog로 업그레이드하는 방법

Dipankar Kushari
Liran Bareket
Sreeram Thoom
Som Natarajan
이 포스트 공유하기

(번역: Youngkyong Ko) Original Blog Post

이 블로그에서는 업그레이드하는 HMS 테이블의 종류에 따라 다양한 방법을 사용하여 Hive 메타스토어(HMS)* 테이블을 Unity Catalog(UC)로 원활하게 업그레이드하는 방법을 예시를 통해 설명합니다.

*참고: Hive 메타스토어는 기본 메타스토어나 외부 메타스토어, 심지어 AWS Glue 데이터 카탈로그일 수도 있습니다. 간단하게 설명하기 위해 이 문서 전체에서 "Hive 메타스토어"라는 용어를 사용했습니다.

자세한 내용을 살펴보기 전에 업그레이드를 위해 수행할 단계를 살펴보겠습니다. 

  1. 평가 - 이 단계에서는 업그레이드를 위한 올바른 접근 방식을 결정할 수 있도록 업그레이드를 위해 식별된 기존 HMS 테이블을 평가합니다. 이 단계는 이 블로그에서 설명합니다.
  2. 생성 - 이 단계에서는 메타스토어, 카탈로그, 스키마, 스토리지 자격증명, 외부 위치 등 필요한 UC 자산을 만듭니다. 자세한 내용은 AWS, Azure, GCP 설명서를 참조하세요.
  3. 업그레이드 - 이 단계에서는 지침에 따라 테이블을 HMS에서 UC로 업그레이드합니다. 이 블로그에서는 이 단계를 주로 다룹니다.
  4. 권한 부여 - 이 단계에서는 새로 업그레이드된 UC 테이블에 대한 권한을 권한주체에게 부여하여 UC 테이블에 액세스할 수 있도록 합니다. 자세한 내용은 AWS, Azure, GCP 설명서를 참조하세요.

Unity Catalog는 이제 세 클라우드 플랫폼(AWS, Azure, GCP) 모두에서 사용할 수 있으며, 다음과 같은 주요 기능을 통해 데이터의 보안과 거버넌스를 간소화합니다:

  • 한 번의 정의로 모든 곳의 보안 관리: Unity Catalog는 모든 워크스페이스에 적용되는 데이터 액세스 정책을 한 곳에서 관리할 수 있는 기능을 제공합니다.
  • 표준을 준수하는 보안 모델: Unity Catalog의 보안 모델은 표준 ANSI SQL을 기반으로 하며, 관리자가 익숙한 구문을 사용하여 카탈로그, 데이터베이스(스키마라고도 함), 테이블, 뷰 수준에서 기존 데이터 레이크에 권한을 부여할 수 있습니다.
  • 감사(Audit) 및 계보(Lineage) 기능 기본 탑재: Unity Catalog는 사용자 수준의 감사 로그를 자동으로 캡처하여 데이터에 대한 액세스를 기록합니다. 또한 Unity Catalog는 모든 언어에서 데이터 자산의 생성과 사용을 추적하는 계보 데이터도 캡처합니다.
  • 데이터 탐색: Unity Catalog를 사용하면 데이터 자산에 태그를 지정하고 문서화할 수 있으며, 데이터 소비자가 데이터를 쉽게 찾을 수 있도록 검색 인터페이스를 제공합니다.
  • 시스템 테이블(공개 프리뷰): Unity Catalog를 사용하면 감사 로그, 청구 가능한 사용량, 계보 등 계정의 운영 데이터에 쉽게 액세스하고 쿼리할 수 있습니다.
  • 데이터 공유: Delta Sharing은 사용 중인 컴퓨팅 플랫폼에 관계없이 다른 조직과 안전하게 데이터를 공유할 수 있도록 데이터브릭스에서 개발한 개방형 프로토콜입니다. 데이터브릭스는 데이터브릭스 사용자(데이터 제공자)가 조직 외부의 개인 또는 그룹(데이터 수신자)과 데이터를 공유할 수 있도록 Unity Catalog 데이터 거버넌스 플랫폼에 Delta Sharing을 구축했습니다.

Unity Catalog(UC)에서 바로 사용할 수 있는 이 모든 풍부한 기능은 현재 Hive 메타스토어에서 쉽게 사용할 수 없으며, 이를 구축하려면 막대한 리소스가 필요합니다. 또한 레이크하우스 모니터링, 레이크하우스 페더레이션, LakehouseIQ와 같은 최신 데이터브릭스 기능의 대부분은(전부는 아니지만) UC를 기반으로 구축되고 관리되며 작동을 위한 전제 조건으로 UC가 필요하므로, 데이터 자산을 HMS에서 UC로 업그레이드하는 것이 지연되면 이러한 최신 제품 기능을 활용하지 못할 수 있습니다.

따라서 기존 Hive 메타스토어에 등록된 테이블을 UC 메타스토어로 쉽게 업그레이드하여 UC가 제공하는 다양한 기능을 모두 활용할 수 있게 하는 방법이 궁금하실 것입니다. 이 블로그에서는 HMS 테이블을 UC로 업그레이드할 때 고려해야 할 사항과 방법론을 예시와 함께 안내해 드리겠습니다.

업그레이드 고려사항과 사전 준비

이 섹션에서는 다음 섹션의 업그레이드 방법론에 대해 자세히 알아보기 전에 업그레이드 시 고려해야 할 사항을 검토합니다.

업그레이드 고려사항

한가지 고려사항은 Hive 메타스토어 테이블의 다양한 형태입니다. UC로 업그레이드할 수 있는 HMS 테이블은 아래 표에 표시된 각 파라미터들을 조합하여 생성되었을 수 있습니다. 예를 들어, DBFS 루트 위치를 사용한 CSV 관리형 테이블이거나, Amazon S3 위치를 사용한 Parquet 외부 테이블일 수  있습니다. 이 섹션에서는 다양한 테이블 형태를 만들 수 있는 파라미터에 대해 설명합니다.

Parameter

Variation

Table Identification Guide

Table Type

MANAGED

desc extended hive_metastore.<schema name>.<table name> 을 실행하면 “Type” 필드값이 “MANAGED”로 표시됩니다

EXTERNAL

desc extended hive_metastore.<schema name>.<table name> 을 실행하면 "Type" 필드값이 "EXTERNAL”로 표시됩니다

Data Storage Location

DBFS Root storage location

desc extended hive_metastore.<schema name>.<table name> 을 실행하면 “Location” 필드값이 "dbfs:/user/hive/warehouse/”로 시작합니다

DBFS Mounted Cloud Object Storage

desc extended hive_metastore.<schema name>.<table name> 을 실행하면 “Location” 필드값이 "dbfs:/mnt/”로 시작합니다

Directly specifying cloud storage Location (such as S3://, abfss:// or gs://)

desc extended hive_metastore.<schema name>.<table name> 을 실행하면 “Location” 필드값이 “S3://” 또는 “abfss://” 또는 “gs://” 로 시작합니다

Table file format and interface

File formats such as Delta, Parquet, Avro

desc extended hive_metastore.<schema name>.<table name> 을 실행하면 “Provider” 필드값이 ”delta”, “parquet” 등으로 표시됩니다

Interface such as Hive SerDe interface

desc extended hive_metastore.<schema name>.<table name> 을 실행하면 “Provider” 필드값이 ”hive”로 표시됩니다

위와 같은 매개변수의 조합에 따라 업그레이드 방법이 달라질 수 있습니다. 자세한 내용은 아래의 업그레이드 방법 섹션에서 설명합니다.

Azure Databricks에서 HMS 테이블을 UC로 업그레이드하기 전에 고려해야 할 또 다른 사항이 있습니다:

AZURE Cloud의 경우 - 현재 Blob 스토리지(wasb) 또는 ADLS 1세대(adl)에 저장된 테이블을 ADLS 2세대(abfs)로 업그레이드해야 합니다. 그렇지 않으면 UC에서 지원되지 않는 Azure 클라우드 스토리지를 사용하려고 한다는 오류가 발생합니다.

Error example: Table is not eligible for an upgrade from Hive Metastore to Unity Catalog. Reason: Unsupported file system scheme wasbs.

업그레이드 사전 준비

업그레이드 과정을 시작하기 전에 아래 단계에 따라 스토리지 자격 증명(Storage Credential)과 외부 위치(External Location)를 만들어야 합니다.

  1. 대상 클라우드 스토리지에 액세스할 수 있는 스토리지 자격 증명(Storage Credential)을 생성합니다.
  2. 스토리지 자격 증명을 사용하여 대상 클라우드 스토리지를 가리키는 외부 위치(External Location)를 만듭니다.
    • 외부 위치는 UC 외부 테이블, 관리형 카탈로그 또는 관리형 스키마를 만드는 데 사용됩니다.

업그레이드 방법

이 섹션에서는 다양한 업그레이드 옵션을 매트릭스 형태로 보여 드립니다. 또한 다이어그램을 사용하여 업그레이드와 관련된 단계를 보여줍니다.

업그레이드 방법에는 SYNC(지원되는 시나리오의 경우)를 사용하거나 데이터 복제(SYNC가 지원되지 않는 경우)를 사용하는 두 가지 기본 방법이 있습니다.

  • SYNC 사용 - SYNC가 지원되는 모든 시나리오(아래 업그레이드 매트릭스 섹션에 표시됨)에서는 SYNC를 사용하여 HMS 테이블을 UC로 업그레이드합니다. SYNC를 사용하면 데이터 복제 없이 테이블을 업그레이드할 수 있습니다.
  • 데이터 복제 사용 - 지원되지 않는 모든 시나리오(아래 업그레이드 매트릭스 섹션에 표시됨)의 경우 CTAS(Create Table As Select) 또는 DEEP CLONE*을 사용합니다. 이 방법을 사용하려면 데이터 복제가 필요합니다. 

*참고 - HMS에 있는 Parquet 와 Delta 포맷의 테이블에서 데이터를 복사하고 UC로 업그레이드려면 deep clone을 사용하는 것이 좋습니다. 다른 파일 형식의 경우 Create Table As Select(CTAS)를 사용합니다.

아래 다이어그램에서는 각 방법에 대한 업그레이드 단계를 설명합니다. 업그레이드에 어떤 방법을 사용할지 이해하려면 아래의 업그레이드 매트릭스 섹션을 참조하세요.

다이어그램으로 표현한 업그레이드 과정

다이어그램 1 - SYNC를 이용하여 HMS 테이블을 UC로 업그레이드(데이터 복제 없음)

HMS tables

다이어그램 설명:

  1. HMS 관리형 및 외부 테이블은 클라우드 오브젝트 스토리지에 파일 디렉토리로 데이터를 저장합니다.
  2. SYNC 명령은 테이블 메타데이터를 HMS에서 UC로 업그레이드하는 데 사용됩니다. 대상 UC 테이블은 소스 HMS 테이블 유형에 관계없이 외부 테이블이 됩니다.
  3. SYNC 명령을 이용하여 HMS에서 UC로 테이블을 업그레이드하는 경우 데이터가 복사되지 않습니다. 동일한 기본 클라우드 저장소 위치(소스 HMS 테이블에서 사용)가 대상 UC 외부 테이블에서 참조됩니다.
  4. 스토리지 자격 증명(storage credential)은 사용자의 클라우드 계정에 저장된 데이터에 액세스하기 위한 인증 및 권한 부여 메커니즘을 나타냅니다.
  5. 외부 위치(external location)는 클라우드 스토리지 경로와 그 경로에 대한 액세스를 승인하는 스토리지 자격 증명을 결합한 개체입니다.

다이어그램 2 - 데이터 복제를 이용하여 HMS 테이블을 UC로 업그레이드

HMS tables

다이어그램 설명:

  1. HMS 관리형 및 외부 테이블은 DBFS 루트 스토리지 위치에 파일 디렉터리로 데이터를 저장합니다.
  2. CTAS 또는 Deep Clone은 HMS 테이블에서 대상 UC 테이블 메타데이터를 생성합니다. HMS 테이블 유형에 관계없이 외부 또는 관리형 테이블로 업그레이드하도록 선택할 수 있습니다.
  3. CTAS 또는 Deep Clone은 DBFS 루트 스토리지에서 대상 클라우드 스토리지로 데이터를 복사합니다.
  4. 스토리지 자격 증명(storage credential)은 사용자의 클라우드 계정에 저장된 데이터에 액세스하기 위한 인증 및 권한 부여 메커니즘을 나타냅니다.
  5. 외부 위치(external location)는 클라우드 스토리지 경로와 그 경로에 대한 액세스를 승인하는 스토리지 자격 증명을 결합한 개체입니다.

업그레이드 매트릭스

아래 표는 HMS 테이블을 UC 테이블로 업그레이드할 수 있는 다양한 방법을 보여줍니다. 각 시나리오별로 업그레이드의 단계를 설명합니다.

DBFS 루트 스토리지를 이용하는 HMS 스토리지 포맷

Ex.

HMS Table Type 

Description of HMS Table Type

Example of HMS Table

Target UC TableType

Target UC Data File Format

Upgrade Methodology

1

Managed

관리형 테이블의 데이터 파일은 DBFS Root (데이터브릭스가 관리하는 HMS 데이터베이스의 기본 경로)에 위치

%sql

create table if not exists hive_metastore.hmsdb_upgrade_db.people_parquet
using parquet
as select * from parquet.`dbfs:/databricks-datasets/learning-spark-v2/people/people-10m.parquet/`limit 100;

External Or Managed

관리형과 외부 테이블 모두에 Delta 포맷이 권장됨. 외부 테이블은 non-delta file formats.1도 지원

CTAS or Deep Clone

2

External

외부 테이블의 데이터 파일이 DBFS Root 에 있음을 의미. 테이블 정의에 "Location" 구문이 있어 외부 테이블이 됨.

%sql


create table if not exists hive_metastore.hmsdb_upgrade_db.people_parquet
using parquet
location "dbfs:/user/hive/warehouse/hmsdb_upgrade_db.db/people_parquet"
as
select * from parquet.`dbfs:/databricks-datasets/learning-spark-v2/people/people-10m.parquet/`limit 100;

External Or Managed

관리형과 외부 테이블 모두에 Delta 포맷이 권장됨. 외부 테이블은 non-delta file formats.1도 지원

CTAS or Deep Clone

1. Note - 가급적이면 CTAS로 업그레이드하는 동안 델타로 변경하는 것이 좋습니다.

HMS Hive SerDe table

Ex.

H MS Table Type 

Description of HMS Table Type

Example of HMS Table

Target UC TableType

Target UC Data File Format

Upgrade Methodology

3

Hive SerDe External or Managed 2

Hive SerDe 인터페이스를 사용하여 만든 테이블입니다. 데이터브릭스에서의 Hive 테이블에 대해 자세히 알아보려면 이 link를 참조하세요.

%sql


CREATE TABLE if not exists hive_metastore.hmsdb_upgrade_db.parquetExample (id int, name string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.SequenceFileInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat'
location "s3://databricks-dkushari/sync-test/parquetexample";

External Or Managed

관리형과 외부 테이블 모두에 Delta 포맷이 권장됨. 외부 테이블은 non-delta file formats.도 지원


CTAS or Deep Clone

2. Note - 기본 스토리지 형식에 관계없이 hive SerDe는 동일한 업그레이드 경로를 따릅니다.
3. Note - 가급적이면 CTAS로 업그레이드하는 동안 델타로 변경하는 것이 좋습니다.

DBFS 마운트 스토리지를 사용하는 HMS 스토리지 포맷

Ex.

HMS Table Type 

Description of HMS Table Type

Example of HMS Table

Target UC TableType

Target UC Data File Format

Upgrade Methodology

4

Managed





상위 데이터베이스의 위치가 외부 경로(예: 오브젝트 스토어의 마운트된 경로)로 설정되어 있는 경우입니다. 테이블은 Location 절 없이 생성되며 테이블 데이터는 해당 기본 데이터베이스 경로 아래에 저장됩니다.

%sql
create database if not exists hive_metastore.hmsdb_upgrade_db location "dbfs:/mnt/test-mnt/hmsdb_upgrade_db/";

createtableifnotexists hive_metastore.hmsdb_upgrade_db.people_delta
as
select * from delta.`dbfs:/databricks-datasets/learning-spark-v2/people/people-10m.delta`limit 100;

External

HMS 소스 데이터 파일 포맷과 동일

  1. Sync 를 실행하여 UC 외부 테이블 생성
  2. HMS 관리형 테이블을 HMS 외부 테이블로 변환(아래 Appendix의 코드 참조)
  3. 모든 종속성이 해결되면 HMS 테이블 을 삭제하여 데이터 접근 차단
  4. 모든 종속성이 해결된 후 마운트 포인트를 Unmount하여 마운트 포인트를 이용한 데이터 접근을 차단4

5

Managed

Managed

Delta

CTAS or Deep Clone

6

External









이 테이블은 Location 절과 클라우드 오브젝트 스토어에서 마운트된 경로를 사용하여 생성됩니다.  

%sql
create database if not exists hive_metastore.hmsdb_upgrade_db location "dbfs:/mnt/test-mnt/hmsdb_upgrade_db/";

create table if not exists hive_metastore.hmsdb_upgrade_db.people_delta
location "dbfs:/mnt/test-mnt/hmsdb_upgrade_db/people_delta"
as
select * from delta.`dbfs:/databricks-datasets/learning-spark-v2/people/people-10m.delta`limit 100;

External

HMS 소스 데이터 파일 포맷과 동일

  1. Sync를 실행하여 (blog) UC 외부 테이블 생성
  2. 모든 종속성이 해결되면 HMS 테이블 을 삭제하여 데이터 접근 차단
  3. 모든 종속성이 해결된 후 마운트 포인트를 Unmount하여 마운트 포인트를 이용한 데이터 접근을 차단

7

External

Managed

Delta

CTAS or Deep Clone

4. 참고 - 외부 테이블로 변환한 후 HMS 테이블을 개별적으로 삭제해야 합니다. HMS 데이터베이스/스키마가 Location으로 정의된 경우 Cascade 옵션으로 데이터베이스를 삭제하면 기본 데이터가 손실되고 업그레이드된 UC 테이블의 데이터도 손실됩니다.

클라우드 오브젝트 스토리지를 사용하는 HML 스토리지 포맷

Ex.

HMS Table Type 

Description of HMS Table Type

Example of HMS Table

Target UC TableType

Target UC Data File Format

Upgrade Methodology

8

Managed










상위 데이터베이스의 Location이 외부 경로(예: 클라우드 객체 저장소)로 설정되어 있습니다. 테이블은 Location 절 없이 생성되며 테이블 데이터는 해당 기본 데이터베이스 경로 아래에 저장됩니다.

%sql

create database if not exists hive_metastore.hmsdb_upgrade_db location "s3://databricks-dkushari/hmsdb_upgrade_db/";

create table if not exists hive_metastore.hmsdb_upgrade_db.people_delta
as
select * from delta.`dbfs:/databricks-datasets/learning-spark-v2/people/people-10m.delta`limit 100;

Extern

al

소스 데이터 파일 포맷과 동일

  1. Sync 를 수행하여 UC 외부 테이블 생성
  2. HMS 관리형 테이블을 HMS 외부 테이블로 변환 (아래 코드 참조)
  3. 모든 종속성이 해결되면 HMS 테이블 을 삭제하여 데이터 접근 차단4

9

Managed

Managed

Delta

CTAS or Deep Clone

10

External

이 테이블은 location 절과 클라우드 오브젝트 스토리지의 경로를 사용하여 생성됩니다.  

%sql

create table if not exists hive_metastore.hmsdb_upgrade_db.people_delta
location "s3://databricks-dkushari/hmsdb_upgrade_db/people_delta"
as
select * from delta.`dbfs:/databricks-datasets/learning-spark-v2/people/people-10m.delta`limit 100;

External

As of the source data file format

  1. Sync를 수행하여 (blog) UC 외부 테이블 생성
  2. 모든 종속성이 해결되면 HMS 테이블 을 삭제하여 데이터 접근 차단

11

External

Managed

Delta

CTAS or Deep Clone

업그레이드 예제

이 섹션에서는 위에서 설명한 각 시나리오에 대한 예제가 포함된 데이터브릭스 노트북을 제공합니다.

결론

이 블로그에서는 Hive 메타스토어 테이블을 Unity Catalog 메타스토어로 업그레이드하는 방법을 설명했습니다. Notebook을 참조하여 다양한 업그레이드 옵션을 시도해 보세요. 또한 Demo Center를 참조하여 업그레이드 프로세스 자동화를 시작할 수도 있습니다. HMS 테이블을 UC로 업그레이드하는 과정을 자동화하려면 이 Databricks Lab repository를 사용하는 것을 권장합니다.

여러분의 테이블을 Unity Catalog로 업그레이드하여 통합 거버넌스 기능을 활용하세요. UC로 업그레이드한 후 더 이상 필요하지 않은 경우 Hive 메타스토어 스키마 및 테이블을 삭제할 수 있습니다. 외부 테이블을 삭제해도 클라우드 계정의 데이터 파일은 수정되지 않습니다. 관리형 테이블 또는 관리형 테이블이 있는 스키마를 삭제할 때는 이 블로그에 설명된 대로 예방 조치를 취하세요.

Appendix

import org.apache.spark.sql.catalyst.catalog.{CatalogTable,
CatalogTableType}
import org.apache.spark.sql.catalyst.TableIdentifier
val tableName = "table"
val dbName = "dbname"
val oldTable: CatalogTable = 
spark.sessionState.catalog.getTableMetadata(TableIdentifier(tableName,
Some(dbName)))
val alteredTable: CatalogTable = oldTable.copy(tableType = 
CatalogTableType.EXTERNAL)
spark.sessionState.catalog.alterTable(alteredTable)
Databricks 무료로 시작하기

관련 포스트

모든 제품 포스트 보기