メインコンテンツへジャンプ
Platform blog

HiveテーブルをUnityカタログにアップグレードする方法

ディパンカル・クシャリ
リラン・バレケット
スレーラム・トゥーム
ソム・ナタラジャン
Share this post

このブログでは、Hiveメタストア(HMS)*テーブルをUnityカタログ(UC)にシームレスにアップグレードする方法を、アップグレードするHMSテーブルのバリエーションに応じて異なる方法を使用して、例を挙げて説明します。

*注: Hiveメタストアは、デフォルト、外部メタストア、またはAWS Glue Data Catalogでもかまいません。 簡略化のため、本書では"Hive メタストア" という用語を使用します。

詳細を説明する前に、アップグレードの手順を説明しよう。

  1. 評価- このステップでは、アップグレード対象として特定された既存の HMS テーブルを評価し、アップグレードの適切なアプローチを決定します。 このステップについては、このブログで説明します。
  2. 作成- このステップでは、メタストア、カタログ、スキーマ、ストレージ資格情報、外部ロケーションなど、必要なUCアセットを作成します。 詳細については、ドキュメント(AWSAzureGCP)を参照してください。
  3. アップグレード- このステップでは、ガイダンスに従ってテーブルをHMSからUCにアップグレードします。 このステップについては、このブログで説明します。
  4. グラント- このステップでは、新しくアップグレードされたUCテーブルのグラントを校長に提供し、校長がUCテーブルにアクセスできるようにする必要があります。 詳細はドキュメントを参照 -AWSAzureGCP

現在、3つのクラウドプラットフォーム(AWS、Azure、GCP)すべてで一般的に利用可能なUnity Catalogは、以下の主要機能により、データのセキュリティとガバナンスを簡素化します:

  • 一度定義すれば、どこでもセキュアに:Unity Catalogは、すべてのワークスペースに適用されるデータアクセスポリシーを管理するための単一の場所を提供します。
  • 標準準拠のセキュリティモデル:Unity Catalogのセキュリティモデルは標準的なANSI SQLに基づいており、管理者は使い慣れた構文を使用して、カタログ、データベース(スキーマとも呼ばれる)、テーブル、およびビューのレベルで、既存のデータレイクに権限を付与することができます。
  • 組み込みの監査とリネージ:Unity Catalogは、データへのアクセスを記録するユーザーレベルの監査ログを自動的に取得します。 Unity Catalogは、データ資産がどのように作成され、すべての言語で使用されたかを追跡するリネージデータも取得します。
  • データの発見:Unity Catalogでは、データ資産にタグを付けて文書化し、検索インターフェイスを提供して、データ利用者がデータを見つけやすくします。
  • システムテーブル(パブリックプレビュー):Unityカタログを使用すると、監査ログ、請求可能な使用量、履歴など、アカウントの運用データに簡単にアクセスして照会できます。
  • データ共有:Delta Sharingは、Databricksが開発したオープンなプロトコルで、使用するコンピューティング・プラットフォームに関係なく、他の組織と安全にデータを共有することができます。 Databricksは、Unity CatalogデータガバナンスプラットフォームにDelta Sharingを組み込み、データプロバイダと呼ばれるDatabricksユーザーが、データレシピエントと呼ばれる組織外の個人やグループとデータを共有できるようにした。

Unity Catalog (UC)ですぐに利用できるこれらの豊富な機能は、現在Hiveメタストアではなかなか利用できません。 さらに、Lakehouse MonitoringLakehouse FederationLakehouseIQなど、Databricksの新機能のほとんど(すべてとは言いませんが)は、Unity Catalogを前提条件として構築され、Unity Catalogによって管理され、Unity Catalogが機能する必要があるため、HMSからUCへのデータ資産のアップグレードを遅らせると、これらの新機能を利用することが制限されます。

したがって、Unity Catalogが提供するすべての豊富な機能を利用できるように、既存のHiveメタストアに登録されているテーブルをUnity Catalogメタストアに簡単にアップグレードするにはどうすればよいかという疑問が浮かびます。 このブログでは、HMSテーブルをUCにアップグレードするための考慮事項や方法論について、例を挙げて説明します。

アップグレードの考慮事項と前提条件

このセクションでは、次のセクションでアップグレードの方法論について詳しく説明する前に、アップグレードに関する考慮事項を確認します。

アップグレードに関する考慮事項

