OSS Unity Catalogを動かしてみる

昨夜のData + AIサミットのキーノートも熱かったです。Unity CatalogをライブでOSSとして公開するとは。これは現地で見たかった。

![Screenshot 2024-06-14 at 1.36.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/cf9b3982-195a-f744-648f-5e7cbea104d9.png)
![Screenshot 2024-06-14 at 1.36.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/dcd30ea6-0237-1faf-e2c3-8b7253e16839.png)

Unity Catalogに関してはこちらのサイトをご覧ください。

https://www.databricks.com/jp/product/unity-catalog

GitHubリポジトリはこちらです。

https://github.com/unitycatalog/unitycatalog

こちらにも説明があります。

Unity CatalogはデータとAIのための最もオープンで相互運用性のあるカタログです。

- **マルチモーダルのインタフェースがすべてのフォーマット、エンジン、アセットをサポート**
    - マルチフォーマットのテーブルサポート - UniFormとしてのDelta LakeやApache Iceberg, Apache Parquet, CSV, etc.
    - テーブル以上のものを - 非構造化データ(ボリューム)とAI資産(MLモデル、生成AIツール)
    - プラグインのサポート - クライアント互換性のためにIceberg REST CatalogやHMSに拡張可能、加えて更なるプラグイン(新たなAIフレームワークとの連携など)
- **完全にオープン** - OpenAPI仕様、OSS実装(Apache 2.0ライセンス)
- データとAIに対する**統合ガバナンス** - REST API経由の一時的な資格情報を通じたアセットレベルのアクセスコントロール

