4
3

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.

本書では、Databricksが提供するUnity Catalogの基本的な機能をウォークスルーします。

プレビュー
Unity Catalogはパブリックプレビューです。Unity Catalog向けのアカウントコンソールUIはパブリックプレビューです。プレビューに参加するには、Databricks担当者にお問合せください。

注意

  • パブリックプレビューにおけるUnity Catalogの制限を確認してください。
  • アカウントコンソールはメタストアを作成、管理し、メタストアをワークスペースにリンクし、メタストアのデータにアクセスできるユーザー、グループのアカウントレベルを管理することができるweb UIです。Unity Catalogはアカウントコンソールに特定の情報を格納します。
  • Unity Catalogを使用するには、PremiumプランのDatabricksアカウントが必要です。

Unity Catalogとは

Unity Catalogは、レイクハウスにおけるデータとAIに対するきめ細かいガバナンスを提供するメタストアです。

Unity Catalogは以下のキーとなる機能によって、お使いのデータに対するセキュリティとガバナンスをシンプルなものにします。

  • 一度定義すれば、どこでもセキュアに: Unity Catalogは全てのワークスペース、ペルソナに対して適用されるデータアクセスポリシーを管理する唯一の場所を提供します。
  • 標準準拠のセキュリティモデル: Unity Catalogのセキュリティモデルは標準的なANSI SQLをベースとしており、管理者は馴染みのある文法を用いて、既存データレイクに存在するカタログ、データベース、テーブル、ビューのレベルでアクセス権を設定することができます。
  • ビルトインの監査機能: Unity Catalogは自動でユーザーレベルの監査ログを捕捉し、データへのアクセスを記録します。

Unity Catalogの概要、キーコンセプトに関しては以下の記事を参照ください。

Unity Catalogのウォークスルー

以降では、Unity Catalogをどのように利用するのかを説明します。Unity Catalogの設定手順については、Unity Catalogの有効化後にUnity Catalogを使い始めるの手順に従ってください。

クラスターの作成

Unity Catalogで管理されるデータにアクセスするためには、Databricksクラスターの設定が必要となります。

  • Databricksランタイム10.3以降が必要です。
  • Advanced options配下のSecurity Modeで、Single UserあるいはUser Isolationを設定します。

Screen Shot 2022-03-14 at 16.55.12.png

新規カタログの作成

上で作成したクラスターにSQLノートブックをアタッチします。本書ではノートブックからの操作を説明しますが、Databricks SQLのData Explorerでもアクセス権の管理などを行うことができます。

これまでは2レベルの名前空間でデータベースとテーブルを管理していましたが、Unity Catalogでは3レベルの名前空間を用いることになります。新たにカタログが最上位に存在することになります。

Unity Catalogではカタログ、スキーマ(データベースとも呼ばれます)、テーブルとビューを提供します。テーブルを参照するには以下の文法を使用します。

<catalog>.<schema>.<table>

ワークスペースのローカルHiveメタストア、あるいは外部Hiveメタストアにすでにデータがある場合、Unity Catalogは追加される形となります: 既存のワークスペースのHiveメタストアは3レベル名前空間のカタログの1つ(hive_metastoreと呼ばれます)になり、Hiveメタストアのテーブルは3レベルの名前空間記述: hive_metastore.<schema>.<table>によってアクセスすることができます。

カタログを作成するには、CREATE CATALOG文を使用します。カタログを作成できるのはDatabricksアカウントで「メタストア管理者(Metastore admin)」として登録されているユーザーのみです。以下の例ではquickstart_catalog_takaというカタログを作成しています。

SQL
--- 新規カタログの作成
CREATE CATALOG IF NOT EXISTS quickstart_catalog_taka;

カタログを選択するにはUSE CATALOG文を使用します。

SQL
-- カタログの選択
USE CATALOG quickstart_catalog_taka;

SHOW CATALOGを用いることで、メタストアの全てのカタログを表示します。

SQL
--- メタストアの全てのカタログの表示
SHOW CATALOGS;

Screen Shot 2022-03-18 at 7.49.05.png

カタログのアクセス権を設定します。アクセス権設定の詳細はアクセス権の管理で説明します。

