Unity Catalogと従来のHive metastoreとの連携
この記事では、Hive metastore Databricksワークスペースが に対して有効になっている場合に、ワークスペースごとの を引き続き使用するための 1Unity Catalog つの方法について説明します。
ワークスペースが Unity Catalogに対して有効になる前にサービスにあった場合は、引き続き使用するデータを含む組み込み Hive metastore がある可能性があります。 ではDatabricks Hive metastoreフェデレーションUnity CatalogHive metastore を使用して、 をミラーリングするフォーリンカタログを で作成し、最終的にはすべてのレガシーワークロードをそのフォーリンカタログを使用するように移行することをお勧めします。ただし、 Hive metastore フェデレーションプロセスをまだ開始していない場合は、この記事を使用して、レガシ Hive metastore に登録されているデータと Unity Catalogに登録されているデータを操作する方法を学習できます。
で をクエリするHive metastoreUnity Catalog
Unity Catalogメタストアは付加的であるため、 のワークスペースごとのHive metastore Databricksで使用できます。Hive metastoreは、3 レベルの名前空間に hive_metastore
という最上位のカタログとして表示されます。
たとえば、レガシ Hive metastore のsales
スキーマで sales_raw
というテーブルを参照するには、次の表記を使用します。
- SQL
- Python
- R
- Scala
SELECT * from hive_metastore.sales.sales_raw;
display(spark.table("hive_metastore.sales.sales_raw"))
library(SparkR)
display(tableToDF("hive_metastore.sales.sales_raw"))
display(spark.table("hive_metastore.sales.sales_raw"))
USE
ステートメントでカタログとスキーマを指定することもできます。
- SQL
- Python
- R
- Scala
USE hive_metastore.sales;
SELECT * from sales_raw;
spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))
library(SparkR)
sql("USE hive_metastore.sales")
display(tableToDF("sales_raw"))
spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))
Unity Catalog と Hive metastore のアクセス制御
で レガシー テーブルアクセスコントロール を構成した場合、 は、標準アクセスモードで実行されているクラスターの カタログ内のデータに対して、これらのアクセス制御を引き続き適用します。Hive metastoreDatabrickshive_metastore
Unity Catalog のアクセスモデルは、 DENY
ステートメントがないなど、従来のアクセス制御とは少し異なります。 Hive metastoreはワークスペースレベルのオブジェクトです。hive_metastore
カタログ内で定義された権限は、常にワークスペース内のローカルユーザーとグループを参照します。Unity Catalog権限モデルと従来のテーブルアクセスコントロールの比較を参照してください。
従来のテーブルアクセスコントロールと比較した Unity Catalog 特権モデル
のアクセス制御モデルは、従来の のUnity Catalog テーブルアクセスコントロールHive metastore とは次の点で異なります。
- アカウント グループ : Access control ポリシー in Unity Catalog はアカウント グループに適用され、 Hive metastore のアクセス制御ポリシー はワークスペース-local グループに適用されます。 「Databricks のグループの種類」を参照してください。
- カタログまたはスキーマ内のオブジェクトに対するすべての操作には、カタログとスキーマに対する
USE CATALOG
およびUSE SCHEMA
のパーミッションが必要です 。テーブルに対するプリンシパルの権限に関係なく、プリンシパルは、スキーマにアクセスするための親カタログに対するUSE CATALOG
権限と、スキーマ内のオブジェクトにアクセスするためのUSE SCHEMA
権限も必要です。一方、ワークスペース レベルのテーブルアクセスコントロールでは、ルート カタログでUSAGE
を付与すると、すべてのデータベースに対するUSAGE
が自動的に付与されますが、ルート カタログでのUSAGE
は必要ありません。 - ビュー : Unity Catalog では、ビューの所有者は、ビューの参照されるテーブルとビューの所有者である必要はありません。
SELECT
権限があれば、ビューの親スキーマのUSE SCHEMA
と親カタログのUSE CATALOG
とともに十分です。ワークスペースレベルのテーブルアクセスコントロールでは、ビューの所有者は、参照されるすべてのテーブルとビューの所有者である必要があります。 ANY FILE
またはANONYMOUS FUNCTION
のサポートなし : Unity Catalog には、特権のないユーザーが特権コードを実行できるようにするANY FILE
またはANONYMOUS FUNCTION
のセキュリティ保護可能なオブジェクトの概念はありません。READ_METADATA
権限なし : Unity Catalog は、メタデータを表示するためのアクセスを別の方法で管理します。「Unity Catalog の特権とセキュリティ保護可能なオブジェクト」を参照してください。
Unity CatalogオブジェクトとHive metastoreオブジェクト間の結合
3 レベルの名前空間表記を使用すると、 Unity Catalog メタストアのデータを従来の Hive metastoreのデータと結合できます。
レガシ Hive metastore のデータとの結合は、そのデータが存在するワークスペースでのみ機能します。 このような結合を別のワークスペースで実行しようとすると、エラーが発生します。 Databricks では、従来のテーブルとビューを Unity Catalog にアップグレード することをお勧めします。
次の例では、order_id
フィールドが等しい場合に、レガシ Hive metastore メタストアの sales_current
テーブルと Unity Catalog メタストアの sales_historical
テーブルを結合します。
- SQL
- Python
- R
- Scala
SELECT * FROM hive_metastore.sales.sales_current
JOIN main.shared_sales.sales_historical
ON hive_metastore.sales.sales_current.order_id = main.shared_sales.sales_historical.order_id;
dfCurrent = spark.table("hive_metastore.sales.sales_current")
dfHistorical = spark.table("main.shared_sales.sales_historical")
display(dfCurrent.join(
other = dfHistorical,
on = dfCurrent.order_id == dfHistorical.order_id
))
library(SparkR)
dfCurrent = tableToDF("hive_metastore.sales.sales_current")
dfHistorical = tableToDF("main.shared_sales.sales_historical")
display(join(
x = dfCurrent,
y = dfHistorical,
joinExpr = dfCurrent$order_id == dfHistorical$order_id))
val dfCurrent = spark.table("hive_metastore.sales.sales_current")
val dfHistorical = spark.table("main.shared_sales.sales_historical")
display(dfCurrent.join(
right = dfHistorical,
joinExprs = dfCurrent("order_id") === dfHistorical("order_id")
))
デフォルトカタログ
デフォルト カタログは、 Unity Catalogが有効になっているワークスペースごとに構成されます。
データ操作を実行するときに最上位のカタログ名を省略すると、デフォルトのカタログが想定されます。
ワークスペースに対して最初に構成されたデフォルト カタログは、ワークスペースが Unity Catalogに対してどのように有効にされたかによって異なります。
- ワークスペースが自動的に Unity Catalog 有効になっている場合、 ワークスペース カタログ はデフォルト カタログとして設定されています。 「Unity Catalog の自動有効化」を参照してください。
- ワークスペースで手動で Unity Catalog が有効になっている場合、
hive_metastore
カタログはデフォルト カタログとして設定されています。
既存のワークスペース内で Hive metastore から Unity Catalog に移行する場合は、 Hive metastore を参照する既存のコードに影響を与えないように、hive_metastore
をデフォルト カタログとして使用するのが理に Hive metastore。
デフォルト カタログを取得して切り替える方法については、「 デフォルト カタログの管理」を参照してください
クラスター スコープのデータ アクセス権限
Hive metastore を Unity Catalogと共に使用すると、クラスターに関連付けられたデータ アクセス資格情報は、Hive metastoreデータへのアクセスに使用されますが、Unity Catalogに登録されているデータへのアクセスには使用されません。
ユーザーが Unity Catalog の外部にあるパス (テーブルまたは外部ロケーションとして登録されていないパスなど) にアクセスする場合は、クラスターに割り当てられたアクセス資格情報が使用されます。
「 Amazon S3 への接続」を参照してください。
レガシ テーブルを Unity Catalog にアップグレードする
Hive metastore内のテーブルは、組み込み監査、リネージ、アクセス制御など、Unity Catalog が導入するセキュリティおよびガバナンス機能の完全なセットの恩恵を受けません。Databricks では、Hive metastore フェデレーションを使用して、Hive metastore に登録されているデータを Unity Catalogに移行するか、レガシ テーブルを Unity Catalogに追加して直接アップグレードすることをお勧めします。