Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Snowflakeの開発・運用コストをApache Icebergで効率化しよう!~機能と活用...

Sagara
February 27, 2025

Snowflakeの開発・運用コストをApache Icebergで効率化しよう!~機能と活用例のご紹介~

2025/2/27に開催された「Apache Icebergと超えていくデータレイクの限界 -S3とSnowflake活用事例-」の登壇資料です
https://findy.connpass.com/event/344297/

Sagara

February 27, 2025
Tweet

More Decks by Sagara

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 2 • 2020年9⽉ ⼊社 ◦ Modern Data Stackに該当する製品の 技術⽀援‧プリセールスを担当 ◦

    新しい技術情報を定期的に収集し、 ブログで情報発信 • 部署‧役割 ◦ Modern Data Stackチーム テックリード • 名前(ニックネーム) ◦ 相樂 悟 (さがら) • 最近のトピック ◦ 2025年もData Superheroに 選出頂きました!
  2. ⽬次 3 • SnowflakeにおけるIceberg関連の機能 • Snowflake×Icebergの活⽤例 • まとめ 注記事項: 2025年2⽉時点の情報を元にお話します

    アップデートが⾮常に活発な分野のため、 最新情報は都度確認頂くことをお勧めします
  3. Snowflakeにおけるテーブルの種類 6 • 標準テーブル ◦ Read-Write ◦ データの所在:Snowflake内部 • 外部テーブル

    ◦ Read-Only ◦ データの所在:S3などの外部ストレージ • Icebergテーブル ◦ Read-Only(外部のカタログ利⽤) または Read-Write(Snowflakeのカタログ利⽤)  ◦ データの所在:S3などの外部ストレージ ◦ 注意:標準テーブルと⽐較して、⼀部使⽤できないSnowflake機能あり ▪ https://docs.snowflake.com/en/user-guide/tables-iceberg#considerations-and-limitations
  4. Icebergテーブル ※「Snowflakeのカタログ」利⽤ 8 • Snowflake内でテーブルを定義するが、データはユーザー指定のS3などに保存し、 Snowflakeがメタデータやデータの更新を担ってくれる • Read-Write(Snowflake内のクエリ限定) • データのロード‧変換 ◦

    標準テーブルと同じく、COPY INTO、 Snowpipe Streaming、Dynamic Table、 ゼロコピークローン(Preview)等をサポート • 特記事項 ◦ Snowflake Open Catalogと連携すると、 Snowflake外のクエリエンジンから Iceberg REST APIで連携し Read-Onlyのクエリが可能 引⽤元:https://docs.snowflake.com/ja/user-guide/tables-iceberg
  5. Snowflake Open Catalog 9 • Icebergのカタログである「Apache Polaris」のSaaS版 • Apache Polarisとは

    ◦ Snowflakeが2024年6⽉にPolaris Catalogを発表し、その後2024年8⽉に Apache Software Foundationへ寄贈した際にApache Polarisに名称変更 • 特徴 ◦ ロールベースのアクセス制御 ◦ Iceberg REST APIのサポート • 作成できるカタログの種類 ◦ 「内部」と「外部」の2種類 ※次⾴から詳しく説明 引⽤元:https://other-docs.snowflake.com/en/opencatalog/overview#catalog-types
  6. Snowflake Open Catalogの「内部」と「外部」の違い 10 • 内部 ◦ Open Catalogでカタログ情報を管理。Read-WriteはSpark等からAPI経由で⾏う ◦

    SnowflakeからはOpen Catalogを「外部カタログ」としてRead-Onlyでクエリ • 外部(Open Catalogでカタログ作成時に「External」のトグルを有効化) ◦ SnowflakeやGlueなど、Open Catalog外で 定義されたIcebergカタログを連携して管理 ◦ 2025年2⽉時点「Snowflakeのカタログ」のみサポート ◦ Read-Writeは定義元のSnowflakeやGlueで⾏う • 注意:「Snowflakeのカタログ」と「Open Catalogのカタログ」は別物です 「内部」と「外部」に関する参考Docs:https://other-docs.snowflake.com/en/opencatalog/overview#catalog-types Open Catalogに関する考慮事項の参考Docs:https://docs.snowflake.com/en/user-guide/tables-iceberg-open-catalog#considerations
  7. • Snowflake上で定義したIcebergテーブル をOpen CatalogにSyncし、Snowflake外 のSpark等からクエリ ◦ Snowflakeから:Read-Write ◦ 外部(Spark等)から:Read-Only Snowflake

    Open Catalogの「内部」と「外部」の使い分け 11 • Snowflake外のSpark等から Open CatalogをカタログとしたIceberg テーブルを作成し、Snowflakeからクエリ ◦ Snowflakeから:Read-Only ◦ 外部(Spark等)から:Read-Write 引⽤元:https://other-docs.snowflake.com/en/opencatalog/tutorials/open-catalog-gs 「内部」の使⽤例 「外部」の使⽤例
  8. • Snowflake上で定義したIcebergテーブル をOpen CatalogにSyncし、Snowflake外 のSpark等からクエリ ◦ Snowflakeから:Read-Write ◦ 外部(Spark等)から:Read-Only Snowflake

    Open Catalogの「内部」と「外部」の使い分け 12 • Snowflake外のSpark等から Open CatalogをカタログとしたIceberg テーブルを作成し、Snowflakeからクエリ ◦ Snowflakeから:Read-Only ◦ 外部(Spark等)から:Read-Write 引⽤元:https://other-docs.snowflake.com/en/opencatalog/tutorials/open-catalog-gs 「内部」の使⽤例 「外部」の使⽤例 基本的には、Snowflake Open Catalogを使う際は「外部」として 利⽤するケースが多いと思います
  9. Snowflake Open Catalogの「外部」の利⽤イメージ 13 1.Snowflake Open Catalogで「外部」のカタログを作成 2.Snowflakeで以下を定義   ‧Open Catalogのカタログに対するCatalog

    Integration   ‧S3などストレージへのExternal Volume 3.下記のようなクエリで、「Snowflakeのカタログ」を⽤いたIcebergテーブルを作成   ※「CATALOG_SYNC」で、定義したCatalog Integrationを指定することで、    「Snowflakeのカタログ」の情報が「Open Catalogのカタログ」にSyncされる CREATE OR REPLACE ICEBERG TABLE my_managed_iceberg_table (col1 INT) CATALOG = 'SNOWFLAKE' EXTERNAL_VOLUME = 'my_external_volume' BASE_LOCATION = 'my_managed_iceberg_table' CATALOG_SYNC = 'my_open_catalog_int';
  10. 余談:Snowflake Open Catalogに対する期待 14 • SnowflakeからIcebergテーブルを作る際に直接Open Catalogのカタログを指定し、 Snowflakeからでも、外部のSpark等からでも、Read-Writeでクエリできるように なってほしい! •

    Snowflake Open Catalogのそもそものコンセプトが 「どのクエリエンジンからでもRead-Writeできますよ」のはずなので… 引⽤元:https://docs.snowflake.com/en/user-guide/tables-iceberg-open-catalog#considerations 引⽤元:https://other-docs.snowflake.com/en/opencatalog/overview
  11. Snowflake×Iceberg活⽤のポイント 16 • データロード観点 ◦ Snowflake外のカタログをSnowflakeに連携すれば、Snowflakeへの データロードが不要で、ウェアハウスを使ってすぐにクエリ可能 (例:AWS Glue Data

    Catalogなど、Iceberg REST APIに対応したカタログ経由) • データ活⽤観点 ◦ Snowflakeで定義されたIcebergテーブルはSnowflake Open Catalogに連携すること で、Iceberg REST API経由で外部のクエリエンジンからRead-Onlyでクエリ可能 つまり… Snowflake×Icebergは、別のツールと連携してこそ真価を発揮する (次⾴から活⽤例を紹介)
  12. データロード:Amazon Data FirehoseのIceberg形式での配信機能 17 • 内容 ◦ Amazon Data FirehoseのIceberg形式で配信できる

    機能を⽤いて、そのIcebergをSnowflakeで直接 クエリする考え ◦ Snowflakeからは、Glue Data Catalogに対する CATALOG INTEGRATIONやIAMの設定を⾏うことで、 Snowflakeへのデータロード不要でクエリが可能 • 今後の期待 ◦ S3 Tablesを使⽤することで⾃動でコンパクションなど やってくれるかも…?(未検証) • 参考資料 ◦ https://zenn.dev/datum_studio/articles/ae6f45d9d17a42 ※上記画像の引⽤元 ◦ https://dev.classmethod.jp/articles/20241004-amazon-kinesis-firehose-for-iceberg/ ◦ https://docs.aws.amazon.com/ja_jp/firehose/latest/dev/apache-iceberg-destination.html
  13. データロード:FivetranのS3をDestinationとしたデータ連携 18 • 内容 ◦ Fivetranは多くのコネクタを備える、 ELに特化したSaaS製品 ◦ S3をDestination(出⼒先)とすると、 Glue

    Data Catalogをカタログとした Iceberg形式での出⼒が可能 • 今後の期待 ◦ Snowflake Open Catalogのカタログを⽤いた連携も開発することは発表済 • 参考資料 ◦ https://www.fivetran.com/blog/fivetran-supports-amazon-s3-as-a-destination-with-open-table-formats ※上記画像の引⽤元 ◦ https://dev.classmethod.jp/articles/fivetran-s3-datalake-icebergtable-select-from-snowflake/
  14. データロード:BigQueryで出⼒したIcebergをSnowflakeでクエリ 19 • 内容 ◦ BigQueryに出⼒したGA4やFirebaseのデータを Snowflakeでもクエリしたいというケースに対し、 パイプラインをIcebergにより効率化した事例 ◦ GCS上のメタデータファイルを直接指定する⽅法の

    ため、テーブルが参照するメタデータファイルを 更新するプロシージャも定義している • 今後の期待 ◦ BigQuery metastoreが2025年1⽉にプレビュー。BigQuery metastoreをカタログとして BigQueryからIcebergテーブルの作成‧更新ができるようになることに期待 • 参考資料 ◦ https://dev.classmethod.jp/articles/bigquery-tables-for-apache-iceberg-to-snowflake-iceberg-table/ ◦ https://medium.com/snowflake/eliminating-redundancies-in-etl-with-iceberg-tables-on-snowflake-cff678d49bd3 ※上記画像の引⽤元
  15. データ活⽤:DatabricksからSnowflakeのIcebergテーブルを参照 20 • 内容 ◦ Snowflake Open Catalogの「外部」のカタログへ IcebergテーブルをSyncさせる設定を⾏いつつ、 Snowflake上でIcebergテーブルを作り、

    下記のようにDatabricksのSpark configで設定し、クエリする • 参考資料 ◦ https://medium.com/snowflake/how-to-integrate-databricks-with-snowflake-managed-iceberg-tables-7a8895c2c724 spark.sql.catalog.polaris.uri https://<account>.<region>.snowflakecomputing.com/polaris/api/catalog spark.sql.catalog.polaris org.apache.iceberg.spark.SparkCatalog spark.sql.catalog.polaris.credential <CLIENT_ID:SECRET from Polaris Connection> spark.sql.extensions org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions spark.sql.catalog.polaris.type rest spark.sql.catalog.polaris.scope PRINCIPAL_ROLE:ALL spark.sql.defaultCatalog polaris spark.sql.catalog.polaris.warehouse <polaris_catalog_name> spark.sql.catalog.polaris.header.X-Iceberg-Access-Delegation true
  16. データ活⽤:BigQueryからSnowflakeのIcebergテーブルを参照 21 • 内容 ◦ SnowflakeでGCSをExternal Volumeとして定義した Icebergテーブルを作成し、⽣成されたメタデータを指定して BigQueryから「format =

    "ICEBERG"」のExternal Tableを作成してクエリする • 今後の期待 ◦ 「Snowflake側でBigQuery metastoreをカタログとしてRead-Writeを⾏えるIcebergテー ブルの定義」か「BigQuery側でSnowflake Open CatalogをカタログとしたIcebergテーブ ルの定義」このいずれかができるようになると、より運⽤が楽になる • 参考資料 ◦ https://github.com/GoogleCloudPlatform/data-analytics-golden-demo/blob/main/snowflake-bigquery-iceberg.sql
  17. データ活⽤:DuckDBからSnowflakeのIcebergテーブルを参照 22 • 内容 ◦ SnowflakeのIcebergテーブルで保持された データはS3にあるため、それをDuckDBからクエリ ◦ 活⽤例として、TableauからDuckDBを介した参照など、 断続的にSnowflakeのウェアハウスが起動して

    コストがかかるケースのコスト削減が考えられる • 今後の期待 ◦ DuckDBからIceberg REST APIに対応するカタログを 直接参照できると、最新のメタデータを元にクエリ可能 (Pull Requestはマージされてそう?) • 参考資料 ◦ https://qiita.com/abe_masanori/items/19701469e0ae4390109f ◦ https://zenn.dev/cavernaria/articles/6a6fdc85cb53ad ※上記画像の引⽤元 ◦ https://github.com/duckdb/duckdb-iceberg/pull/98 select * from iceberg_scan('s3://customers/meta data/xxxxxx.metadata.json');
  18. Snowflake×Icebergにより得られるメリット 24 • 開発‧運⽤コストの削減 ◦ 従来複数のDB‧DWH間でのデータ連携は⼀度ストレージにアンロードした 上でロードすることが⼀般的だったが、Icebergを介することでパイプラインを 簡素化でき、開発‧運⽤コストを削減できる • DWHの利⽤コストの削減

    ◦ IcebergではDuckDBなど安価なクエリエンジンを使⽤できるため、 クラウドDWHのコンピュートコストを削減できる ◦ 各DWH‧ストレージ、それぞれで重複データを管理することが不要となり、 Icebergで保持したデータをSSoTとすることができる
  19. 最後に 25 • 「Icebergを導⼊したい!」と考えた時の注意点 ◦ 各社、絶賛開発中の領域です(プレビュー機能や新機能が圧倒的に多い) ◦ 当たり前ではあるのですが、常に最新情報を確認し、 本番相当のワークロードで検証した上で、導⼊することをオススメします •

    今後のIceberg界隈への勝⼿な期待 ◦ 現状、Apache Polaris‧Unity Catalogを始めとしたOSSでのカタログ開発‧提供、 Icebergの基幹となるS3でのS3 Tablesの発表など、Icebergを軸とした基盤を 開発するための機能開発が進んできている ◦ ⼀⽅で、現状はメタデータファイルを指定する⽅法でしかクエリできない場合も多い ◦ 今後、あるカタログを指定したらどの製品からでもRead-Writeでき、 ⾃動でコンパクションなどのテーブル最適化処理も⾏ってくれるような、 未来を期待しています!!