Hive Metastoreテーブルのバリエーションは、そのような考慮事項の1つです。 UnityカタログへのアップグレードとみなされるHiveメタストア テーブルは、以下の表に示す各パラメータのタイプを組み合わせて作成することができます。 たとえば、DBFSルートロケーションを使用してCSVマネージドテーブルを作成したり、Amazon S3ロケーションにParquet外部テーブルを作成したりすることができます。このセクションでは、さまざまなバリエーションのテーブルを作成するためのパラメータについて説明します。

パラメーター

バリエーション

テーブル識別ガイド

テーブルタイプ

マネージド

desc拡張hive_metastoreを 実行する<schema name> 。 . 、フィールド "Type<table name> "の値をチェックする。MANAGED」と書かれているはずだ。

外部

desc拡張hive_metastoreを 実行する<schema name> 。 . 、フィールド "Type<table name> "の値をチェックする。"EXTERNAL」と書かれているはずだ。

データ保管場所

DBFS ルートストレージの場所

desc拡張hive_metastoreを<schema name> 実行する 。 . 、フィールド "Location "の値をチェックする。<table name>"dbfs:/user/hive/warehouse/"で始まるはずです。

DBFSマウント・クラウド・オブジェクト・ストレージ

desc拡張hive_metastoreを<schema name> 実行する 。 . 、フィールド "Location "の値をチェックする。<table name>"dbfs:/mnt/"で始まるはずだ。

クラウドストレージの場所を直接指定(S3://、abfss://、gs://など)

desc拡張hive_metastoreを<schema name> 実行します 。 .<table name> 、フィールド "Location "の値をチェックします。S3://」または「abfss://」または「gs://」で始まる必要があります。

表ファイル形式とインターフェース

Delta、Parquet、Avroなどのファイルフォーマット

desc extended hive_metastore<schema name> を実行します 。 .<table name> と、フィールド "Provider" の値を確認します。例えば、"delta"、"parquet "といった具合だ。

Hive SerDeインターフェイスなどのインターフェイス

desc extended hive_metastore<schema name> を実行します 。 .<table name> と、フィールド "Provider" の値を確認します。蜂の巣」と書くべきだ。

上記のパラメータのバリエーションによって、採用されるアップグレード手法は異なる可能性があります。 詳細については、後述の「アップグレード方法」のセクションで説明します。

Azure DatabricksでHMSテーブルのUCへのアップグレードを開始する前に、もう一点考慮する必要があります:

AZUREクラウドの場合 - Blobストレージ(wasb)またはADLS gen 1(adl)に保存されているテーブルをADLS gen 2(abfs)にアップグレードする必要があります。 サポートされていないAzureクラウドストレージをUnityカタログで使用しようとすると、エラーが発生します。

エラーの例:テーブルはHiveメタストアからUnityカタログへのアップグレードの対象外です。 理由未サポートのファイルシステムスキームです。

アップグレードの前提条件

アップグレードプロセスを開始する前に、以下の手順に従って、ストレージ認証情報と外部ロケーションを作成する必要があります。

  1. 対象のクラウドストレージにアクセスできるストレージクレデンシャルを作成します。
  2. ストレージ・クレデンシャルを使用して、ターゲット・クラウド・ストレージを指す外部ロケーションを作成します。
    • 外部ロケーションは、UC外部テーブル、マネージド・カタログ、またはマネージド・スキーマを作成するために使用されます。

アップグレードの方法論

このセクションでは、さまざまなアップグレードオプションをマトリックス形式でご紹介します。 また、アップグレードの手順を示す図も使用しています。

アップグレードには、主に2つの方法があります。SYNCを使用する方法(サポートされているシナリオの場合)と、データレプリケーションを使用する方法(SYNCがサポートされていない場合)です。

  • SYNCを使用する - サポートされているすべてのシナリオ(以下のアップグレードマトリックスセクションに示されています)では、SYNCを使用してHMSテーブルをUCにアップグレードします。 SYNCを使用することで、データのレプリケーションなしでテーブルをアップグレードすることができます。
  • データ・レプリケーションの使用 - サポートされていないすべてのシナリオ(以下のアップグレード・マトリックス・セクションに示されている)では、CTAS(Create Table As Select)またはDEEP CLONE*のいずれかを使用します。 この方法では、データの複製が必要になります。

*注 - HMS ParquetおよびDeltaテーブルのディープクローンを使用して、HMSからUCにデータをコピーし、テーブルをアップグレードすることを検討してください。その他のファイル形式には、Create Table As Select(CTAS)を使用してください。

以下の図では、各手法のアップグレード手順を説明しています。 アップグレードのユースケースにどの方法を使用するかを理解するには、以下のアップグレードマトリックスのセクションを参照してください。

アップグレードの絵画的表現

図1 - SYNCを使用してHMSテーブルをUCにアップグレードする(データ・レプリケーションなし)

HMSテーブル

ダイアグラム・キー

  1. HMSマネージドテーブルと外部テーブルは、クラウドオブジェクトストレージにファイルのディレクトリとしてデータを保存します。
  2. SYNCコマンドは、HMSからUCへのテーブル・メタデータのアップグレードに使用される。ターゲットのUCテーブルは、ソースのHMSテーブル・タイプに関係なく外部です。
  3. HMSからUCへのテーブルのアップグレードにSYNCコマンドを使用した場合、データはコピーされません。ソースのHMSテーブルで使用されている)同じクラウド・ストレージの場所が、ターゲットのUC外部テーブルで参照されます。
  4. ストレージの資格情報は、クラウドテナントの保存データにアクセスするための認証・承認メカニズムです。
  5. 外部ロケーションは、クラウド・ストレージ・パスと、そのクラウド・ストレージ・パスへのア クセスを認可するストレージ・クレデンシャルを組み合わせたオブジェクトです。

