Snowflake

Snowflake Clean Roomsで実現するデータコラボレーション

2026-03-26
更新: 2026-03-27
NicheeLab編集部

Snowflake Clean Roomsは、複数の組織が互いの生データを公開せずに共同分析を行うためのデータコラボレーション基盤です。 広告効果測定、顧客オーバーラップ分析、データエンリッチメントなどのユースケースで、 プライバシーを保護しながらデータの価値を引き出すことを目的としています。 GDPRやCCPAなどのプライバシー規制への対応が求められる中、 Clean Roomsはサードパーティクッキーの廃止後のマーケティング分析基盤としても注目されています。

Provider / Consumer 構造

Clean RoomsはProvider(データ提供者)Consumer(データ利用者)の2者間で構成されます。 Providerがデータと分析テンプレートを定義し、ConsumerはテンプレートをAPIとして実行します。

┌─────────────────────────────────┐
│        Provider(広告媒体社)       │
│                                   │
│  [広告インプレッションデータ]         │
│   ├─ user_hash (ハッシュ化ID)      │
│   ├─ campaign_id                  │
│   ├─ impression_date              │
│   └─ channel                      │
│                                   │
│  [分析テンプレート]                  │
│   ├─ Overlap Analysis             │
│   ├─ Reach & Frequency            │
│   └─ Conversion Attribution       │
└──────────────┬──────────────────┘
               │ Clean Room(集計結果のみ共有)
               │ ← 生データは渡さない
┌──────────────┴──────────────────┐
│       Consumer(広告主)           │
│                                   │
│  [顧客データ]                      │
│   ├─ user_hash (ハッシュ化ID)      │
│   ├─ purchase_date                │
│   ├─ product_category             │
│   └─ amount                       │
│                                   │
│  テンプレートを実行 → 集計結果を取得   │
└─────────────────────────────────┘

技術的な仕組み

Clean Roomsは複数のSnowflake機能を組み合わせて実現されています。

構成要素役割
Secure Data Sharingテンプレート(Secure UDF / Stored Procedure)をConsumerアカウントに共有
Secure UDF / Stored Procedure分析ロジックをカプセル化し、Consumer側から実行可能にする
Row Access PolicyConsumerがJOIN結合できるデータ範囲を制限
Aggregation Policy結果セットの最小集計粒度を強制(個人を特定できない粒度に制限)
Native App FrameworkClean Roomをパッケージ化してMarketplace経由で配布

テンプレート1:Overlap Analysis(顧客重複分析)

最も一般的なClean Roomのユースケースです。 Provider側の顧客リストとConsumer側の顧客リストをハッシュ化IDで突合し、 重複する顧客数やセグメント別の分布を集計結果のみで返します。

-- Provider側: Overlap Analysisテンプレートの定義(概念例)
CREATE OR REPLACE SECURE FUNCTION clean_room.overlap_analysis(
  consumer_table VARCHAR,
  join_column VARCHAR,
  group_by_column VARCHAR
)
RETURNS TABLE (segment VARCHAR, overlap_count NUMBER, overlap_pct FLOAT)
AS
$
  SELECT
    p.segment,
    COUNT(DISTINCT p.user_hash) AS overlap_count,
    ROUND(COUNT(DISTINCT p.user_hash) * 100.0
      / (SELECT COUNT(DISTINCT user_hash) FROM provider_data.customers), 2) AS overlap_pct
  FROM provider_data.customers p
  INNER JOIN IDENTIFIER(consumer_table) c
    ON p.user_hash = c.user_hash
  GROUP BY p.segment
  HAVING COUNT(DISTINCT p.user_hash) >= 25  -- 最小集計粒度(k-匿名性)
  ORDER BY overlap_count DESC
$;

-- Consumer側: テンプレートの実行
SELECT * FROM TABLE(
  shared_clean_room.clean_room.overlap_analysis(
    'my_db.my_schema.my_customers',
    'user_hash',
    'segment'
  )
);

テンプレート2:Data Enrichment(データエンリッチメント)

