ふくふくHukuhuku Inc.
EP.09Snowflake 13分公開: 2026-09-01

データ共有の使い所 ── ファイル連携を組まずに済むケース

データを渡す方法として、ファイルを書き出して送る以外の選択肢があります。複製せず参照権限だけを渡す仕組みで、何ができて何ができないかを整理します。

#Snowflake#データ連携#設計#運用
執筆 / 監修
松尾 亮合同会社ふくふく 代表社員

データ基盤・データパイプライン構築 / BI / 生成 AI 活用支援を専門とするエンジニア (28 年)。 本記事は AI 利用ポリシーに基づき、生成 AI の補助で執筆 → 人間が監修・編集して公開しています。

プロフィール詳細
シェア

他組織にデータを渡す場面を考えます。従来はファイルを書き出し、置き場に送り、相手が取り込む ── という手順でした。 の構築と、その後の運用が必要です。

は、複製せず参照権限だけを渡す仕組みです。この回は、何ができて何ができないかを整理します。

1. 何が変わるのか

最大の違いは、データが移動しないことです。相手は元のデータを直接参照します。

2つの方式の比較
項目ファイル連携データ共有
鮮度書き出した時点で固定常に最新
構築の手間書き出し・転送・取り込みが要る権限を設定するだけ
保管の重複双方が同じデータを持つ元の1つだけ
計算費用の負担取り込む側参照する側
相手の前提ファイルを読めればよい同じ基盤が前提

1行目が実務上いちばん効きます。ファイル連携では必ず遅延が生じ、しかも「いつ時点のデータか」を管理する必要があります。共有なら、相手が見た瞬間が最新です。

一方、最下行が最大の制約です。相手も同じ基盤を使っていることが基本的な前提になります。使っていない相手に渡す仕組みも用意されていますが、条件が変わるため事前に確認が必要です。

2. 見せる範囲を設計する

表をそのまま共有することは、実務ではあまりありません。見せてよい範囲に絞るためにビューを経由させます。

見せる範囲を絞ってから共有する
SQL
-- 共有用のスキーマを分ける(本番の表を直接共有しない)CREATE SCHEMA prod.shared_with_partner;
-- 見せる列だけを選び、行も絞ったビューを作るCREATE VIEW prod.shared_with_partner.v_orders ASSELECT    order_id,    order_date,    region,    amount    -- customer_name, email, phone は含めないFROM prod.analytics.fct_ordersWHERE region = 'KANTO'          -- その相手に関係する範囲だけ  AND order_date >= '2026-01-01';
-- 共有を作成し、ビューだけを対象にするCREATE SHARE partner_share;GRANT USAGE  ON DATABASE prod                      TO SHARE partner_share;GRANT USAGE  ON SCHEMA   prod.shared_with_partner  TO SHARE partner_share;GRANT SELECT ON VIEW     prod.shared_with_partner.v_orders TO SHARE partner_share;

要点は、共有専用のスキーマを分けることです。本番の表を直接共有すると、列が1つ追加されただけで、それが相手に見えるという事故が起きます。ビューで明示的に列を列挙しておけば、追加された列は自動的には見えません。これは EP.8 の で「新しい表に自動で権限が付くようにする」と書いたのと逆方向の配慮です。内部には自動で行き渡らせ、外部には明示したものだけを出す。同じ仕組みでも、内向きと外向きで既定を変える必要があります。

`SELECT *` を共有用ビューに使わない

ビューの定義で全列を選ぶと、元の表に列が追加された瞬間に共有範囲が広がります。共有用ビューでは必ず列を明示的に列挙してください。これは規約として決めておく価値のある項目です。

共有した内容を、渡す側から点検する
SQL
-- どの共有に、何を渡しているかを確認するSHOW SHARES;SHOW GRANTS TO SHARE partner_share;
-- 共有用ビューの定義を確認する(列が増えていないか)SELECT get_ddl('view', 'prod.shared_with_partner.v_orders');
-- 共有先が実際に参照しているかを見るSELECT    share_name                       AS 共有,    consumer_account_locator         AS 参照先,    DATE_TRUNC('day', query_date)    AS 日付,    SUM(jobs_queried)                AS 参照回数FROM snowflake.account_usage.data_transfer_historyWHERE query_date >= DATEADD(day, -30, CURRENT_DATE())GROUP BY 1, 2, 3ORDER BY 日付 DESC;