図2 - データ・レプリケーションでHMSテーブルをUCにアップグレードする

HMSテーブル

ダイアグラム・キー

  1. HMSマネージドテーブルと外部テーブルは、DBFSルートストレージロケーションにファイルのディレクトリとしてデータを保存します。
  2. CTASまたはDeep Cloneは、HMSテーブルからUCターゲット・テーブルのメタデータを作成します。 HMSのテーブルタイプに関係なく、外部テーブルまたは管理テーブルにアップグレードすることができます。
  3. CTASまたはDeep Cloneは、DBFSルート・ストレージからターゲット・クラウド・ストレージにデータをコピーします。
  4. ストレージの資格情報は、クラウドテナントの保存データにアクセスするための認証・承認メカニズムです。
  5. 外部ロケーションは、クラウド・ストレージ・パスと、そのクラウド・ストレージ・パスへのア クセスを認可するストレージ・クレデンシャルを組み合わせたオブジェクトです。

アップグレード・マトリックス

以下の表は、HMSテーブルからUCテーブルへのアップグレードの様々な可能性を示している。 各シナリオについて、アップグレードの手順をご紹介します。

DBFSルートストレージを使用したHMSストレージフォーマット

HMSテーブルタイプ

HMSテーブルタイプの説明

HMSテーブルの例

ターゲットUCテーブルタイプ

対象UCデータファイルフォーマット

アップグレード方法

1

マネージド

管理テーブルのデータファイルはDBFS ルート(Databricks 管理 HMS データベースのデフォルトの場所)にあります。

%sql

存在しなければテーブルを作成する hive_metastore.hmsdb_upgrade_db.people_parquet
parquetを使用
as select * from parquet.`dbfs:/databricks-datasets/learning-spark-v2/people/people-10m.parquet/`limit 100;

外部または管理

デルタは、管理テーブルと外部テーブルの両方に適したファイル形式です。 外部テーブルは、デルタ以外のファイル形式をサポートしています1。

CTASまたはディープクローン

2

外部

これは、外部テーブルのデータファイルがDBFSルートに存在することを意味します。 テーブル定義には "Location "句があり、テーブルを外部化します。

%sql


存在しなければテーブルを作成する hive_metastore.hmsdb_upgrade_db.people_parquet
パーケットを使う
location"dbfs:/user/hive/warehouse/hmsdb_upgrade_db.db/people_parquet"
として
select * from parquet.`dbfs:/databricks-datasets/learning-spark-v2/people/people-10m.parquet/`limit 100;

外部または管理

デルタは、管理テーブルと外部テーブルの両方に適したファイル形式です。 外部テーブルはデルタ以外のファイル形式をサポートしています。 1

CTASまたはディープクローン

1.注意 - CTASでアップグレードする場合は、デルタに変更することをお勧めします。

HMSハイブ・サーデ・テーブル

H MSテーブルタイプ

HMSテーブルタイプの説明

HMSテーブルの例

ターゲットUCテーブルタイプ

対象UCデータファイルフォーマット

アップグレード方法

3

Hive SerDe 外部またはマネージド 2