SQL
--- アカウントの全ユーザーに対してCREATE、USAGE権限を許可
--- これは、他のアカウントレベルのグループ、ユーザーにも動作します
GRANT CREATE, USAGE
ON CATALOG quickstart_catalog_taka
TO `account users`;
SQL
--- カタログのアクセス権の確認
SHOW GRANT ON CATALOG quickstart_catalog_taka;

Screen Shot 2022-03-18 at 7.50.36.png

スキーマの作成

スキーマ(データベース)はUnity Catalog名前空間の2番目のレイヤーであり、テーブルとビューを管理します。

SQL
--- カタログに新規スキーマを作成
CREATE SCHEMA IF NOT EXISTS quickstart_schema
COMMENT "quickstart_schemaという新規Unity Catalogのスキーマです";
SQL
-- 選択されたカタログのスキーマを表示
SHOW SCHEMAS;

Screen Shot 2022-03-18 at 7.52.14.png

SQL
-- スキーマの詳細を表示
DESCRIBE SCHEMA EXTENDED quickstart_schema;

Screen Shot 2022-03-18 at 7.52.39.png

テーブルの作成

Unity Catalogにおけるテーブルにはマネージドテーブル外部テーブルがあります。Unity Catalogでテーブルを作成する際、デフォルトではマネージドテーブルになります。LOCATIONが指定されない場合、テーブルはメタストアに設定されたマネージドの格納場所に作成されます。

SQL
-- スキーマの選択
USE quickstart_schema;
SQL
-- マネージドのDeltaテーブルを作成、2行を追加
CREATE TABLE IF NOT EXISTS quickstart_table
  (columnA Int, columnB String) PARTITIONED BY (columnA);

INSERT INTO TABLE quickstart_table
VALUES
  (1, "one"),
  (2, "two");
SQL
-- スキーマの全テーブルの表示
SHOW TABLES IN quickstart_schema;

Screen Shot 2022-03-18 at 7.54.45.png

SQL
-- テーブルの詳細を表示
DESCRIBE TABLE EXTENDED quickstart_table;

Screen Shot 2022-03-18 at 7.55.16.png

3レベルの名前空間を用いることで、いくつかの方法でテーブルにアクセスすることができます。

  • 完全修飾名によるアクセス
  • デフォルトカタログを選択し、スキーマ、テーブル名を用いてテーブルにアクセス
  • デフォルトスキーマを選択し、テーブル名を使用

以下の3つのコマンドは機能的に等価です。

SQL
-- 3レベル名前空間を用いたテーブルへのクエリーの実行
SELECT
  *
FROM
  quickstart_catalog_taka.quickstart_schema.quickstart_table;
SQL
-- デフォルトカタログを選択し、スキーマ、テーブル名でテーブルへクエリーを実行
USE CATALOG quickstart_catalog_taka;
SELECT *
FROM quickstart_schema.quickstart_table;
SQL
-- デフォルトカタログとデフォルトスキーマを選択し、テーブル名でテーブルへクエリーを実行
USE CATALOG quickstart_catalog_taka;
USE quickstart_schema;
SELECT *
FROM quickstart_table;

これらは全て同じ結果を返します。
Screen Shot 2022-03-18 at 7.56.47.png

テーブルの削除

DROP TABLEコマンドでマネージドテーブルを削除すると、実体であるデータファイルも削除されます。

DROP TABLEコマンドで外部テーブルを削除すると、テーブルに関するメタデータはカタログから削除されますが、実体のデータファイルは削除されません。

SQL
-- マネージドテーブルの削除(以降のコマンドを実行するには、テーブルを再作成してください)
DROP TABLE quickstart_catalog_taka.quickstart_schema.quickstart_table

リネージュの追跡

Unity Catalogで管理されるテーブルはリネージュ(系統情報)が追跡されます。どのテーブルからどのテーブルが作成されたのか、カラムレベルで追跡が可能です。

注意

  • リネージュ機能を利用するには別途プライベートプレビューの申し込みが必要です。
  • クラスター、SQLエンドポイントで追加の設定spark.databricks.dataLineage.enabled trueが必要です。
  • 2022/3/15時点では以下のリージョンのみでサポートされています。今後追加予定です。
    • AWS: us-west-1, us-west-2, us-east-1, us-east-2
    • Azure: EAST US, EAST US 2, WEST US
