機能から理解するDatabricks「Unity Catalog」

# はじめに

株式会社NTTデータ [Data & Intelligence事業部](https://enterprise-aiiot.nttdata.com/) の [nttd-saitouyun](https://qiita.com/nttd-saitouyun) です。

「**Unity Catalogは理解するのが難しい**」とよく言われることが多いため、今回はDatabricksのUnity Catalogについて説明してみようと思います。

このUnity Catalogは 比較的新しい機能ではありますが、**Databricksのコア機能**であるため、理解することでよりDatabricksを使いこなすことにつながると思います。


# なぜ理解が難しいのか

Databricksの[製品紹介ページ](https://www.databricks.com/jp/product/unity-catalog)を見ると次のように書かれています。「統合」という言葉がつくと抽象度が上がって理解しにくくなりますよね・・・
>Unity Catalog は、主要なクラウド上のレイクハウスのファイル、テーブル、ML モデルなど、あらゆるデータと AI のための統合ガバナンスソリューションです。

色々な機能が「統合」されているので、一度に理解するのが難しいのが原因ではないかと思います。よって、**統合されている機能を１つ１つ理解することで、それらの機能を足し算したものをUnity Catalogとして理解する**、という考えのもと機能の解説を行っていきます。


※本書の内容は2023年2月時点のものである点、ご注意ください。

# Unity Catalog の主要機能

## Hiveメタストア機能
ざっくり言うと、**テーブル定義の保存**機能です。
Hiveという言葉が聞き慣れない方もいると思ういますので、細かく見ていきます。

### Hiveとは？
Apache Hiveは、[Apache Hadoop](https://oss.nttdata.com/hadoop/hadoop.html)のエコシステムの１つで、専門性の高いHadoopの分散処理をSQLに似た言語であるHiveQLで記述でき、**使い勝手を高めることができます**。

HadoopではHDFSという分散ファイルシステムやAmazon S3などのオブジェクトストレージにあるファイルを処理対象にしていましたが、**Hiveでは、「ディレクトリ」を「テーブル」に、「ファイル」を「データ」に対応させて、SQLのようにクエリでデータ処理ができます**。

HiveQLのCREATE TABLE文を見てみます。
```sql
CREATE TABLE student (
    id INT, 
    name STRING, 
    age INT
) 
STORED AS CSV
LOCATION '/tmp/family/';
```
この例では、`/tmp/family/`にある、`id`、`name`、`age`の３列で構成される`CSV`ファイルを`student`テーブルとして定義しています。
このテーブルに対して、SELECT文やINSERT文などのクエリを発行することでデータ操作が可能になります。

Databricksにおいてもほとんど[^1]同じ構文でテーブルを作成することができます。

[^1]: 厳密には、HiveQLとDatabricks SQLで細かな差異があります。マイグレーションする際にはご注意ください。


### Hiveメタストアとは？
上述した**テーブル定義（ファイルの構造やファイルがあるディレクトリとテーブルの対応関係）などのメタデータを保存する領域**です。
他には、テーブルを論理的にまとめるスキーマ[^2]や権限情報（どのユーザ、グループがどのテーブルに何の操作をできるのか）も保存します。

[^2]: HiveやDatabricksにおいては、スキーマとデータベースは同じものを指します。スキーマとデータベースはRDBMSによって考え方が異なるのでご注意ください。

### HiveメタストアとしてのUnity Catalog
DatabricksもHiveと同様にHiveメタストアにテーブル定義を登録することで、Databricks SQLでデータを処理することができます。その**メタデータの保存場所としてUnity Catalogが使われます**。

ただし、Unity CatalogはデフォルトのHiveメタストアでない点に注意してください。
デフォルトでは、Databricksワークスペース[^3]に１つ、Unity CatalogではないHiveメタストアが作成されます。後述するデータガバナンスの観点や新機能の観点からUnity Catalogを利用することが推奨されています。

[^3]: Databricksにおける分析環境のテナントです。チームや組織毎に払い出すイメージです。詳細は[こちら](https://qiita.com/taka_yayoi/items/78bf647c40a906d90db0)もご覧ください。

AWSだと、**AWS Glue Data Catalog**がHiveメタストアのマネージドサービスが同様の機能を担っています。


## アクセスコントロール（認可、監査）機能
上述したとおり、**Unity Catalogは、権限情報を保持しているため、認可に利用されます**。また、**認可の内容を記録することで監査に利用することができます**。ここはイメージしやすいと思います。

ただ、それだけではありません。
Unity Catalogの凄さとしては、**テーブルに対する認可（SQL Standard-based Authorization）モデルとファイルやディレクトリのパスに対する認可（Storage-Based Authorization）モデルを統合している点です**。

それでは、解説していきます。

### SQL Standard-based Authorization
どのテーブルに誰が何をできるのかの認可です。SQLのGrant/Revoke文と同様に制御ができます[^4]。以下に例を示します。
[^4]: SQLだけでなく、WebのUIからも制御ができます。

```sql
GRANT SELECT ON TABLE student TO operators;
REVOKE SELECT ON TABLE student FROM operators;
```

<br>
<br>

AWSだと、[**AWS Lake Formation**](https://aws.amazon.com/jp/lake-formation/)を活用することで同様にGrant/Revoke文によるアクセスコントロールが可能になります。


### Storage-Based Authorization
どのディレクトリに誰が Read/Writeできるのかの認可です。Amazon S3のプレフィックスへのs3:GetObjectや3:PutObject権限の付与がイメージしやすいと思います。

Unity Catalogでは、ディレクトリをEXTERNAL LOCATIONというオブジェクトとして扱うことで、認可を行うことができます。

以下の例では、`s3://hoge-school/teacher`というAmazon S3のプレフィックスを`teacher_loc`というEXTERNAL LOCATIONオブジェクト化しています。
```sql
CREATE EXTERNAL LOCATION teacher_loc URL 's3://hoge-school/teacher'
     WITH (CREDENTIAL my_aws_storage_cred)
```

認可は以下のようにGrant/Revoke文を用いて行います。権限は、`READ FILES`、`WRITE FILES`の他に`CREATE EXTERNAL TABLE`があります。
```sql
GRANT READ FILES, WRITE FILES ON EXTERNAL LOCATION `teacher_loc` TO `operators`;
```

### 認可モデルの統合
Unity Catalogは、EXTERNAL LOCATIONというオブジェクトを作ることで、Storage-Based AuthorizationをSQLで扱えるようにしています（SQL Standard-based Authorization
に寄せています）。

これは、**主にSQL Standard-based Authorizationが使われるデータウェアハウスと、主にStorage-Based Authorizationが使われるデータレイクの統合を目的とするレイクハウスを象徴する機能**だと思いますし、他の製品にない特徴的な機能だと思います。

特にオブジェクトストレージの権限管理はインフラ担当が管理していることが多く、データエンジニア、データサイエンティストが自由に制御できないケースをよくあります。
以下のような経験がある方はこの機能の恩恵を受けることができると思います！
- 厳密にアクセス制御をしているテーブルの情報を他のユーザが参照できるオブジェクトストレージにダウンロードしてしまった。
- オブジェクトストレージに新しいプレフィックスを作成するたびにインフラ担当にアクセス権限の設定を逐一依頼しなければならない。


### 監査
Unity Catalogは、認可を行う際に以下のような詳細なログを出力します。こちらを保存することで監査を行うことができます。

```json
  {
   "version":"2.0",
   "auditLevel":"ACCOUNT_LEVEL",
   "timestamp":1629775584891,
   "orgId":"3049056262456431186970",
   "shardName":"test-shard",
   "accountId":"77636e6d-ac57-484f-9302-f7922285b9a5",
   "sourceIPAddress":"10.2.91.100",
   "userAgent":"curl/7.64.1",
   "sessionId":"ephemeral-f836a03a-d360-4792-b081-baba525324312",
   "userIdentity":{
      "email":"crampton.rods@email.com",
      "subjectName":null
   },
   "serviceName":"unityCatalog",
   "actionName":"createMetastoreAssignment",
   "requestId":"ServiceMain-da7fa5878f40002",
   "requestParams":{
      "workspace_id":"30490590956351435170",
      "metastore_id":"abc123456-8398-4c25-91bb-b000b08739c7",
      "default_catalog_name":"main"
   },
   "response":{
      "statusCode":200,
      "errorMessage":null,
      "result":null
   },
   "MAX_LOG_MESSAGE_LENGTH":16384
  }
```
詳細は以下のページからご確認いただけます。

https://docs.databricks.com/data-governance/unity-catalog/audit.html


## データカタログ機能

### データカタログとは？

[DX白書2023](https://www.ipa.go.jp/files/000108047.pdf)には、以下のようにデータカタログの説明がされています。

>（a） 概要
データの値そのものではなく、そのデータの意味や構造、特性などといった、データに関する付随情報をメタデータという。そのメタデータを登録・管理し、データ利用者に公開する仕組みを、データカタログという。データ分析・活用の民主化を目指す企業が増える中、データカタログはビジネス部門も含めた企業全体のデータ活用を促進し、その品質を確保する技術として注目を集めている。
（b） 特徴
データカタログでは、大きくメタデータを登録・管理する機能と検索・参照する機能がある。
データカタログの導入により、メタデータの自動収集や一元管理といったメタデータ登録・管理負荷の軽減や、さまざまな切り口でメタデータの検索・参照が可能となる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/f24cdc25-fff9-7e2e-ddcb-98e9ca52f714.png)

**メタデータを登録・管理し、データ利用者に公開する仕組みをデータカタログというようです**。
では、メタデータとはどのようなものがあるのでしょうか？

DMBOK2ではメタデータを以下の３つに分類しています。
| メタデータ|具体例  |
|---|---|
| テクニカルメタデータ | テーブルやカラムの物理名、データの型や桁、など |
| ビジネスメタデータ | テーブルやカラムの論理名、データの意味や取りうる値の範囲、など |
| オペレーショナルメタデータ | ジョブのログ、データ量増加パターン、削除基準、など |

Hiveメタストア機能でテクニカルデータを保存していることはお分かりだと思いますが、データカタログ機能では、テクニカルメタデータだけではなく、ビジネスメタデータやオペレーショナルメタデータも対象となります。
また、Web UIなどでユーザが簡単にメタデータを検索や参照もできる必要があります。


### データカタログとしてのUnity Catalog
Databricksでも、**テクニカルメタデータだけでなく、ビジネスメタデータやオペレーショナルメタデータを付与することができ、ユーザが検索、参照する機能を提供しています**。
![unity-catalog-search-gif.gif](https://www.databricks.com/wp-content/uploads/2022/06/unity-catalog-search-gif.gif)
※動画はDatabricks公式の[Unity Catalogのページ](https://www.databricks.com/jp/product/unity-catalog)より引用。

ただし、テーブルやカラムにメタデータを付与できると言っても、現段階では、以下の例のように「Comment」欄に1024文字の文字列を記載できるだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/dfacebea-10d2-f3ab-7fcc-0ab99397fbc5.png)

[Informatica Enterprise Data Catalog](https://www.informatica.com/jp/products/data-catalog/enterprise-data-catalog.html)のようなデータカタログ専用製品と比較すると見劣りしてしまうのが現実ですが、Unity Catalogの機能開発のスピードは凄まじいので、今後の機能拡張に期待です。


### データリネージの取得
メタデータの中には、**データが、どこからきて、どのように加工されているのかを表すメタデータである「データリネージ」** があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/acbb6d71-9fd3-51f6-84c0-c9b14747f028.png)

**このデータリネージもUnity Catalogを有効化することで取得可能となります**。ノートブック、ワークフロー、およびダッシュボード上で実行したデータ処理を上の図のように可視化することができ、データの来歴やデータの変更時の影響調査を容易に実施することができます。より詳細な点は[マニュアル](https://docs.databricks.com/data-governance/unity-catalog/data-lineage.html)を参照ください。


### データメッシュの実現
**データメッシュは、Zhamak Dehghani氏が2019年に提唱したデータマネジメントの方法論です**。これまでのデータ基盤に課題を感じていた多くの先進的な企業から非常に注目を集めています。
※データメッシュについては本書で説明しきれないため、以下のサイトをご覧ください。

https://www.nttdata.com/jp/ja/data-insight/2022/1102/

<br>
<br>

データメッシュは、各ドメイン毎にデータを管理を行い、他のドメインへデータの公開を行います。他ドメインからはデータの検索ができ、データの意味や使い方を理解できるようにしなければなりません。つまり、データカタログ機能が重要な役割を持ちます。

**このUnity Catalogのデータカタログ機能を活用することで、データメッシュアーキテクチャを実現することが可能となります**。詳しくは以下のページをご覧ください。

https://www.databricks.com/blog/2022/10/10/databricks-lakehouse-and-data-mesh-part-1.html

https://www.databricks.com/blog/2022/10/19/building-data-mesh-based-databricks-lakehouse-part-2.html

AWSだと、re:Invent2022で発表された[**Amazon DataZone**](https://aws.amazon.com/jp/datazone/)が近しい機能を持つサービスになると思います。GAされたら機能比較してみようと思います。

# おわりに
本書では、Unity Catalogを主要な３つの機能[^5]に分解して説明しました。
- Hiveメタストア機能
- アクセスコントロール（認可、監査）機能
- データカタログ機能

[^5]: 本書では、わかりやすさを重視し、3つの機能に焦点を当てていますが、他にも細い機能はあります。また、本書で紹介した内容は2023年2月時点のものであり、今後の機能アップデートで変わる可能性がある点にはご注意ください。

Unity Catalogは多機能であるがゆえに取っ付きにくいですが、Databricksのコア機能であることがわかっていただけたと思います。**Unity Catalogを使いこなすことで、Databricksの真価を引き出しましょう！！**

## 補足：AWSサービスとの比較 まとめ
以下に本書で紹介したUnity Catalogの機能とそれに対応するAWSサービスを記載します[^6]。AWSサービスに知見がある方はこちらの表からイメージするとより分かりやすいと思います。

|  Unity Catalogの機能  |  AWSサービス  |
| ---- | ---- |
|  Hiveメタストア機能  |  AWS Glue Data Catalog  |
|  アクセスコントロール（認可、監査）機能  |  AWS Lake Formation  |
|  データカタログ機能  |  Amazon DataZone  |

[^6]:AWS Lake Formationには、Governed tablesというオブジェクトストレージ上のテーブルにACIDトランザクションを実現する機能があります。これは、Databricksでは、Delta Lakeというコンポーネントが対応しています。この例のように、DatabricksのコンポーネントとAWSサービスが必ずしも一対一で対応しているわけではない点にご注意ください。

# 仲間募集中！
NTTデータ [Data&Intelligence事業部](https://enterprise-aiiot.nttdata.com/) では、以下の職種を募集しています。

<details>
<summary>
1. 「クラウド技術を活用したデータ分析プラットフォームの開発・構築(ITアーキテクト/クラウドエンジニア)」の募集
</summary>
クラウド/プラットフォーム技術の知見に基づき、ITアーキテクトまたはPMとして、DWH、BI、ETL領域における、ソリューション開発の推進や、コンサルティング工程のシステムグランドデザイン策定時におけるアーキテクト観点からの検討を行う人材を募集しています。

https://nttdata.jposting.net/u/job.phtml?job_code=808

</details>

<details>
<summary>
2. AI／データ活用を実践する「クラウド・ソリューションアーキテクト」の募集
</summary>
AI／データ活用を実践する「クラウド・ソリューションアーキテクト」として、クラウド先進テクノロジーを積極活用し、お客様のビジネス価値創出活動を実践。AI／データ活用の基本構想立案コンサルティングからクラウドプラットフォーム提供・活用を支援しています。お客様のAI・データ活用を支援するクラウド・ソリューション提案、アーキテクチャ設計・構築・継続活用支援（フルマネージドサービス提供）、および最新クラウドサービスに関する調査・検証で、クラウド分析基盤ソリューションのメニュー拡充を実施する人材を募集します。

https://nttdata.jposting.net/u/job.phtml?job_code=807

</details>

<br>
<br>
また、取り扱う主なソリューションについては、以下のページも参照ください。

# ソリューション紹介
<details>
<summary>Trusted Data Foundation について</summary>
～データ資産を分析活用するための環境をオールインワンで提供するソリューション～
最新のクラウド技術を採用して弊社が独自に設計したリファレンスアーキテクチャ（Datalake+DWH+AI/BI）を顧客要件に合わせてカスタマイズして提供します。
可視化、機械学習、DeepLearningなどデータ資産を分析活用するための環境がオールインワンで用意されており、これまでとは別次元の量と質のデータを用いてアジリティ高くDX推進を実現できます。

https://enterprise-aiiot.nttdata.com/tdf/

</details>