これらはHive SerDeインターフェイスを使用して作成されたテーブルです。 databricks上のハイブテーブルの詳細については、このリンクを参照してください。

%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'.
INPUTFORMAT 'org.apache.hadoop.mapred.SequenceFileInputFormat' として格納されます。
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat' を使用します。
location"s3://databricks-dkushari/sync-test/parquetexample" ;

外部または管理

デルタは、管理テーブルと外部テーブルの両方に適したファイル形式です。 外部テーブルはデルタ以外のファイル形式をサポートしている。 3


CTASまたはディープクローン

2.注 - 基礎となるストレージ形式に関係なく、ハイブ SerDe は同じアップグレードパスに従います。
3.注 -CTAS を使用してアップグレードを行う場合は、Delta に変更することをお勧めします。

DBFSマウントストレージを使用したHMSストレージフォーマット

HMSテーブルタイプ

HMSテーブルタイプの説明

HMSテーブルの例

ターゲットUCテーブルタイプ

対象UCデータファイルフォーマット

アップグレード方法

4

マネージド





これは、親データベースのロケーションが外部パス(例えば、オブジェクトストアからマウントされたパス)に設定されている場合です。 テーブルはlocation句なしで作成され、テーブル・データはそのデフォルト・データベース・パスの下に保存される。

%sql
存在しなければデータベースを作成する hive_metastore.hmsdb_upgrade_db location"dbfs:/mnt/test-mnt/hmsdb_upgrade_db/" ;

createtableifnotexistsハイブ_メタストア.hmsdb_upgrade_db.people_delta
として
select * from delta.`dbfs:/databricks-datasets/learning-spark-v2/people/people-10m.delta`limit 100;

外部

HMSのソース・データ・ファイル形式と同様

  1. 同期を実行してUC外部テーブルを作成する
  2. HMSマネージドをHMSエクスターナルに変換する(コードは以下の付録に記載)
  3. すべての依存関係が解決された後、HMSテーブルを削除する。
  4. マウントポイントを使用してデータにアクセスする方法がないように、すべての依存関係が解決された後、マウントポイントをアンマウントする

5

マネージド

マネージド

Delta

CTASまたはディープクローン

6

外部









このテーブルは、location句と、クラウド・オブジェクト・ストアからマウントされたパスを指定するパスで作成される。

%sql
存在しなければデータベースを作成する hive_metastore.hmsdb_upgrade_db location"dbfs:/mnt/test-mnt/hmsdb_upgrade_db/" ;

存在しない場合はテーブルを作成する hive_metastore.hmsdb_upgrade_db.people_delta
場所"dbfs:/mnt/test-mnt/hmsdb_upgrade_db/people_delta"
として
select * from delta.`dbfs:/databricks-datasets/learning-spark-v2/people/people-10m.delta`limit 100;

外部

