Polaris Catalog についてザックリまとめてみる【Snowflake AI Data Cloud 勉強会 #4 レポート】

# はじめに
日本時間7月31日、Snowflake が主として開発をしている Polaris Catalog が Public Preview およびオープンソースソフトウェアとなりました。

https://www.snowflake.com/blog/polaris-catalog-open-source/?lang=ja

https://other-docs.snowflake.com/en/polaris/overview

そこで、8月の Snowflake AI Data Cloud 勉強会のテーマを「Polaris Catalog について参加者全員で学び合う会」としました。なお、こちらの勉強会は Snowflake コミュニティである SnowVillage Slack にて開催・周知しております。ぜひご参加ください！

https://usergroups.snowflake.com/snowvillage/



本記事は、Polaris Catalog がなんとなく話題になっていることは知っているけれども、具体的なことはあんまり分かっていない・・・という方にぜひご一読いただきたいです！私も勉強会を開催する中で、Polaris Catalog ちょっとだけワカル・・・！状態になりました。


# Polaris Catalog とは？
月並みですが、この絵が Polaris Catalog を表すのに最適な絵だと感じています。あらゆるエンジンから、 REST API を通じて Iceberg テーブルに**読み書き**できることがポイントになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540224/9105c8cb-0529-e638-a254-0c278bc90b76.png)
https://www.snowflake.com/ja/blog/introducing-polaris-catalog/

このことを Polaris Catalog は、Interoperability（相互運用性）と表現しています。

## Polaris Catalog と Snowflake テーブル・外部テーブル・Iceberg テーブル
Snowflake は、従来から Snowflake テーブル、外部テーブル、そして Iceberg テーブル形式をサポートしていました。これらと Polaris Catalog は何が異なるのでしょうか？

- Snowflake テーブル：Snowflake のデフォルトの列指向ストレージ形式。パフォーマンスは高いが、他のクエリエンジンからのアクセスには工夫が必要。<br><br>

- 外部テーブル：外部ステージ（S3 などのオブジェクトストレージ）からのデータを読み取るためのテーブル形式。書き込みは不可で、読み取り性能は通常のテーブルに劣る。<br><br>

- Iceberg テーブル：他のクエリエンジンからもアクセス可能なオープンソースのテーブル形式。分析クエリに強いが、エンジン間の書き込みに制限がある。<br><br>

- Polaris Catalog：複数のクエリエンジンから Iceberg テーブルへの読み書きを REST API で処理し、データ管理を容易にするカタログサービス。<br><br>

以上をまとめると、下表のような特徴になります。
| テーブル形式          | 読み取り性能                  | 書き込み可否 | 他クエリエンジンからのアクセス |
|---------------------|-----------------------------|------------|----------------------------|
| 通常のテーブル       | 高い                          | 可能          | 難しい                      |
| 外部テーブル         | 通常のテーブルより低い         | 不可        | 難しい                        |
| Iceberg テーブル     | 高い                          | 可能    | 読み込みのみ可能                        |
| Polaris Catalog     | 高い      | 可能          | 読み書き可能                        |

Polaris Catalog、最強？！👀


## Polaris Catalog の良さげな所

### 複数のクエリエンジンから読み書きが行える
先述の通り、Polaris Catalog は、Iceberg テーブルへの読み書きをさまざまなエンジンから可能にするメタデータ管理サービスです。特に注目すべきは、他のエンジンから **書き込み** もできる点です。

これは、REST API を介してデータアクセスを簡単に実現していることがポイントですが、この部分は各エンジンがうまく処理してくれているため、CREATE ICEBERG TABLE などで Iceberg テーブルを作成したあとは、通常のテーブルをクエリするように扱うことができます。

### REST API が業界標準
Polaris Catalog の REST API は比較的最近構築された業界標準に準拠しており、オープンソースで提供されているため、各エンジンベンダーとの協力が進んでおり、デファクトスタンダードとしての地位を確立しつつあります。また、外部カタログ（Glue や Tabular など）との連携も可能で、これにより既存の Iceberg テーブルを読み取り専用で接続することもできます。


### Snowflake のガバナンス機能とも統合可能（予定）
また、Polaris Catalog は、Snowflake のガバナンス機能とも統合可能で、将来的にはさらに強力なデータ管理機能が期待されています。現時点では、Horizon との統合は未サポートですが、今後のアップデートで対応が予定されており、列や行のマスキング、タグ付けといった機能も Polaris Catalog 上で利用できるようになる見込みのようです。

権限制御は RBAC を採用しており、大きくは Snowflake の RBAC と変わりありません。ただし、権限の単位は"カタログ"単位となるようです。
https://other-docs.snowflake.com/en/polaris/access-control



## Polaris Catalog の気になるポイント
### 可用性とコストについて
現時点では、Polaris Catalog の可用性について具体的な情報はまだ公開されていません。もちろん、ストレージに関してはオブジェクトストレージ保管のため可用性は高いですが、カタログ部分がどのように構築されているかは不明です。

また、コストに関しても特に公開情報はありませんでした。特に気になるのは以下のポイントでしょうか。
- Polaris Catalog のコンピューティングコスト：データロードやメタデータ管理にかかる費用
- Polaris Catalog がラップしている Iceberg テーブルのストレージコスト（SaaS版におけるストレージ利用のコスト）

Snowflake マネージドの Polaris Catalog は今のところ無料で利用できるようです。しかし、将来的にどのような料金体系になるのかは注目しておく必要がありそうです👀

### 実際にどんなデータアーキテクチャで使えるのか？
続いて、Polaris Catalog を実際にどのようなデータアーキテクチャで活用できるのか、という点です。今回の勉強会のディスカッションポイントとして、こちらを主に挙げておりました。

これまで解説してきたオープンカタログ化により、多種類のエンジンがデータを共同で操作できるようになることで、取り得るデータ分析基盤のアーキテクチャも変化すると考えられます。例えば、ETL とデータ可視化・データ分析を異なるエンジンで実行することができるようになりそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540224/40b7453a-8b6a-abc6-e8b6-b50ee4bdb77d.png)

ただし、これはあくまで一例ですので、今後も議論してより良い使い方を見つけていきたいですね。

### 検討したアーキテクチャを見たうえでのメリット・デメリット
#### メリット
1. ベンダーロックインの防止
Polaris Catalog を使用することで、特定のベンダーに依存するリスクを大幅に低減できます。複数のクエリエンジンに対応しているため、自由度が高く、環境の変化にも柔軟に対応可能です。

2. この世のすべての機能が使い放題？！
大げさかもしれませんが、Polaris Catalog を利用することで、さまざまなエンジンの機能を最大限に活用できます。異なるエンジンの強みを組み合わせて、より柔軟で幅広いデータ処理が実現できそうです。

3. データサイロが防げる！
異なるデータソースやクエリエンジンの間でデータサイロが発生するのを防ぐことができます。これにより、データの統合と管理がスムーズになり、効率的なデータ活用が可能になります。

4. Snowflake 水準のガバナンス系機能も使えそう
Polaris Catalog は、Snowflake のガバナンス機能と統合されており、RBAC（ロールベースのアクセス制御）などの高度なセキュリティ機能を利用できます。これにより、データのセキュリティとガバナンスが担保されることも強みになりそうです。

#### デメリット
1. マルチエンジンによる複雑化
複数のクエリエンジンを利用できるというメリットがある反面、その管理は複雑化します。異なるエンジン間でのパフォーマンスや互換性の調整が必要となり、運用が難しくなる可能性があります。

2. パフォーマンス？
マルチエンジン対応は魅力的ですが、その分パフォーマンスへの影響が気になってきます。各エンジンの特性や使用状況によっては、期待した性能が得られない場合も考えられます。

3. セキュリティ・ガバナンスの複雑化
複数のエンジンでデータを操作する場合、セキュリティやガバナンスの管理がより複雑になります。それぞれのエンジンで異なるポリシーが必要になる可能性があります。

4. オープンフォーマットとは言え、本当に互換性があるのか？
Iceberg はオープンフォーマットであるとはいえ、実際に複数のエンジン間で完全な互換性が保たれるかどうかはまだ分かっていません。データの一貫性や互換性については、検証が必要になりそうです。

5. 現状は、Iceberg しか使えない
Polaris Catalog がサポートするテーブル形式は、現時点では Iceberg のみです。他のフォーマットへの対応がどのように進むかは、今後の開発が気になるところです。

### 結論
上記もろもろを踏まえて、直近、各クエリエンジンから読み書きを行いたいユースケースってそこまであるのかな？という話になりました。

また、Snowflake が Iceberg テーブルなどで収益化を狙っているのも FY25~26 ということもあり、まだまだ Polaris Catalog は先進的なサービスと考えられます。

そこで、我々ユーザーとしては、一部ユースケースがはまる箇所で、まずは Iceberg テーブルを活用していき、数年後、複数のクエリエンジンから読み書きが必要となったときに、さらに洗練されている Polaris Catalog の導入を検討するのが良いのではないか？という結論に至りました。

