本書では、Databricksが提供するUnity Catalogの基本的な機能をウォークスルーします。
プレビュー
Unity Catalogはパブリックプレビューです。Unity Catalog向けのアカウントコンソールUIはパブリックプレビューです。プレビューに参加するには、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を設定します。
新規カタログの作成
上で作成したクラスターに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
というカタログを作成しています。
--- 新規カタログの作成
CREATE CATALOG IF NOT EXISTS quickstart_catalog_taka;
カタログを選択するにはUSE CATALOG
文を使用します。
-- カタログの選択
USE CATALOG quickstart_catalog_taka;
SHOW CATALOG
を用いることで、メタストアの全てのカタログを表示します。
--- メタストアの全てのカタログの表示
SHOW CATALOGS;
カタログのアクセス権を設定します。アクセス権設定の詳細はアクセス権の管理で説明します。
--- アカウントの全ユーザーに対してCREATE、USAGE権限を許可
--- これは、他のアカウントレベルのグループ、ユーザーにも動作します
GRANT CREATE, USAGE
ON CATALOG quickstart_catalog_taka
TO `account users`;
--- カタログのアクセス権の確認
SHOW GRANT ON CATALOG quickstart_catalog_taka;
スキーマの作成
スキーマ(データベース)はUnity Catalog名前空間の2番目のレイヤーであり、テーブルとビューを管理します。
--- カタログに新規スキーマを作成
CREATE SCHEMA IF NOT EXISTS quickstart_schema
COMMENT "quickstart_schemaという新規Unity Catalogのスキーマです";
-- 選択されたカタログのスキーマを表示
SHOW SCHEMAS;
-- スキーマの詳細を表示
DESCRIBE SCHEMA EXTENDED quickstart_schema;
テーブルの作成
Unity Catalogにおけるテーブルにはマネージドテーブルと外部テーブルがあります。Unity Catalogでテーブルを作成する際、デフォルトではマネージドテーブルになります。LOCATION
が指定されない場合、テーブルはメタストアに設定されたマネージドの格納場所に作成されます。
-- スキーマの選択
USE quickstart_schema;
-- マネージドの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");
-- スキーマの全テーブルの表示
SHOW TABLES IN quickstart_schema;
-- テーブルの詳細を表示
DESCRIBE TABLE EXTENDED quickstart_table;
3レベルの名前空間を用いることで、いくつかの方法でテーブルにアクセスすることができます。
- 完全修飾名によるアクセス
- デフォルトカタログを選択し、スキーマ、テーブル名を用いてテーブルにアクセス
- デフォルトスキーマを選択し、テーブル名を使用
以下の3つのコマンドは機能的に等価です。
-- 3レベル名前空間を用いたテーブルへのクエリーの実行
SELECT
*
FROM
quickstart_catalog_taka.quickstart_schema.quickstart_table;
-- デフォルトカタログを選択し、スキーマ、テーブル名でテーブルへクエリーを実行
USE CATALOG quickstart_catalog_taka;
SELECT *
FROM quickstart_schema.quickstart_table;
-- デフォルトカタログとデフォルトスキーマを選択し、テーブル名でテーブルへクエリーを実行
USE CATALOG quickstart_catalog_taka;
USE quickstart_schema;
SELECT *
FROM quickstart_table;
テーブルの削除
DROP TABLE
コマンドでマネージドテーブルを削除すると、実体であるデータファイルも削除されます。
DROP TABLE
コマンドで外部テーブルを削除すると、テーブルに関するメタデータはカタログから削除されますが、実体のデータファイルは削除されません。
-- マネージドテーブルの削除(以降のコマンドを実行するには、テーブルを再作成してください)
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
-- スキーマを作成し、権限を付与します
CREATE SCHEMA quickstart_catalog_taka.lineagedemo;
GRANT USAGE, CREATE on SCHEMA quickstart_catalog_taka.lineagedemo to `account users`;
-- ソーステーブルを作成します
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");
-- ソーステーブルから派生テーブルを作成します
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でリネージュを確認します。
派生テーブルであるdinner
のLineageを確認すると、Upstreamにソーステーブルであるmenu
が表示されています。
See Lineage Graphをクリックすることで、グラフ構造を可視化することができます。
さらに行レベルのリネージュを確認します。派生テーブルのdinner
のカラムfull_menu
は、ソーステーブルの3つのカラムを結合したものでした。Schemaをクリックし、full_menu
を選択します。すると、Upstreamにはソーステーブルの3つのカラムが表示されています。
ここでも、See Lineage Graphをクリックすることで、カラムレベルのリネージュグラフを確認することができます。
このように、複数のテーブルを活用しているシーンにおいても、あるテーブルがどのテーブルから作成されたのか、あるカラムはどのように作成されたのかをきちんと追跡できるようになります。これによって、データサイエンティストやデータアナリストは安心してデータを活用できるようになります。
アクセス権の管理
データへのアクセスを管理するために、GRANT
とREVOKE
文を使用します。Unity Catalogはデフォルトでセキュリティ保護を行い、データへのアクセスは自動では許可されません。最初は、全てのユーザーがデータにアクセスすることができません。メタストアの管理者とデータのオーナーが、アカウントレベルのユーザーとグループに対してアクセス権の許可、剥奪を行うことができます。GRANTは再帰的ではありません。明示的に、カタログ、スキーマ、テーブル・ビューに対してアクセス権を許可する必要があります。
Unity Catalogにおけるアクセス権の詳細については、Unity Catalogにおけるデータのアクセス権をご覧ください。
アクセス権の許可
セキュリティ保護可能オブジェクトにプリンシパルのアクセス権を許可します。メタストア管理者とセキュリティ保護可能オブジェクトのオーナーのみがアクセス権を許可することができます。
-- スキーマの USAGE を許可
GRANT USAGE
ON SCHEMA quickstart_schema
TO `account users`;
-- プリンシパルに対してテーブルの SELECT を許可
GRANT SELECT
ON TABLE quickstart_schema.quickstart_table
TO `account users`;
アクセス権の表示
-- quickstart_tableのアクセス権の表示
SHOW GRANTS
ON TABLE quickstart_catalog_taka.quickstart_schema.quickstart_table;
-- quickstart_schemaのアクセス権の表示
SHOW GRANTS
ON SCHEMA quickstart_catalog_taka.quickstart_schema;
アクセス権の剥奪
REVOKE SELECT
ON TABLE quickstart_schema.quickstart_table
FROM `account users`;
なお、これらアクセス権の管理は、Databricks SQLのData Explorerからも操作することができます。
今回ご紹介した機能はプレビュー段階のものです。GAに向けて機能改善を行なっていく予定ですので楽しみにしていてください。