HMSのソース・データ・ファイル形式と同様

  1. UC外部テーブルを作成するためにSyncを実行する(ブログ
  2. すべての依存関係が解決された後、HMSテーブルを削除し、データにアクセスできないようにする。
  3. すべての依存関係が解決された後、マウントポイントをアンマウントする。

7

外部

マネージド

Delta

CTASまたはディープクローン

4.注意 - 外部テーブルへの変換後、HMSテーブルが個別に削除されることを確認してください。HMSデータベース/スキーマがロケーションで定義されており、カスケード・オプションでデータベースがドロップされた場合、基礎となるデータは失われ、アップグレードされたUCテーブルはデータを失います

クラウド・オブジェクト・ストレージを使用したHMSストレージ・フォーマット

HMSテーブルタイプ

HMSテーブルタイプの説明

HMSテーブルの例

ターゲットUCテーブルタイプ

対象UCデータファイルフォーマット

アップグレード方法

8

マネージド










親データベースのロケーションは、クラウド・オブジェクトストアなどの外部パスに設定されている。 テーブルはlocation句なしで作成され、テーブル・データはそのデフォルト・データベース・パスの下に保存される。

%sql

hive_metastore.hmsdb_upgrade_dbが存在しない場合はデータベースを作成します。 location"s3://databricks-dkushari/hmsdb_upgrade_db/" ;

hive_metastore.hmsdb_upgrade_db.people_deltaが存在しない場合はテーブルを作成します。
として
select * from delta.`dbfs:/databricks-datasets/learning-spark-v2/people/people-10m.delta`limit 100;

エクスターン

アル

ソースデータのファイル形式

  1. 同期を実行してUC外部テーブルを作成する
  2. HMSマネージドをHMSエクスターナルに変換する
  3. すべての依存関係が解決された後、HMSテーブルを削除し、データにアクセスできないように する

9

マネージド

マネージド

Delta

CTASまたはディープクローン

10

外部

テーブルはlocation句とクラウド・オブジェクト・ストアを指定するパスで作成される。

%sql

存在しなければテーブルを作成する hive_metastore.hmsdb_upgrade_db.people_delta
location"s3://databricks-dkushari/hmsdb_upgrade_db/people_delta"
として
select * from delta.`dbfs:/databricks-datasets/learning-spark-v2/people/people-10m.delta`limit 100;

外部

ソースデータのファイル形式

  1. UC外部テーブルを作成するためにSyncを実行する(ブログ
  2. すべての依存関係が解決された後、HMSテーブルを削除し、データにアクセスできないようにする。

11

外部

マネージド

Delta

CTASまたはディープクローン

アップグレードの例

このセクションでは、上記の各シナリオの例をDatabricks ノートブックに示します。

まとめ

このブログでは、Hiveメタストア テーブルをUnityカタログ メタストアにアップグレードする方法を紹介しました。 ノートブックを参照して、さまざまなアップグレードオプションをお試しください。 アップグレードプロセスの自動化を開始するには、デモセンターを参照することもできます。 Hive MetastoreテーブルのUnity Catalogへのアップグレードを自動化するには、このDatabricks Labリポジトリの使用をお勧めします。

今すぐテーブルをUnity Catalogにアップグレードして、統合されたガバナンス機能の恩恵を受けましょう。 UCへのアップグレード後、不要になったHiveメタストア スキーマとテーブルは削除できます。 外部テーブルを削除しても、クラウド・テナント上のデータ・ファイルは変更されません。 マネージドテーブルやマネージドテーブルを持つスキーマを削除する際には、(このブログで説明されているような)注意が必要です。

付録

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 無料トライアル

関連記事

Platform blog

How to Seamlessly Upgrade Your Hive Metastore Objects to the Unity Catalog Metastore Using SYNC

In this blog, we explore how you can seamlessly upgrade your Hive metastore* schemas and external tables to the Unity Catalog metastore using...
Platform blog

Unity Catalogによる分散型データガバナンスと孤立した環境の実現

Original : Distributed Data Governance and Isolated Environments with Unity Catalog 翻訳: junichi.maruyama データ、アナリティクス、AIに業務を依存する組織では、効果的なデータガバナンスが不可欠です。多くの組織で、集中型データガバナンスの価値提案に対する認識が高まってきています。しかし、最高の意図を持っていても、適切な組織プロセスとリソースがなければ、集中型ガバナンスの導入は困難な場合があります。多くの組織では、最高データ責任者(CDO)の役割がまだ確立されておらず、誰が組織全体のデータガバナンス方針を定義し、実行するのかについて疑問が残ります。 その結果、組織全体のデータガバナンスポリシーを定義し実行する責任が一元化されていないことが多く、組織内のビジネスライン、サブユニット、その他の部門間でポリシーが異なったり、管理団体が異なったりすることになります。簡単のため、このパターンを分散型ガバナンスと呼ぶことにしま
Company blog

Databricks Unity CatalogはAmgenのエンタープライズ規模でのデータガバナンス実現にどのように貢献したか

July 5, 2023 Jaison DominicLakhan Prajapati による投稿 in 導入事例
翻訳:Motokazu Ishikawa - Original Blog Link このブログは、Amgen社の情報システム担当シニアマネージャーであるJaison Dominic氏と、ZS Associates社のアーキテクチャ・エンジニアリング担当ディレクターであるLakhan Prajapati氏によって執筆されました。 世界最大の独立系バイオテクノロジー企業である Amgen は、長い間イノベーションの代名詞でした。40年にわたり、新しい医薬品製造プロセスを開拓し、命を救う医薬品を開発し、世界中の何百万人もの人々の生活にプラスの影響を与えてきました。 データとAIは、当社の事業戦略にとって極めて重要です。当社の企業内にデータが豊富にあることを認識し、当社のビジョンは、セルフサービスのガバナンス機能を通じてデータ分析にアクセスできるデータ主導型の組織を確立することでした。モダナイゼーションを追求する中で、当社はデジタルトランスフォーメーションの旅の基盤として Databricks Lakehouse Pla
製品一覧へ