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

【Apache Iceberg実践 ! ベストプラクティス】BigQueryのデータを低コスト...

【Apache Iceberg実践 ! ベストプラクティス】BigQueryのデータを低コストでSnowflakeから読めるようにするためにIcebergを使う / Using Iceberg for Cost-Effective BigQuery Data Access from Snowflake

Avatar for Civitaspo

Civitaspo

June 10, 2026

More Decks by Civitaspo

Other Decks in Technology

Transcript

  1. © LayerX Inc. 3 バクラク事業部 BizOps部 データグループ マネージャー 兼 Platform

    Engineering部 SRE Snowflake Data Superhero 2026 Snowflake九州ユーザー会 主宰 Links 𝕏 civitaspo civitaspo.com civitaspo その他 画像を⼊れてね civitaspo (キビタスポ/ きびちゃん) ⾃⼰紹介
  2. © LayerX Inc. 8 バクラクのAI Agent機能 バクラク債権管理、「⼊⾦消込エージェント」を提供開始。⽇々のログイン不 要で⼊⾦確認から消込まで⾃動化 差し戻しゼロへ。バクラク、AIエージェント「AI申請レビュー」をリリース。 AIが⾃社の規程‧ルールに基づき経費精算申請を即時レビュー

    LayerX、「バクラクAIエージェント」の新機能として「領収書分割エージェン ト」を提供開始 AIエージェント「AI明細仕訳」 をリリース。明細OCR×⽣成AIで、明細⾏が多 い‧毎回取引内容が変わる請求書の処理を⾃動化。 - バクラク バクラク経費精算、AIが申請不備を検知‧指摘する「AI申請レビュー」全ユー ザーへの提供開始 〜9割の企業が抱える「⼿戻り」を解消。設定機能アップ デートにより、⾃社規定のAI実装が容易に LayerX、「バクラクAIエージェント」の新機能として「AI勤怠初期設定」を提 供開始 AIが就業規則を読み解き、複雑な有給休暇の付与ルールを⾃動提案
  3. 12 © LayerX Inc. BigQueryのデータを "可能な限り安く" Snowflake で読みたい!! Google Analytics

    や Google Ads など BigQuery との連携が強いサービスが存在する。 これらのデータを “可能な限り安く” Snowflake で読めるようにしたい。 今⽇のトピック 夢の技術!
  4. © LayerX Inc. 14 • 今⽇のトピックは「データ転送の⼿段としてIcebergテーブルを利⽤した」話です。 • Iceberg spec の詳細など

    Iceberg という技術そのものへの深掘りは控えめとなっています。 • また、時間の都合上、細かな制約に対するアプローチは記載していません。懇親会でお話できれば と思っています!!! • ぜひお話しましょう!!! おことわり 今⽇のトピック
  5. ⽬次 Agenda • ✅ ⾃⼰紹介 / 会社紹介 • ✅ 今⽇のトピック

    • "可能な限り安く" #とは • Snowflake から BigQuery を Read する選択肢 • BigQuery Extract Job で出⼒した Parquet を Snowflake-managed Iceberg Table へ格納する • ハマりどころ • まとめ
  6. © LayerX Inc. 19 1. Snowflake UDTF / Procedure から

    BigQuery へ直接クエリ 2. Snowflake Openflow 3. BigQuery-managed Iceberg Table を Snowflake から参照する 4. BigQuery Extract Job で出⼒した Parquet を Snowflake-managed Iceberg Table へ格納 SnowflakeからBigQueryをReadする選択肢 SnowflakeからBigQueryをReadする選択肢
  7. © LayerX Inc. 20 • Snowflake は Python や JavaScript

    で UDTF/Procedure を書ける • そのため、直接 BigQuery の API を call してデータを取得することが可能 • 構成的には⼀番シンプルになる • ⼀⽅、クエリするたびに BigQuery 側にコストがかかる上、データ転送コストもかかる • また、データ量によっては UDTF/Procedure が OOM を起こすこともあり、⽤途が限定的 Snowflake UDTF / Procedure から BigQuery へ直接クエリ SnowflakeからBigQueryをReadする選択肢
  8. © LayerX Inc. 21 • Snowflake が提供する Apache Nifi のマネージドサービス

    • BigQuery から incremental sync するコネクタが提供されている • すでに Openflow を運⽤しているなら良い選択肢だが、BigQuery からのデータ取得のためだけに構 築‧運⽤するのは過剰 Snowflake Openflow SnowflakeからBigQueryをReadする選択肢 ref. About the Openflow Connector for Google BigQuery | Snowflake Documentation ref. Snowflake Openflow Unlocks Full Data Interoperability, Accelerating Data Movement for AI Innovation
  9. © LayerX Inc. 22 • 6/2 に Snowflake の BigLake

    Metastore に対するカタログ統合がGA になった • Iceberg らしい interoperability のある構成になる • ⼀⽅、既存 BigQuery Native Table を対象とする場合、Iceberg Tableへ変換し続ける必要がある ◦ BigQuery 側でデータパイプラインを組む必要がある • また、BigQuery の Iceberg テーブルには多くの制約があり、データ 操作時にメンタルモデルを変えてオペレーションする必要がある BigQuery-managed Iceberg Table を Snowflake から参照する SnowflakeからBigQueryをReadする選択肢 ref. https://docs.cloud.google.com/bigquery/docs/biglake-iceberg-tables-in-bigquery#limitations
  10. © LayerX Inc. 24 最終的に、BigQuery Extract Jobで出⼒したParquetを Snowflake-managed Iceberg Tableへ格納する⽅針を採⽤した

    BigQuery Extract Job で出⼒した Parquet を Snowflake-managed Iceberg Table へ格納する BigQuery Extract Jobで GCSへParquetファイルを格納 COPY LOAD_MODE = ADD_FILES_COPY 構⽂で ParquetファイルをIcebergのデータファイルとして コピーして登録
  11. © LayerX Inc. 25 • BigQuery の Extract Job は

    BigQuery Table のデータを Parquet 含む様々なフォーマット‧圧縮形式でGCSへ出⼒ できる • 出⼒上限も⾮常に⼤きい ◦ プロジェクトあたり1⽇50TiBまで無料 ◦ Job数上限もプロジェクトあたり1⽇100,000 • Partition 単位の出⼒もサポートしており、⽇々の増分更 新にも使える BigQuery Extract Job で GCS へ Parquet ファイルを置く BigQuery Extract Job で出⼒した Parquet を Snowflake-managed Iceberg Table へ格納する ref. https://docs.cloud.google.com/bigquery/quotas#export_jobs
  12. © LayerX Inc. 26 • Snowflakeのmanaged iceberg tableには、データをロー ドする⽅式に LOAD_MODE

    = ADD_FILES_COPY が存在 • 外部に存在する Paquet ファイルをコピーして、そのまま Iceberg テーブルのデータファイルとして登録する • Parquet ファイルを Snowflake 側で extract せずにコ ピーするだけなので、ロードコストが⼤幅に抑えること ができる GCS上のParquetファイルをSnowflake-managed Iceberg Table のデータファイルとしてコピーして登録 BigQuery Extract Job で出⼒した Parquet を Snowflake-managed Iceberg Table へ格納する ref. Snowflake-managed Iceberg table の COPY LOAD_MODE = ADD_FILES_COPY の仕様をドキュメントと実測から理解する - LayerX エンジニアブログ
  13. © LayerX Inc. 28 • Snowflakeのmanaged iceberg tableには、 CLUSTER BYというクラスタリングキーを指

    定する機能がある • が、ADD_FILES_COPY は外部に存在する Paquet ファイルをコピーして、そのまま Iceberg テーブルのデータファイルとして登 録するのみなので、CLUSTER BY を考慮し ない • そのため、Parquet ファイル作成時点で、パ フォーマンスを考慮してデータ配置を考える 必要がある • BigQueryからの転送では、BigQueryの Partition単位でファイルを分割すれば良い CLUSTER BY を指定してもファイル配置は変わらない ハマりどころ ref. Snowflake-managed Iceberg table の COPY LOAD_MODE = ADD_FILES_COPY の仕様をドキュメントと実測から理解する - LayerX エンジニアブログ 実測: scan bytes は CLUSTER BY ではなくソース配置で変わる WHERE "dt" = DATE '2026-01-05' 27.6 MB なし 27.6 MB あり 2.8 MB なし 2.8 MB あり 日付混在ファイル 日付分割ファイル CLUSTER BY な し CLUSTER BY あ り
  14. © LayerX Inc. 29 • ADD_FILES_COPY は struct / list

    / map を VARIANT に変換しない。コピー先は互換な構造化デー タ型で定義する • BigQuery Extract Job は JSON 型を Parquet に変換できない ネスト型は VARIANT 型のカラムへ格納できない ハマりどころ ref. Snowflake-managed Iceberg table の COPY LOAD_MODE = ADD_FILES_COPY の仕様をドキュメントと実測から理解する - LayerX エンジニアブログ ロード対象 Parquet schema struct(a string, b number) list<struct(a, b)> map<string, number> Iceberg / Parquet のネスト型 互換なコピー先 OBJECT(a varchar, b number) ARRAY(OBJECT(a varchar, b number)) MAP(varchar, number) 成功 field 名・型・順序が互換であることが前提 汎用 VARIANT へ投入 VARIANT 失敗 Parquet 側も Iceberg v3 VARIANT 形式である場 合だけ別
  15. © LayerX Inc. 30 • ADD_FILES_COPY はロード時点のテーブル定義で data file を登録する。後から⾜した

    field は復 元されない • COPY の前に schema 差分を⾒つけ、許容できる差分だけ先に ALTER する Schema Evolution は COPY 前に⾏う必要がある ハマりどころ ref. Snowflake-managed Iceberg table の COPY LOAD_MODE = ADD_FILES_COPY の仕様をドキュメントと実測から理解する - LayerX エンジニアブログ OK NG 差分検出 Parquet に c がある ALTER OBJECT(a,b,c) へ拡張 COPY ADD_FILES_COPY 実行 参照可能 c の値を読める COPY OBJECT(a,b) のまま実行 ALTER 後から c を追加 参照不可 ロード済み行の c は NULL 復元不能 data file から補完されな い 実装ルール COPY 前に schema compatibility gate を置く。許容差分は ALTER ICEBERG TABLE で先に反映し、許容 できない差分は COPY 前に止める。
  16. © LayerX Inc. 32 • civitaspo/dbt-snowflake-iceberg-sync • dbt の package

    として提供しているので、Snowflake × dbt で BigQuery のデータを取得したい⼈ は使ってみてね!! 他にも多々ハマりどころがあったのでOSSにしました まとめ