0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Unity CatalogとレガシーHiveメタストアを操作する

Last updated at Posted at 2022-09-12

Work with Unity Catalog and the legacy Hive metastore | Databricks on AWS [2022/8/26時点]の翻訳です。

本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。

Unity CatalogにおけるHiveメタストアへのクエリー

Unity Catalogは追加可能なものであるので、DatabricksにおけるワークスペースごとのHiveメタストアと一緒に使用できることを意味します。Hiveメタストアは3レベルの名前空間のhive_metastoreとして表示されます。

例えば、以下の記述を用いることでレガシーのHiveメタストアのschemasales_rawと呼ばれるテーブルを参照することができます。

SQL
SELECT * from hive_metastore.sales.sales_raw;
Python
display(spark.table("hive_metastore.sales.sales_raw"))
R
library(SparkR)

display(tableToDF("hive_metastore.sales.sales_raw"))
Scala
display(spark.table("hive_metastore.sales.sales_raw"))

また、USE文を使ってカタログやスキーマを指定することができます。

SQL
USE hive_metastore.sales;
SELECT * from sales_raw;
Python
spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))
R
library(SparkR)

sql("USE hive_metastore.sales")
display(tableToDF("sales_raw"))
Scala
spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))

Unity CatalogとHiveメタストアのアクセスコントロール

Hiveメタストアでテーブルアクセスコントロールを設定している場合、共有アクセスモードで稼働しているクラスターにおいては、Databricksはhive_metastoreのデータに対してこれらのアクセスコントロールを強制し続けます。Unity Catalogのアクセスモデルは、DENY文が無いなどレガシーなアクセスコントロールとは若干異なります。hive_metastoreカタログで定義されたアクセス権は、常にワークスペースのローカルユーザーとグループを参照します。テーブルアクセスコントロールとの違いをご覧ください。

テーブルアクセスコントロールとの違い

Unity CatalogはワークスペースごとのレガシーなHiveメタストアでテーブルアクセスコントロールを用いることと、以下のキーとなる違いがあります。

Unity Catalogにおけるアクセスコントロールモデルは、テーブルアクセスコントロールと以下の点で異なります。

  • アカウントレベルのアイデンティティ: Unity Catalogにおけるアクセスコントロールポリシーは、アカウントレベルのユーザーやグループに適用されます。Hiveメタストアのアクセスコントロールポリシーはワークスペースレベルのユーザーとグループに適用されます。
  • 権限の継承はありません: Unity Catalogでは親のオブジェクトの権限は、子供のオブジェクトには継承されません。
  • カタログ内のオブジェクトに対するすべてのオペレーションにおいては、カタログにおけるUSAGE権限が必要です: テーブルやデータベースのプリンシパルの権限に関係なく、テーブルやデータベースにアクセスするためにはプリンシパルにUSAGE権限が必要となります。ワークスペースレベルのテーブルアクセスコントロールを用いることで、ルートカタログにUSAGEを許可するとすべてのデータベースに対してUSAGEが自動で許可されますが、ルートカタログのUSAGEは不要です。
  • ビュー: Unity Catalogでは、ビューのオーナーはビューが参照するテーブルやビューのオーナーである必要がありません。ビューの親のスキーマ、カタログのUSAGESELECT権限で十分です。ワークスペースレベルのテーブルアクセスコントロールを用いる際には、ビューのオーナーは参照するすべてのテーブルとビューのオーナーである必要があります。
  • ALL FILESANONYMOUS FUNCTIONのサポートはありません: Unity Catalogでは、ALL FILESANONYMOUS FUNCTION権限の概念がありません。これらの権限は許可されないユーザーが許可されたコードを実行できるように、アクセスコントロールの制限を回避するために使用される可能性があります。

Unity CatalogとHiveメタストアオブジェクトのJoin

3レベルの名前空間の記述を用いることで、Unity CatalogのメタストアとレガシーHiveメタストアのjoinを行うことができます。

注意
レガシーHiveのデータとのjoinは、データが存在しているワークスペースでのみ動作します。他のワークスペースでのこのようなjoinを実行しようとするとエラーとなります。レガシーなテーブルとビューをUnity Catalogにアップグレードすることをお勧めします。

以下の例では、レガシーなHiveメタストアのsales_currentテーブルと、Unity Catalogのsales_historicalテーブルで、order_idフィールドが等しい場合にjoinしています。

SQL
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;
Python
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
))
R
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))
Scala
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")
))

デフォルトカタログ

トップレベルのカタログ名を省略し、USE CATALOG文を使用しない場合、デフォルトのカタログが仮定されます。ワークスペースのデフォルトカタログを設定するには、spark.databricks.sql.initial.catalog.nameの値を設定します。

変更なしに既存のコードが現在のHiveメタストアを操作できるように、デフォルトのカタログの値はhive_metastoreに設定することをお勧めします。

クラスターのインスタンスプロファイル

Unity CatalogとHiveメタストアを一緒に使用する際、クラスターのインスタンスプロファイルは、Hiveメタストアのデータにアクセスするために使用されますが、Unity Catalogに登録されているデータには使用されません。

ユーザーがUnity Catalogの外のパス(テーブルとして登録されていないパスや外部ロケーションなど)にアクセスすると、クラスターのインスタンスプロファイルが使用されます。

レガシーテーブルをUnity Catalogにアップグレードする

Hiveメタストアのテーブルは、Unity Catalogが導入するビルトインの監査やアクセスコントロールのようなセキュリティやガバナンスのフル機能を活用することができません。これらをUnity Catalogに追加することでレガシーテーブルをアップグレードすることをお勧めします。

Databricks 無料トライアル

Databricks 無料トライアル

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?