渡しているつもりの範囲と、実際に渡っている範囲を突き合わせるのが点検の要点です。特にビューの定義は、変更されていないかを定期的に確認する価値があります。参照回数を見れば、使われていない共有も見つかり、これは外す候補になります。

3. 使いどころ

有効な場面と、そうでない場面があります。判断は相手の環境と、データの性質で決まります。

向き不向き
場面向き理由
グループ会社間での共有非常に向く同じ基盤を使っていることが多い
自社内の別環境への連携向く複製せずに参照できる
継続的に最新が必要な連携向く遅延がない
取引先が別の基盤を使っている条件を確認別の仕組みが要る
一度きりの受け渡し向かないファイルで十分。設定の手間が見合わない
相手が加工して持ちたい場合による結局取り込むなら利点が減る

5行目は重要な線引きです。一度きりなら、ファイルで渡すほうが速い。共有の設定と権限管理の手間は、継続的に使うから見合うものです。新しい仕組みがあると、それを使うこと自体が目的になりがちですが、手間が見合うかで判断してください

4. 費用の負担が変わる

見落とされやすいのが費用の配分です。渡す側は保管を、参照する側は計算を負担します。ファイル連携とは配分が逆転する部分があります。

  • 渡す側 — データの保管費用を持つ。相手がいくら参照しても計算費用はかからない
  • 参照する側 — 自分の計算資源で参照するため、参照するほど費用がかかる
  • 結果として — 相手が重いクエリを流しても、渡した側の費用は増えない

3番目は渡す側にとって安心材料ですが、相手にとっては説明が必要な点です。「共有してもらったが、参照すると自分たちの費用がかかる」という認識を持ってもらわないと、後でもめます。渡すときに費用の配分を明示するのが実務上の作法です。ファイルで受け取っていた頃は、取り込んだ後の費用は自分たちのものとして自然に認識されていました。共有ではその境界が見えにくくなるため、明示しておく価値があります。

相手の使い方まで見えない

共有した先で相手がどう使うかは、渡した側からは見えません。重い使い方をして「遅い」と言われることがあります。渡す時点で、想定する使い方(頻度・粒度)をすり合わせておくと、後の齟齬が減ります。

5. 運用で気をつけること

設定したあとの運用にも、いくつか注意点があります。

  1. 1共有先の一覧を管理する — 誰に何を渡しているかを把握しておく
  2. 2元の表の変更が影響する — ビューが参照する列を消すと、相手側で壊れる
  3. 3終了時に確実に外す — 契約終了後も見えたままにしない
  4. 4共有用ビューもレビュー対象にする — 列の追加は特に注意

2番目が実務で効きます。共有用ビューは、元の表に対する制約になります。列名を変えたい、型を変えたいというときに、相手側が壊れることを考慮しなければなりません。これは意識していないと気づかない依存関係です。

この構造は 壊れないデータ基盤の作り方 で扱っている、上流の変更で下流が壊れるという話と重なります。外部に見せた形は、勝手に変えられなくなるという点で、共有は暗黙の契約を生みます。

6. 判断の整理

最後に、方式を選ぶときの問いを整理します。

  1. 1相手は同じ基盤を使っているか — 使っていなければ選択肢が変わる
  2. 2継続的な連携か、一度きりか — 一度きりならファイルで足りる
  3. 3最新である必要があるか — 日次で足りるならファイルでもよい
  4. 4見せる範囲を絞れるか — ビューで表現できる範囲か
  5. 5費用の配分を合意できるか — 相手側に計算費用が発生する

5つすべてが「共有向き」なら、迷わず共有を選んでよいと思います。1つでも引っかかるなら、従来のファイル連携のほうが総合的に楽なことがあります。新しい仕組みだから使う、という選び方はしないでください。

ここまでのまとめ

データが移動しないため、鮮度と保管の重複で有利。ただし相手の環境が前提になる。共有は専用スキーマのビュー経由にし、列を明示的に列挙する(`SELECT *` は事故のもと)。費用は参照する側の負担なので、渡すときに明示する。そして共有した形は暗黙の契約になり、後から変えにくくなります。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp