【Snowflake】 様々なデータレイクと連携できる!Iceberg TableとPolaris Catalogについて解説

【Snowflake】 様々なデータレイクと連携できる!Iceberg TableとPolaris Catalogについて解説 | Tableau-id Press -タブロイド-
snowflake-logo-1200x630-960x504-1

こんにちは。ozawaです。

SnowflakeでIceberg Tableという機能があります。

また今夏、Iceberg Tableの機能を手軽に使用できるPolaris Catalogというプラットフォームが登場し、パブリックプレビューで使えるようになっているようです。

Polaris Catalogを使用する事前知識もかねて、Iceberg Tableとは何か?という観点で今後Iceberg Tableについて何個かブログを書いていこうと思っている次第です。

今回は、Iceberg Tableがどういった機能なのか?Iceberg Tableがどんな構造なのか?を整理してみます。

Iceberg Tableの概要

まず、Iceberg Tableは、Apache Icebergという規格を用いているSnowflake上のテーブルオブジェクトの名称です。

Apache Icebergという規格ですが、ざっくりと利点を言うと、AWSやazureといった他のプラットフォームでも使うことができるため、複数のプラットフォームで相互にデータを活用することができます

 

またこちらのブログによると、Iceberg Tableは、以下の機能をサポートしています。

ACID(原子性、一貫性、分離性、耐久性)トランザクション:データの整合性や信頼性を保証

スキーマの進化:カラムの修正や追加、削除が容易に可能(ここでのスキーマは「カラム構成」という意味なので注意)

隠しパーティション:Snowflakeでいうクラスタリングが可能

テーブルスナップショット:Snowflakeでいうタイムトラベルが可能

これら4点の機能はSnwoflake上の標準テーブル搭載の機能であるため、Iceberg Tableを使えばSnowflakeテーブルを実質的に他プラットフォームでも気軽に使用できる!といったことになります。

Iceberg Tableの構造と機能

ここではIceberg Tableのテーブルの構造がどうなっているのか?そしてIceberg Tableの4点の機能をどのレイヤーで実現しているかを深ぼってみます。

Iceberg Tableの全体像が以下の通りになり、5つのレイヤーからIceberg Tableが作られています。

Iceberg Catalog:Iceberg Tableを収納する箱のようなレイヤー

Metadata File:テーブルのバージョンやスキーマを司るレイヤー(ここでのスキーマは「カラム構成」という意味なので注意)

Manifest List:各パーティションのメタデータ情報をまとめたレイヤー

Manifest File:クラスタリングによる各パーティションのメタデータ情報を格納するレイヤー

Data Files:データ格納レイヤー

参照:Internals of Apache Iceberg

Iceberg Catalog

Iceberg Tableを収納するDB.SCHEMAのようなものだと思ってくれれば分かりやすいと思います。

各テーブルがどのMetadata Fileを使用しているのか?という情報を持つレイヤーです。

Metadata File

Iceberg Tableのバージョンやスキーマ(カラム構成)を司るレイヤーです。メタデータが複数ある場合、テーブルのバージョン0・バージョン1・バージョン2・バージョン3… というようにテーブルのバージョンが作成されているイメージです。

図でいうと、Metadata FileのS0には、バージョン0のテーブル状態が紐づいていて、S1にバージョン1のテーブル状態が入っているような状態です。

Metadata Fileの複数テーブル状態の保持により、テーブルスナップショット(Snowflakeでいうタイムトラベル)やスキーマの進化(カラムの修正や追加、削除が容易に可能)という機能が実現できます。

Manifest List ・ Manifest File

Metadata Fileは、各パーティションのメタデータ情報を持ちます。また、テーブルのバージョンによっては複数のパーティションを持ちうるので、Metadata ListとしてManifest Fileを1つ以上管理します。

例を絡めて、Manifest Fileを深ぼっていきます。

① CREATE TABLEして ② INSERT する場合、①の時点で1つ目のManifest Fileが作成され、②で挿入行のManifest Fileが作成されます。

このとき、②INSERTの後は2つのManifest Fileが作成されます。また、①CREATEの時点と②INSERTの時点のバージョンが2つ作成されます。

また、Iceberg TableはSnowflakeのテーブルの一種であるため、Snowflakeで保障されているACIDトランザクションも保証されます。

Data Files

パーティション(Manifest File)ごとのデータを格納するレイヤーとなります。

Manifest List/FileとData Filesによって、隠しパーティション(Snowflakeでいうクラスタリング)が実現できます。

【ちなみに】Polaris Catalogとは?

Apache Iceberg規格のIceberg Tableを他のデータレイクに共有するためのGUIサービスだと思ってください。

Snowflakeの他に、AWSやGCP環境でも、Polaris Catalogという概念が存在しますが、今回Snowflake製のPolaris Icebergも公開されたよ~ということになります。

Polaris Catalog用のSnowflakeサイトが用意されてます。Snowflake Data Clean Roomと同様のSnowflake派生プラットフォームとなっています。

Polaris Catalogがオープンソースに

こちらは、まだ実物を触っていないので、今後使用感をブログに起こしてみようと思います。

おわりに

truestarでは、Snowflake導入検討、導入支援や環境構築まで幅広くサポート可能です。

Snowflakeに゙興味がある、導入済みだけどもっとうまく活用したい等々ありましたら、ぜひこちらから相談ください!

また、truestarではSnowflake Marketplaceにて、加工済みオープンデータを無償提供するPrepper Open Data Bank、全国の飲食店の情報を集めたデータセットの販売を行っております。(サービスリンク

これまでのSnowflakeに関する記事はこちら