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に登録されているデータを操作する方法を学習できます。
Unity Catalog における Hive metastore へのクエリ
Unity Catalog メタストアは付加的であり、Databricks のワークスペースごとの Hive metastore で使用できます。Hive metastore は、3 レベルの名前空間に hive_metastore
という最上位のカタログとして表示されます。
たとえば、次の表記を使用して、レガシ Hive metastore の sales
スキーマで sales_raw
というテーブルを参照できます。
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
ステートメントで指定することもできます。
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 とは次の点で異なります。
アカウント グループ: Unity Catalogのアクセス制御ポリシーはアカウント グループに適用され、 Hive metastoreのアクセス制御ポリシーはワークスペース ローカル グループに適用されます。 アカウント グループとワークスペース ローカル グループの違いを参照してください。
カタログまたはスキーマ内のオブジェクトに対するすべての操作には、カタログおよびスキーマに対する
USE CATALOG
およびUSE SCHEMA
権限が必要です。 テーブルに対するプリンシパルの権限に関係なく、プリンシパルには、スキーマにアクセスするための親カタログに対するUSE CATALOG
権限と、スキーマ内のオブジェクトにアクセスするためのUSE SCHEMA
権限も必要です。一方、ワークスペース レベルのテーブルアクセスコントロールでは、ルート カタログにUSAGE
を付与すると、すべてのデータベースに対するUSAGE
が自動的に付与されますが、ルート カタログに対するUSAGE
は必要ありません。ビュー: Unity Catalogでは、ビューの所有者は、ビューの参照テーブルおよびビューの所有者である必要はありません。
SELECT
特権があれば十分で、ビューの親スキーマと親カタログのUSE CATALOG
に対するUSE SCHEMA
も十分です。ワークスペース レベルのテーブルアクセスコントロールでは、ビューの所有者は、参照されるすべてのテーブルとビューの所有者である必要があります。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
テーブルを結合します。
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に追加して直接アップグレードすることをお勧めします。