Slide 1

Slide 1 text

© LayerX Inc. BigQueryのデータを低コストで Snowflakeから読むためにIcebergを使う 2026/06/11 Apache Iceberg実践 ! ベストプラクティス @civitaspo

Slide 2

Slide 2 text

⾃⼰紹介

Slide 3

Slide 3 text

© LayerX Inc. 3 バクラク事業部 BizOps部 データグループ マネージャー 兼 Platform Engineering部 SRE Snowflake Data Superhero 2026 Snowflake九州ユーザー会 主宰 Links 𝕏 civitaspo civitaspo.com civitaspo その他 画像を⼊れてね civitaspo (キビタスポ/ きびちゃん) ⾃⼰紹介

Slide 4

Slide 4 text

会社紹介

Slide 5

Slide 5 text

© LayerX Inc. 5 会社紹介 出典: シリーズBで150億円を調達。エンジニアの採⽤を強化し、AIエージェント事業をさらに加速 / ニュース / 株式会社LayerX

Slide 6

Slide 6 text

© LayerX Inc. 6 会社紹介 資産運⽤サービス ALTERNA(オルタナ) エンタープライズ向け AIプラットフォーム バックオフィス向け AIエージェントサービス Fintech事業 Ai Workforce事業 バクラク事業

Slide 7

Slide 7 text

7 「バクラク」の事業領域 Coming Soon AIエージェント HCM領域 (人的資本管理) 稟議・ワークフロー 領域 BSM / ARM領域 (債務・債権管理) Payment 領域

Slide 8

Slide 8 text

© LayerX Inc. 8 バクラクのAI Agent機能 バクラク債権管理、「⼊⾦消込エージェント」を提供開始。⽇々のログイン不 要で⼊⾦確認から消込まで⾃動化 差し戻しゼロへ。バクラク、AIエージェント「AI申請レビュー」をリリース。 AIが⾃社の規程‧ルールに基づき経費精算申請を即時レビュー LayerX、「バクラクAIエージェント」の新機能として「領収書分割エージェン ト」を提供開始 AIエージェント「AI明細仕訳」 をリリース。明細OCR×⽣成AIで、明細⾏が多 い‧毎回取引内容が変わる請求書の処理を⾃動化。 - バクラク バクラク経費精算、AIが申請不備を検知‧指摘する「AI申請レビュー」全ユー ザーへの提供開始 〜9割の企業が抱える「⼿戻り」を解消。設定機能アップ デートにより、⾃社規定のAI実装が容易に LayerX、「バクラクAIエージェント」の新機能として「AI勤怠初期設定」を提 供開始 AIが就業規則を読み解き、複雑な有給休暇の付与ルールを⾃動提案

Slide 9

Slide 9 text

© LayerX Inc. 9 バクラクのAI Agent機能 バクラク、蓄積された⽀出データをAIが分析‧可視化する「バクラクインテリジェンス」を提供開始。作業不要で、グラフから証憑をワンクリックで確認

Slide 10

Slide 10 text

© LayerX Inc. 10 バクラクのAI Agent機能 バクラクビジネスカード、AIサービスの利⽤状況とコストを可視化する「AIトークンアドバイザー」を提供開始

Slide 11

Slide 11 text

今⽇のトピック

Slide 12

Slide 12 text

12 © LayerX Inc. BigQueryのデータを "可能な限り安く" Snowflake で読みたい!! Google Analytics や Google Ads など BigQuery との連携が強いサービスが存在する。 これらのデータを “可能な限り安く” Snowflake で読めるようにしたい。 今⽇のトピック 夢の技術!

Slide 13

Slide 13 text

© LayerX Inc. 13 今⽇のトピック Snowflake導⼊から1年、LayerXのデータ活⽤の現在 今⽇の話は ココの話

Slide 14

Slide 14 text

© LayerX Inc. 14 ● 今⽇のトピックは「データ転送の⼿段としてIcebergテーブルを利⽤した」話です。 ● Iceberg spec の詳細など Iceberg という技術そのものへの深掘りは控えめとなっています。 ● また、時間の都合上、細かな制約に対するアプローチは記載していません。懇親会でお話できれば と思っています!!! ● ぜひお話しましょう!!! おことわり 今⽇のトピック

Slide 15

Slide 15 text

⽬次 Agenda ● ✅ ⾃⼰紹介 / 会社紹介 ● ✅ 今⽇のトピック ● "可能な限り安く" #とは ● Snowflake から BigQuery を Read する選択肢 ● BigQuery Extract Job で出⼒した Parquet を Snowflake-managed Iceberg Table へ格納する ● ハマりどころ ● まとめ

Slide 16

Slide 16 text

"可能な限り安く" #とは

Slide 17

Slide 17 text

17 © LayerX Inc. "可能な限り安く" #とは 今⽇の真のトピック

Slide 18

Slide 18 text

SnowflakeからBigQueryをReadする選択肢

Slide 19

Slide 19 text

© 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する選択肢

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

© 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

Slide 22

Slide 22 text

© 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

Slide 23

Slide 23 text

BigQuery Extract Jobで出⼒したParquetを Snowflake-managed Iceberg Tableへ格納

Slide 24

Slide 24 text

© 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のデータファイルとして コピーして登録

Slide 25

Slide 25 text

© 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

Slide 26

Slide 26 text

© 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 エンジニアブログ

Slide 27

Slide 27 text

ハマりどころ

Slide 28

Slide 28 text

© 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 あ り

Slide 29

Slide 29 text

© 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 map Iceberg / Parquet のネスト型 互換なコピー先 OBJECT(a varchar, b number) ARRAY(OBJECT(a varchar, b number)) MAP(varchar, number) 成功 field 名・型・順序が互換であることが前提 汎用 VARIANT へ投入 VARIANT 失敗 Parquet 側も Iceberg v3 VARIANT 形式である場 合だけ別

Slide 30

Slide 30 text

© 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 前に止める。

Slide 31

Slide 31 text

まとめ

Slide 32

Slide 32 text

© LayerX Inc. 32 ● civitaspo/dbt-snowflake-iceberg-sync ● dbt の package として提供しているので、Snowflake × dbt で BigQuery のデータを取得したい⼈ は使ってみてね!! 他にも多々ハマりどころがあったのでOSSにしました まとめ

Slide 33

Slide 33 text

© LayerX Inc. 33 ● 弊社では、⼀緒に働く仲間を⼤募集しています!!!! ● Production-ReadyなAI開発をサポートするためのデータ基盤開発、時系列データ処理、リアルタイ ムデータパイプラインの構築などに興味がある⽅、そして、データ基盤を事業成⻑のドライバーだ と信じて⽌まない⽅は、ぜひ⼀緒にチャレンジしましょう!!! 【バクラク】データエンジニア      【バクラク】アナリティクスエンジニア We are hiring!!! おわりに

Slide 34

Slide 34 text

おわり