こんにちは。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派生プラットフォームとなっています。
こちらは、まだ実物を触っていないので、今後使用感をブログに起こしてみようと思います。
おわりに
truestarでは、Snowflake導入検討、導入支援や環境構築まで幅広くサポート可能です。
Snowflakeに゙興味がある、導入済みだけどもっとうまく活用したい等々ありましたら、ぜひこちらから相談ください!
また、truestarではSnowflake Marketplaceにて、加工済みオープンデータを無償提供するPrepper Open Data Bank、全国の飲食店の情報を集めたデータセットの販売を行っております。(サービスリンク)
これまでのSnowflakeに関する記事はこちら