【Databricks】Unity Catalogのタグを整理してみた

# 背景・目的
[AWS リソースタグについて整理してみた](https://qiita.com/zumax/items/6fcecf3b6d996e4fbc0f)に引き続き、Databricksでタグをどのように活用できるかについても整理してみます。

# まとめ
下記の特徴があります。

|特徴 |説明|
|:--|:--|
|概要|Unity Catalogのセキュリティ保護可能なオブジェクトに適用できる|
|管理できること|検索と検出が可能|
|対象|・カタログ<BR>・スキーマ<BR>・テーブル<BR>・ビュー|
|必要な権限|・Apply tag<BR>・Use schema<BR>・Use catalog|
|制約|・1 つのセキュリティ保護可能なオブジェクトに最大 20 個のタグを割り当て可能<BR>・タグの最大長は255文字<BR>・タグ名に特殊文字は使用できない<BR>・タグ名、値によるUnity Catalogテーブルの検索は完全一致のみ|
|検索性| 検索ウインドウで探すことが可能。Information Schemaを使用してSQLで検索が可能 |

# 概要
Databricksのドキュメント[タグの適用](https://docs.databricks.com/ja/data-governance/unity-catalog/tags.html)をもとに整理します。

> タグは、Unity Catalog のさまざまなセキュリティ保護可能なオブジェクトに適用できるキーとオプションの値を含む属性です。 タグ付けは、メタストア内のさまざまなセキュリティ保護可能なオブジェクトを整理および分類する場合に便利です。 タグを使用すると、データ資産の検索と検出も簡単になります。

- Unity Catalogのセキュリティ保護可能なオブジェクトに適用できる
- 検索と検出が可能

## サポートされているセキュリティ保護可能なオブジェクト
> セキュリティ保護可能なオブジェクトのタグ付けは、現在、カタログ、スキーマ、テーブル、ビュー、および登録済みモデルでサポートされています。 セキュリティ保護可能なオブジェクトの詳細については、「 Unity Catalog のセキュリティ保護可能なオブジェクト」を参照してください。

- 下記でサポートされている
    - カタログ
    - スキーマ
    - テーブル
    - ビュー

## 要件
> Unity Catalog のセキュリティ保護可能なオブジェクトにタグを追加するには、オブジェクトに対する APPLY TAG 特権、オブジェクトの親スキーマに対する USE SCHEMA 特権、およびオブジェクトの親カタログに対する USE CATALOG 特権が必要です。
- 下記の権限が必要
    - Apply tag
    - Use schema
    - Use catalog

## 制約
- 1 つのセキュリティ保護可能なオブジェクトに最大 20 個のタグを割り当て可能
- タグの最大長は255文字
- タグ名に特殊文字は使用できない
- タグ名、値によるUnity Catalogテーブルの検索は完全一致のみ

# 実践
## カタログエクスプローラーでのタグの管理
1. Workspaceにサインインします。
1. ナビゲーションペインで「Catalog」をクリックします。

### テーブル
1. 対象のオブジェクトを選択します。ここでは、customersテーブルを選択しています。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a5bfce08-28d3-d03b-f1a0-a938699f3cba.png" width=200 />

1. Add tagsをクリックします。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/64e74807-1846-6951-be05-bdd3e17b7ac5.png" width=300 />

1. ポップアップが表示されるので、keyとvalueを追加します。なお、Keyには大文字は利用できないようです。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/8125f96e-e75b-7110-6dd3-8b7e7beeb75f.png" width=400 />

1. 複数タグを追加し、「Save tags」をクリックします。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/0a3e781b-af7d-bfc7-9396-f045cd0ae8ae.png" width=400 />

1. テーブルにタグが追加されました。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/eb5974bf-a3aa-1e4c-bba3-8c3e045fb61f.png)

### カラム
テーブルのカラムにもタグを付与できます。

1. 各カラムの右にTagsがありますので「＋」ボタンをクリックし、それぞれ付与していきます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/26341569-c64d-cc9e-5791-dacb61edba69.png)

1. 下記のように追加しました。 
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/03cce747-ab0a-4c92-7d78-447fa8b360d5.png)

### スキーマ
スキーマにもタグを付けます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/0ec9a99d-af9e-3764-f14b-c683dc6baf6e.png" width=400 />

### カタログ
カタログにもタグを付けます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/8a5100e1-0877-4260-5787-a2f4dcdeffb2.png" width=400 />

## タグを使用してテーブルを検索およびフィルタリングする
1. 検索ウィンドウにタグのValueに設定した「PII」を入力します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/d17a333a-abad-c780-9fc0-29d2c9c7aa43.png)

1. customersテーブルが検索結果に表示されました。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/3f1dfd44-f7b2-672b-9393-15ce9e3bf1f8.png)

## 情報スキーマテーブルを使用したタグ情報の取得
Unity Catalogで作成された各カタログでは、information_schemaが含まれている。
下記のテーブルが利用できます。
- CATALOG_TAGS
- COLUMN_TAGS
- SCHEMA_TAGS
- TABLE_TAGS

### CATALOG_TAGS
1. 下記のクエリを実行します。
    ```
    SELECT catalog_name, tag_name, tag_value
    FROM system.information_schema.catalog_tags
    ```
1. 確認できました。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/0316dcde-9f2b-9238-74c9-cb7b84e2b3b7.png" width=400 />

### COLUMN_TAGS
1. 下記のクエリを実行します。
    ```
    SELECT catalog_name, tag_name, tag_value
    FROM system.information_schema.COLUMN_TAGS
    ```

1. 確認できました。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/d779d9ca-d699-3cbd-7f97-6fda98a9e938.png" width=400 />

### SCHEMA_TAGS
1. 下記のクエリを実行します。
    ```
    SELECT catalog_name, tag_name, tag_value
    FROM system.information_schema.SCHEMA_TAGS
    ```

1. 確認できました。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b623a104-1b10-5ee8-046a-98dc217f40e3.png" width=400/>


### TABLE_TAGS
1. 下記のクエリを実行します。
    ```
    SELECT catalog_name, tag_name, tag_value
    FROM system.information_schema.TABLE_TAGS
    ```
1. 確認できました。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/4571a565-852e-b385-453a-ff1108e352cf.png" width=400 />

# 考察
DatabricksのUnity Catalogのタグ機能を利用し、タグ付けと検索を試してみました。これにより、情報の管理が容易になり、より統制が効果的になると感じました。今後も積極的に活用していきたいと考えています。


# 参考
https://docs.databricks.com/ja/data-governance/unity-catalog/tags.html

https://qiita.com/zumax/items/6fcecf3b6d996e4fbc0f