Consumer側のデータをProvider側のデータで補強するユースケースです。 たとえばConsumer側の顧客リストに対して、Provider側が保有するデモグラフィック属性のセグメント別集計値を付与します。 個人レベルの属性は返さず、セグメント粒度での統計値のみを提供します。

-- Provider側: Enrichmentテンプレート(概念例)
CREATE OR REPLACE SECURE FUNCTION clean_room.enrich_demographics(
  consumer_table VARCHAR
)
RETURNS TABLE (age_group VARCHAR, income_bracket VARCHAR, user_count NUMBER)
AS
$
  SELECT
    p.age_group,
    p.income_bracket,
    COUNT(DISTINCT c.user_hash) AS user_count
  FROM IDENTIFIER(consumer_table) c
  INNER JOIN provider_data.demographics p
    ON c.user_hash = p.user_hash
  GROUP BY p.age_group, p.income_bracket
  HAVING COUNT(DISTINCT c.user_hash) >= 50
  ORDER BY user_count DESC
$;

テンプレート3:Conversion Attribution(コンバージョン分析)

広告のインプレッションデータ(Provider)と購買データ(Consumer)を突合し、 キャンペーン別のコンバージョン率を集計で算出するパターンです。

-- 概念例: キャンペーン別コンバージョン集計
-- Provider: 広告インプレッション / Consumer: 購買データ

-- 結果のイメージ(集計データのみConsumerに返却)
-- campaign_id | impressions | converters | conversion_rate
-- CAMP_001    | 15,230      | 1,892      | 12.4%
-- CAMP_002    | 28,450      | 2,105      | 7.4%
-- CAMP_003    | 9,870       | 423        | 4.3%

Clean Rooms vs Data Sharing 比較表

比較項目Clean RoomsData Sharing
データの公開範囲集計結果のみ(生データ非公開)共有されたオブジェクトに対するSELECTが可能
Consumer側の操作定義済みテンプレートの実行のみ任意のSELECTクエリを実行可能
プライバシー保護強い(集計粒度制限・k-匿名性)Provider側のポリシー設計に依存
主なユースケース広告測定、顧客分析、医療研究データ商品化、パートナー連携、部門間共有
データコピーなし(Provider側のストレージに存在)なし(同じくProvider側に存在)
コスト負担Consumer側のコンピュート(またはProvider側)Consumer側のコンピュート
カスタマイズ性テンプレートの範囲内高い(自由にクエリ設計可能)

プライバシー制御メカニズム

制御目的実装方法
ハッシュ化結合PII(生のメール等)を使わずにデータを突合SHA-256ハッシュで事前に匿名化
最小集計粒度少数のレコードを含む結果を排除(再特定リスク低減)HAVING COUNT(*) >= k(k-匿名性)
テンプレート制限ConsumerのSQLを制限し、意図しない集計を防止Secure UDF / Stored Procedure
差分プライバシー集計値にノイズを加えて個人の寄与を隠蔽テンプレート内での統計的ノイズ付加

Marketplace連携

Snowflake Marketplaceでは、サードパーティベンダーがClean Roomソリューションを Native Appとして提供しています。LiveRamp、Habu(2024年にSnowflakeが買収)、InfoSumなどが 専用のClean Roomアプリを公開しており、Snowflakeアカウントにインストールするだけで Clean Room機能を利用開始できます。

導入フロー

Step 1: Provider側
  ├─ データの準備(ハッシュ化、匿名化)
  ├─ 分析テンプレートの定義(Secure UDF / Stored Procedure)
  ├─ プライバシー制御の設定(最小粒度、Row Access Policy)
  └─ Clean Roomのデプロイ(Share作成 or Native App公開)

Step 2: Consumer側
  ├─ Shareの受信 or Native Appのインストール
  ├─ 自社データの準備(結合キーのハッシュ化)
  └─ テンプレートの実行と結果の取得

Step 3: 運用
  ├─ テンプレートの実行ログ監視
  ├─ 結果のプライバシー検証
  └─ テンプレートの更新・追加