![](https://github.com/unitycatalog/unitycatalog/raw/main/uc.png)

これまではDatabricksからしか使えませんでしたが、要件さえ満たせばどこでも無料で使えるようになったということです。

Macにインストールしてみます。JDK11+が必要なのでJDK Development Kit 17.0.11をインストールしました。

https://www.oracle.com/java/technologies/downloads/#jdk17-mac

ターミナルで作業していきます。

```sh
mkdir UC
cd UC
git clone https://github.com/unitycatalog/unitycatalog
cd unitycatalog
build/sbt package
```

コンパイルが完了したらサーバーを起動します。

```sh
bin/start-uc-server
```

起動しました！
![Screenshot 2024-06-14 at 15.25.40.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1a51dd6c-2467-bebb-ae60-73698a923e0b.jpeg)

別のターミナルを開きます。以下を実行してテーブル一覧を表示します。

```sh
cd UC/unitycatalog
bin/uc table list --catalog unity --schema default
```

表示されました。

```
┌────────────┬────────────────┬────────────────┬────────────────┬────────────────┬────────────────┬────────────────┬────────────────┬────────────────┬────────────────┬────────────────┬────────────────┐
│    NAME    │  CATALOG_NAME  │  SCHEMA_NAME   │   TABLE_TYPE   │DATA_SOURCE_FORM│    COLUMNS     │STORAGE_LOCATION│    COMMENT     │   PROPERTIES   │   CREATED_AT   │   UPDATED_AT   │    TABLE_ID    │
│            │                │                │                │       AT       │                │                │                │                │                │                │                │
├────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┤
│numbers     │unity           │default         │EXTERNAL        │DELTA           │[{"name":"as_...│file:///Users...│External table  │{"key1":"valu...│1717996383547   │1717996383547   │3fcf3ca8-e0e4...│
├────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┤
│marksheet...│unity           │default         │EXTERNAL        │DELTA           │[{"name":"id"...│file:///tmp/m...│Uniform table   │{"key1":"valu...│1717996383545   │1717996383545   │8619f354-9d3a...│
├────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┤
│marksheet   │unity           │default         │MANAGED         │DELTA           │[{"name":"id"...│file:///Users...│Managed table   │{"key1":"valu...│1717996383535   │1717996383535   │4360b7b4-b606...│
└────────────┴────────────────┴────────────────┴────────────────┴────────────────┴────────────────┴────────────────┴────────────────┴────────────────┴────────────────┴────────────────┴────────────────┘
```

テーブルのメタデータを確認します。

```sh
bin/uc table get --full_name unity.default.numbers
```

普段カタログエクスプローラで見ている詳細情報ですね。

```
┌────────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────┐
│        KEY         │                                               VALUE                                                │
├────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│NAME                │numbers                                                                                             │
├────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│CATALOG_NAME        │unity                                                                                               │
├────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│SCHEMA_NAME         │default                                                                                             │
├────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│TABLE_TYPE          │EXTERNAL                                                                                            │
├────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│DATA_SOURCE_FORMAT  │DELTA                                                                                               │
├────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│COLUMNS             │{"name":"as_int","type_text":"int","type_json":"{\"name\":\"as_int\",\"type\":\"integer\",\"nullable│
│                    │\":false,\"metadata\":{}}","type_name":"INT","type_precision":0,"type_scale":0,"type_interval_type":│
│                    │null,"position":0,"comment":"Int                    column","nullable":false,"partition_index":null}│
│                    │{"name":"as_double","type_text":"double","type_json":"{\"name\":\"as_double\",\"type\":\"double\",\"│
│                    │nullable\":false,\"metadata\":{}}","type_name":"DOUBLE","type_precision":0,"type_scale":0,"type_inte│
│                    │rval_type":null,"position":1,"comment":"Double column","nullable":false,"partition_index":null}     │
├────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│STORAGE_LOCATION    │file:///Users/yayoi/UC/unitycatalog/etc/data/external/unity/default/tables/numbers/                 │
├────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│COMMENT             │External table                                                                                      │
├────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│PROPERTIES          │{"key1":"value1","key2":"value2"}                                                                   │
├────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│CREATED_AT          │1717996383547                                                                                       │
├────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│UPDATED_AT          │1717996383547                                                                                       │
├────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│TABLE_ID            │3fcf3ca8-e0e4-4587-b28b-9cc50fc30d98                                                                │
└────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────┘
```

テーブルの中身を確認します。

```sh
bin/uc table read --full_name unity.default.numbers
```

```
┌───────────────────────────────────────┬──────────────────────────────────────┐
│as_int(integer)                        │as_double(double)                     │
├───────────────────────────────────────┼──────────────────────────────────────┤
│564                                    │188.75535598441473                    │
├───────────────────────────────────────┼──────────────────────────────────────┤
│755                                    │883.6105633023361                     │
├───────────────────────────────────────┼──────────────────────────────────────┤
│644                                    │203.4395591086936                     │
├───────────────────────────────────────┼──────────────────────────────────────┤
│75                                     │277.8802190765611                     │
├───────────────────────────────────────┼──────────────────────────────────────┤
│42                                     │403.857969425109                      │
├───────────────────────────────────────┼──────────────────────────────────────┤
│680                                    │797.6912200731077                     │
├───────────────────────────────────────┼──────────────────────────────────────┤
│821                                    │767.7998537403159                     │
├───────────────────────────────────────┼──────────────────────────────────────┤
│484                                    │344.00373976089304                    │
├───────────────────────────────────────┼──────────────────────────────────────┤
│477                                    │380.6785614543262                     │
├───────────────────────────────────────┼──────────────────────────────────────┤
│131                                    │35.44373222835895                     │
├───────────────────────────────────────┼──────────────────────────────────────┤
│294                                    │209.32243623208947                    │
├───────────────────────────────────────┼──────────────────────────────────────┤
│150                                    │329.19730274053694                    │
├───────────────────────────────────────┼──────────────────────────────────────┤
│539                                    │425.66102859000944                    │
├───────────────────────────────────────┼──────────────────────────────────────┤
│247                                    │477.742227230588                      │
├───────────────────────────────────────┼──────────────────────────────────────┤
│958                                    │509.3712727285101                     │
└───────────────────────────────────────┴──────────────────────────────────────┘
```

一通りの動作を確認できました。[チュートリアル](https://github.com/unitycatalog/unitycatalog/blob/main/docs/tutorial.md)もあるので後でやってみます。

やってみました。

https://qiita.com/taka_yayoi/items/c1d407c6ea45bbe39c02

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

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