また、Snowflake Iceberg テーブルを Polaris Catalog に外部カタログ（各クエリエンジンから読み込みのみ可能）として登録することもできます。こうしたことからも、まずはゆっくりと適用していくのが良いと考えられそうですね。

## Polaris Catalog のはじめかた
Polaris Catalog には、Snowflake マネージドの SaaS 版と、OSS 版があります。ここでは、マネージド版について軽く紹介します。

https://other-docs.snowflake.com/en/polaris/overview#signing-up

基本的には、Snowflake Organization に唯一の Polaris Catalog テナントが作成できるようです。これは、複数のアカウントに対して Polaris Catalog があっても、それは元々達成したかったデータサイロを防ぐことに反するからだと思われます。

そのため、もちろん、複数の Snowflake アカウントからその唯一の Polaris Catalog テナントへの統合を作成することができます。

UI としては次のようなものになり、Snowsight UI と非常に似たものになっていますね。（再生を始めると該当画面を確認できます。）
<iframe width="560" height="315" src="https://www.youtube.com/embed/_VISUbnPIaU?si=ubKjKEoxNIJSCG4A&amp;start=39" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

各クエリエンジンとの接続も簡単に設定できるようになっています。
<iframe width="560" height="315" src="https://www.youtube.com/embed/_VISUbnPIaU?si=NyHihGA5srciiiQw&amp;start=111" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

Iceberg は、「カタログ」（DBのようなもの）という箱の中に複数の「namespace」（多段のスキーマのようなもの）の中に格納されていますが、このように複数のカタログを管理することもできます。これらはただの箱に過ぎないため、実際のデータ（テーブル）の作成は、各クエリエンジンより行うこととなります。
<iframe width="560" height="315" src="https://www.youtube.com/embed/_VISUbnPIaU?si=vN9c9lh_gVRsVOPm&amp;start=225" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

## その他の関連サービス
また、勉強会参加者の方々より、Polaris Catalog だけでなく、関連して知っておくべき他のサービスもいくつか紹介いただきました。ここでは、Unity Catalog、Apache XTable、Apache Gravitino について簡単に紹介します。

### Unity Catalog
Unity Catalog は、Databricks が提供するデータと AI のためのカタログです。開発期間も長く、AI モデルとの統合など、かゆいところに手が届く機能も満載のようです。※Snowflake の Polaris Catalog は、この Unity Catalog を大いに意識して開発されている感がプンプンしました。

Polaris Catalog と同様、データサイロの解消やベンダーロックインの防止を目指し、オープンソース化されています。複数のデータフォーマット（Delta Lake、Apache Hudi、Apache Iceberg）や Polaris Catalog よりより多くのクエリエンジンに対応しています。

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


### Apache XTable
Apache XTable は、Delta Lake、Apache Hudi、Apache Iceberg などの異なるオープンテーブルフォーマットの間で、メタデータの相互運用性を提供します。これにより、複数のフォーマット間でのデータ操作が容易になり、柔軟なデータ管理が可能になります。

こちらは、カタログ機能というよりは、相互変換サービスとなります。

https://xtable.apache.org/


### Apache Gravitino
Apache Gravitino は、オープンテーブルフォーマットに留まらず、様々な形式・場所のデータのメタデータを統合管理するための分散型メタデータレイクです。

これにより、さまざまなエンジンを使用したデータガバナンスが実現できるようです。非常に野心的で、まだ開発段階の部分もありますが、今後の成長が期待されています。

https://gravitino.apache.org/


私はこれらのサービスをよく知らなかったのですが、これらを学ぶことで、Polaris Catalog に足りない部分や勝っている部分などを、またいくつか理解することができました。今後も、こうした他ソリューション・サービスの学習は欠かせませんね💪。


# おまけ
つい先日、Polaris Catalog は、Apache 傘下に加わったようです。どれほどの影響があるのか理解しきれていませんが、非常に注目度が高く OSS 界隈でも認められたサービスだと言えそうですね。

https://github.com/apache/polaris


# おわりに
今回の Polaris Catalog 会は、結果として、Iceberg の有識者や Databricks を併用されていて Unity Catalog にも詳しい方、その他幅広く OSS に精通した方々からご参加いただき、非常に有意義な会となりました。

もちろん、Polaris Catalog に興味があるものの全く調べられていない方々もご参加いただきました。

AI Data Cloud 勉強会は、ゆるい雰囲気で基礎的な部分から濃い部分まで質問・議論し合える勉強会となっています。

ご興味のある方は、[SnowVillage](https://usergroups.snowflake.com/snowvillage/) の #ai-datacloud チャンネルからご参加ください！

定期枠は現在のところ、第三水曜日の20時からとしています。