ベストプラクティス

  • 結合キーは必ずハッシュ化する:メールアドレスや電話番号を平文で結合せず、SHA-256等でハッシュ化してからJOINする
  • 最小集計粒度を厳格に設定:HAVING COUNT(*) >= 25〜50 を強制し、少数レコードの結果からの個人特定を防ぐ
  • テンプレートのSQL内容を定期監査:テンプレートに意図しない集計パス(個人レベルのデータ漏洩につながるクエリ)が含まれていないか定期的にレビューする
  • Aggregation Policyとの併用:テンプレート内のHAVING句に加え、Aggregation Policyをテーブルに直接適用することで多層防御を実現する
  • Native App Frameworkでパッケージ化:複数のConsumerに同じClean Roomを提供する場合はNative Appとしてパッケージ化し、Marketplace経由で効率的に配布する

問題で確認

Data Collaboration

問題 1

広告媒体社(Provider)が保有するインプレッションデータと広告主(Consumer)が保有する購買データを突合し、キャンペーン別のコンバージョン率を算出したい。ただし、双方ともに相手の生データ(個人レベルのレコード)にはアクセスできないようにする必要がある。最も適切なアプローチはどれか。

  1. Secure Data Sharingで双方がテーブルを共有し、各自でJOINクエリを実行する
  2. Provider側でClean Roomテンプレートを定義し、Consumer側はテンプレートを実行して集計結果のみを取得する
  3. Provider側のデータをCSVでエクスポートしてConsumer側にメール送付する
  4. External Tableで相手のS3バケットを直接参照してJOINする

正解: B

「双方ともに相手の生データにアクセスできない」という要件を満たすのはClean Roomsです。Provider側が分析テンプレート(Secure UDF/Stored Procedure)を定義し、Consumer側はテンプレートを実行して集計結果のみを受け取ります。Aの Data Sharingでは Consumer側がSELECTで生データにアクセスできてしまいます。CのCSVエクスポートはセキュリティ上問題があり、Snowflakeのデータガバナンス機能を活用できません。DのExternal Tableでも生データへのアクセスが可能になってしまいます。

よくある質問

Clean RoomsとData Sharingの違いは何ですか?

Data Sharing(Secure Data Sharing)はProvider側のデータをConsumerがSELECTで自由にクエリできる仕組みです。Consumerは行レベル・列レベルでデータを参照できます。一方、Clean Roomsはデータそのものは公開せず、Provider側が定義した分析テンプレート(SQL)のみをConsumerが実行できる仕組みです。Consumer側は個々のレコードにはアクセスできず、集計結果のみが返されます。そのため、PIIや機密データを含む場合はClean Roomsが適しており、オープンなデータ共有にはData Sharingが適しています。

Clean Roomsは技術的にはどのSnowflake機能で実装されていますか?

Snowflake Clean Roomsは内部的にSecure Data Sharing、Secure UDF/Stored Procedure、Row Access Policy、JavaScript UDF、Reader Accounts(場合によって)などの機能を組み合わせて実装されています。Providerは分析テンプレートとしてSecure UDFやStored Procedureを定義し、それをData Sharing経由でConsumerに公開します。Consumer側はテンプレートに引数(自社データの結合キー等)を渡して実行しますが、裏側のデータには直接アクセスできません。

Clean Roomsを利用するためのEdition要件はありますか?

Snowflake Clean Roomsの機能自体はBusiness Critical Edition以上で利用可能です。Snowflake Native App Frameworkを使用してClean Roomアプリケーションを構築・配布する場合もBusiness Critical以上が推奨されます。Marketplace経由でサードパーティが提供するClean Roomソリューション(LiveRamp、InfoSum等)を利用する場合は、Enterprise Edition以上で利用できるケースもあります。なお、Snowsight UIからのClean Room管理機能はPrivate Previewまたは限定的に提供されている場合があるため、最新の公式ドキュメントで確認してください。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Snowflake

Snowflake資格一覧|全11試験(SnowPro)の難易度・費用

Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...

Snowflake

Snowflake試験の難易度ランキング|全11資格を徹底比較

Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...

Snowflake

Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ

Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...

Snowflake

SnowPro Core試験完全解説|出題範囲・問題例・合格戦略

SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...

Snowflake

SnowPro Platform Associate完全解説|入門試験の攻略

SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...

Snowflakeの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.