チュートリアル：Unity Catalogメタストア管理者のDatabricks SQL向けタスク

[Tutorial: Unity Catalog metastore admin tasks for Databricks SQL \| Databricks on AWS](https://docs.databricks.com/getting-started/uc-metastore-admin-quickstart.html) [2022/10/21時点]の翻訳です。

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

このチュートリアルでは、Databricksメタストア管理者がUnity Catalogを用いてカタログ、データベース、テーブルを設定するのに必要な全てのステップをガイドします。全てのステップを完了するために[データエクスプローラのUI](https://docs.databricks.com/data/index.html)を使用します。

Unity Catalogメタストア管理者として、Unity Catalogのメタストアに関連づけられた全てのセキュリティ保護可能なオブジェクトに対してアクセス権を設定することができます。Databricksアカウント管理者は、アカウントコンソールでメタストア管理者のロールを割り当てることができます。メタストア管理者はDatabricksアカウント管理者、Databricksワークスペース管理者であることが多いですが、これらのロールのデフォルトのアクセス権は異なります。

本書では以下の内容をデモンストレーションします:

1. [データオブジェクトを発見するためにデータエクスプローラを活用](#ステップ1-データエクスプローラuiへのナビゲートおよびデータオブジェクトの参照)
1. [Unity Catalogでカタログを作成](#ステップ2-メタストアに新規カタログを作成)
1. [Unity Catalogでデータベースを作成](#ステップ3-カタログに新規スキーマを作成)
1. [Unity Catalogでテーブルを作成するためにCSVをアップロード](#ステップ4-csvからテーブルを作成)
1. [カタログ、データベース、テーブルのアクセス権の管理](#ステップ5-カタログデータベーステーブルに権限を付与)

# 要件

このデモを完了するには以下が必要となります。

- Unity Catalogが有効化されたDatabricksワークスペース
- Databricksアカウントコンソールで定義されたメタストアに対する管理者権限
- メタストアに関連づけられたワークスペースのDatabricks SQLへのアクセス権
- Unity Catalogで定義された1つ以上のユーザー、グループ

メタストア管理者の権限によって、メタストアのすべてのデータオブジェクトを操作できるようになります。メタストア管理者権限を持たない別のDatabricks SQLユーザーでこのチュートリアルを行うことで、アクセス権の変更がどのようにして、さまざまなアセットに対するさまざまなアクションに対するアクセス権を即座に更新するのかを確認することができます。

# ステップ1: データエクスプローラUIへのナビゲートおよびデータオブジェクトの参照

カタログ、データベース、テーブル、ビューを参照するためにデータエクスプローラを使用することができます。Unity Catalogでは2レベルのネストがあります: カタログはデータベースを保持し、データベースはテーブルとビューを保持します。これらに含まれているオブジェクト、データのプレビュー、アクセス権を確認するために、これらのデータオブジェクトの名前をクリックするためにデータエクスプローラを使用することができます。

1. サイドバーのペルソナスイッチャーで**SQL**ペルソナを選択します。
1. サイドバーで![](https://docs.databricks.com/_images/data-icon.png)**Data**をクリックします。
1. ワークスペースで現在定義されているカタログを確認します。`hive_metastore`と`samples`は特別なカタログであることに注意してください。
1. カタログ内のすべてのデータベースを参照するためにカタログ名をクリックします。
1. カタログの現在のオーナーと権限を確認するために**Permissions**タブをクリックします。
1. データベースのすべてのテーブルを参照するためにデータベース名をクリックします。
1. テーブルのフィールドを参照するためにテーブル名をクリックします。
1. テーブルのデータのプレビューを参照するために**Sample Data**タブをクリックします。

# ステップ2: メタストアに新規カタログを作成

カタログを追加するためにデータエクスプローラのUIを使うことができます。[CREATE CATALOG](https://docs.databricks.com/sql/language-manual/sql-ref-syntax-ddl-create-catalog.html)をご覧ください。

1. データエクスプローラの右側には、`Catalogs > catalog_name > database_name >`というパターンで現在参照しているデータオブジェクトの階層の形ですべてのアセットへのリンクが含まれています。メタストアの階層構造のトップレベルに戻るには**Catalogs**をクリックします。
1. 画面の右上にある**Create catalog**をクリックします。
1. ユニークなカタログ名を入力します。
1. オプションでコメントを入力します。
1. **Create**をクリックします。

新規に作成したカタログには2つのスキーマ(データベース)が含まれています: `default`と`information_schema`です。このシステムテーブルの詳細に関しては、[Information schema](https://docs.databricks.com/sql/language-manual/sql-ref-information-schema.html)をご覧ください。

# ステップ3: カタログに新規スキーマを作成

データベーシウを追加するためにデータエクスプローラのUIを使うことができます。SQLを使うには[CREATE SCHEMA](https://docs.databricks.com/sql/language-manual/sql-ref-syntax-ddl-create-schema.html)をご覧ください。

1. 画面の左にあるリストからカタログ名をクリックします。
1. 画面の右上の**Create database**をクリックします。
1. ユニークなデータベース名を入力します。
1. オプションでコメントを入力します。
1. **Create**をクリックします。

# ステップ4: CSVからテーブルを作成

Databricksでは、Unity CatalogのテーブルにCSVファイルをアップロードできるUIを提供しています。100メガバイト以下のCSVを利用することができます。UIを使用するにはSQLウェアハウスが稼働している必要があります。詳細に関しては[Load data using the add data UI](https://docs.databricks.com/ingestion/add-data/index.html)をご覧ください。

SQLを用いてテーブルを作成位したい場合には、[CREATE TABLE](https://docs.databricks.com/sql/language-manual/sql-ref-syntax-ddl-create-table.html)をご覧いただき、このステップはスキップしてください。

1. **Search tables**検索フィールドの左にある **+** をクリックします。展開されるメニューから**Create table via upload**を選択します。
1. インタラクティブなボックスでファイルをドロップするかブラウズするかして、お使いのコンピュータからCSVファイルを追加します。
    - ファイルのアップロードには数秒を要します。
1. ステップ2で作成したカタログを選択するために最初のドロップダウンを使用します。
1. ステップ3で作成したデータベースを選択するために2つ目のドロップダウンを使用します。
1. テーブルに対してカスタムの名称を指定することができます。
1. テーブルにヘッダー行がある場合には、**First row contains the header**がチェックされていることを確認します。そうでない場合には、チェックを外します。
1. オプションで、カラムに対してカスタム名称を指定します。
1. ファイルからのデータが適切にプレビューされていない場合には、設定を調整するために**Advanced attributes**をクリックします。
1. **Create**をクリックします。

# ステップ5: カタログ、データベース、テーブルに権限を付与

Databricks SQLのエンドユーザーが自身のタスクを完了するのに必要な最低限の権限は、期待される結果に応じて変化します。個々のユーザーやグループに対してアクセス権を割り当てることができます。別のDatabricks SQLユーザーでこのチュートリアルを行うことで、アクセス権の変更がどのようにして、さまざまなアセットに対するさまざまなアクションに対するアクセス権を即座に更新するのかを確認することができます。

# ステップ5a: カタログに`USE CATALOG`権限を付与

カタログでアクションを実行するユーザーは`USE CATALOG`権限を有している必要があります。

1. データエクスプローラに戻るためにサイドバーの![](https://docs.databricks.com/_images/data-icon.png)**Data**をクリックします。
1. ステップ2で作成したカタログの名称をクリックします。
1. カタログに付与されている権限を確認するために**Permissions**タブをクリックします。
1. **Grant**をクリックします。
1. 追加したいユーザーやグループを選択するためにドロップダウンを使用します。
1. `USE CATALOG`権限の隣のボックスをクリックします。
1. **Grant**をクリックします。

# ステップ5b: データベースに`USE SCHEMA`権限を付与

`USE SCHEMA`は、データベースを参照するユーザーが必要とする最低限の権限です。これによって、ユーザーはデータベースに含まれるテーブルやビューを操作できるようになります。クエリーやUIから新規にテーブルやビューを定義するには、ユーザーは`CREATE TABLE`権限を有している必要があります。

1. ステップ3で作成したデータベース名をクリックします。
1. データベースに付与されている権限を確認するために**Permissions**タブをクリックします。
1. **Grant**をクリックします。
1. 追加したいユーザーやグループを選択するためにドロップダウンを使用します。
1. `USE SCHEMA`権限の隣のボックスをクリックします。
1. **Grant**をクリックします。

# ステップ5c: テーブルに`SELECT`権限を付与

ユーザーは権限を有しているテーブルやビューのみを参照することができます。`SELECT`は、テーブルやビューを参照、クエリーするために必要な最低限の権限です。`MODIFY`権限を持つユーザーは、データの追加、削除、変更を行うことができ、テーブル全体を削除することができます。

1. ステップ4で作成したテーブル名をクリックします。
1. テーブルに付与されている権限を確認するために**Permissions**タブをクリックします。
1. **Grant**をクリックします。
1. 追加したいユーザーやグループを選択するためにドロップダウンを使用します。
1. `SELECT`権限の隣のボックスをクリックします。
1. **Grant**をクリックします。

# 次のステップ

プロダクションデータに対するセキュアなアクセスは、最小権限の原則に従うべきです。このチュートリアルでは、エンドユーザーがオープンにプロダクションデータにクエリーできるようにカタログ、データベース、テーブルを設定しましたが、誤ってこれらのデータを破損、削除する能力は拒否しました。多くのエンドユーザーは、大部分が読み取り専用のクエリーを行うので、アクセスできるデータの多くに対してこのような設定を行うべきです。

また、ユーザーは派生データセットをデータベースに保存する必要があることがあります。プロダクションテーブルとは別に新規データベースを作成し、これらのテーブルを分離することをお勧めします。これをテストするには、新規にデータベースを作成し、同じユーザーに対して、`CREATE TABLE`や`CREATE VIEW`権限を付与します。これでユーザーは、ステップ4で作成したテーブルに対するクエリーの結果を新規テーブルやビューとして保存できるようになります。

ユーザーグループがテーブルで一緒に作業する必要がある場合には、特定のテーブルに対して`MODIFY`権限を付与します。

個々のユーザーではなくグループに対する権限を管理することをお勧めします。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)