SQL
-- スキーマを作成し、権限を付与します
CREATE SCHEMA quickstart_catalog_taka.lineagedemo;
GRANT USAGE, CREATE on SCHEMA quickstart_catalog_taka.lineagedemo to `account users`;
SQL
-- ソーステーブルを作成します
CREATE TABLE IF NOT EXISTS quickstart_catalog_taka.lineagedemo.menu (
  recipe_id INT,
  app string,
  main string,
  desert string
);

INSERT INTO quickstart_catalog_taka.lineagedemo.menu 
    (recipe_id, app, main, desert) 
VALUES 
    (1,"Ceviche", "Tacos", "Flan"),
    (2,"Tomato Soup", "Souffle", "Creme Brulee"),
    (3,"Chips","Grilled Cheese","Cheescake");
SQL
-- ソーステーブルから派生テーブルを作成します
CREATE TABLE quickstart_catalog_taka.lineagedemo.dinner 
AS SELECT recipe_id, concat(app," + ", main," + ",desert) as full_menu FROM quickstart_catalog_taka.lineagedemo.menu

Databricks SQLのData Explorerでリネージュを確認します。

派生テーブルであるdinnerLineageを確認すると、Upstreamにソーステーブルであるmenuが表示されています。
Screen Shot 2022-03-18 at 8.00.55.png

See Lineage Graphをクリックすることで、グラフ構造を可視化することができます。
Screen Shot 2022-03-18 at 8.02.39.png

さらに行レベルのリネージュを確認します。派生テーブルのdinnerのカラムfull_menuは、ソーステーブルの3つのカラムを結合したものでした。Schemaをクリックし、full_menuを選択します。すると、Upstreamにはソーステーブルの3つのカラムが表示されています。
Screen Shot 2022-03-18 at 8.04.03.png

ここでも、See Lineage Graphをクリックすることで、カラムレベルのリネージュグラフを確認することができます。
Screen Shot 2022-03-18 at 8.05.05.png

このように、複数のテーブルを活用しているシーンにおいても、あるテーブルがどのテーブルから作成されたのか、あるカラムはどのように作成されたのかをきちんと追跡できるようになります。これによって、データサイエンティストやデータアナリストは安心してデータを活用できるようになります。

アクセス権の管理

データへのアクセスを管理するために、GRANTREVOKE文を使用します。Unity Catalogはデフォルトでセキュリティ保護を行い、データへのアクセスは自動では許可されません。最初は、全てのユーザーがデータにアクセスすることができません。メタストアの管理者とデータのオーナーが、アカウントレベルのユーザーとグループに対してアクセス権の許可、剥奪を行うことができます。GRANTは再帰的ではありません。明示的に、カタログ、スキーマ、テーブル・ビューに対してアクセス権を許可する必要があります。

Unity Catalogにおけるアクセス権の詳細については、Unity Catalogにおけるデータのアクセス権をご覧ください。

アクセス権の許可

セキュリティ保護可能オブジェクトにプリンシパルのアクセス権を許可します。メタストア管理者とセキュリティ保護可能オブジェクトのオーナーのみがアクセス権を許可することができます。

SQL
-- スキーマの USAGE を許可
GRANT USAGE
ON SCHEMA quickstart_schema
TO `account users`;
SQL
-- プリンシパルに対してテーブルの SELECT を許可
GRANT SELECT
ON TABLE quickstart_schema.quickstart_table
TO `account users`;

アクセス権の表示

SQL
-- quickstart_tableのアクセス権の表示
SHOW GRANTS
ON TABLE quickstart_catalog_taka.quickstart_schema.quickstart_table;

Screen Shot 2022-03-18 at 8.09.34.png

SQL
-- quickstart_schemaのアクセス権の表示
SHOW GRANTS
ON SCHEMA quickstart_catalog_taka.quickstart_schema;

Screen Shot 2022-03-18 at 8.10.15.png

アクセス権の剥奪

SQL
REVOKE SELECT
ON TABLE quickstart_schema.quickstart_table
FROM `account users`;

なお、これらアクセス権の管理は、Databricks SQLのData Explorerからも操作することができます。
Screen Shot 2022-03-18 at 8.12.10.png

今回ご紹介した機能はプレビュー段階のものです。GAに向けて機能改善を行なっていく予定ですので楽しみにしていてください。

Databricks 無料トライアル

Databricks 無料トライアル

4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?