Zenn
❄️

Snowflake Data Clean Rooms の構築 Ver.20250327

2025/03/28に公開
1

記事の目的

・Snowflakeを活用したクリーンルーム構築を検討しているエンジニアの方向けに構築手順の参考にしていただければと思います。
・また機能を利用した所感をまとめていますので、この機能を使って何が出来るか?の参考になればと思います。

DCRのアップデート

3月27日にSnowflakeの Data Clean Roomsのアップデートリリースがありました!
https://docs.snowflake.com/en/release-notes/2025/other/2025-03-27-dcr

主なアップデート

  • 簡素化されたオンボーディング ※今回の記事ではここを主に見直ししています
  • クリーンルームUIの分析エラーメッセージ
  • 難読化されたプロバイダーテンプレート
  • 複数アカウントのクロスクラウドコラボレーションサポート
  • コンシューマー実行分析におけるデフォルトのキャッシュ動作の更新
  • 開発者向けの新しい限定APIアクセスロール
  • LiveRamp Identity & Translation 統合のアップデート

以前にこちらの記事でDCRの解説記事を投稿させてもらいましたが、今回のアップデートでインストール周りが大幅に変わったので、改めて最新のインストール手順としてまとめました!

インストール移行の実際の利用手順は変更していませんので、既にご利用済の方はインストール関連のみご確認ください。
https://zenn.dev/dataheroes/articles/bc82d2704a6e37

個人情報保護の前提

クリーンルーム自体はあくまでもセキュアな環境で人手を介さずにマッチングする機能ですが、そもそもマッチングしてよいのか、どのような目的であればよいのか?などはそれぞれの企業のプライバシーポリシーに従い、ご利用可否は判断してください。

DCRの利用要件

キャパシティ契約の有無

・キャパシティ契約であること(オンデマンドやトライアルは利用不可)

必要エディションの有無

・プロバイダ(データ開示側)は、Enterprise 以上のエディション
・コンシューマ(データ利用者側)は、Standard以上

プロバイダとコンシューマの利用規約の同意

・利用規約を確認して同意する事が必要(Legal checkは自社の規定に従い、実施しましょう)
 https://www.snowflake.com/legal/snowflake-provider-and-consumer-terms/?lang=ja

全体の概念

実施シナリオ

DCRの構築から実際のマッチングまでの一連の流れを実施します
・あるアカウントにおけるDCRの構築
・初期インストール時にセットされるSAMOOHA_SAMPLE_DATABASE を用いたマッチングの実施
・実施結果をコンシューマ(自身のアカウント)へプッシュする

SAMOOHA_SAMPLE_DATABASE について

どの企業でもいきなり個人情報を使った検証は準備や承認が難しいと思いますので、そのようなユーザー向けに個人情報をハッシュ化した属性データがプリセットされています。
これを使う事で機能検証などはスムーズに進められます!(気が利いてるー!)

データ項目の説明①マッチング項目(Join Key候補)

・HASHED_EMAIL(メアド)
・HASHED_FIRST_NAME(名)
・HASHED_LAST_NAME(姓)
・HASHED_ZIPCODE(郵便番号)
・HASHED_PHONE(電話番号)

データ項目の説明②属性項目

・STATUS(ランク)
・AGE_BAND(年代)
・REGION_CODE(地域)
・DAYS_ACTIVE(稼働日数)
・DEVICE_TYPE(スマホデバイス)
・EDUCATION_LEVEL(教育レベル)
・INCOME_BRACKET(年間収入)
・HOUSEHOLD_SIZE(世帯人数)
・GENDER(性別)

データサンプル

HASHED_EMAIL 0Gv+We9wpZv2EwB1tTsDly9CZYWZoFLkzwWMjrb0wPM= zjjDwghYTP78HNWff9sBnycB6e2QjDj8W6fEZlUUAn4=
HASHED_FIRST_NAME bgb7yGZ+6+nvuK9+nTE08Ijr72SBKd3QNTs+LOOiYeA= m9ZypXZrQaWoBYDZ/OJZSyPAZwL2YIylntbLFJOqHCY=
HASHED_LAST_NAME jwZ/8QsrfsjBsT0ovCHt66DFpP1ya4GJ8+7QcnyNF/I= LNsqBrXn85eaN7UnAxBQiG1Se0eKZVHLTIQKJiHKIus=
HASHED_ZIPCODE ++8I3eHAAoh4Ar656mI9o5MD4hJHULWpL/TyZA2GJAA= ptcaxXQzH/9pzZ3dd8S8VGxKLpj8OmoNIgp1AsjoMlk=
HASHED_PHONE zgXlCvxAjtZ4iguMDMRZkJR4vUXew1vZmMm0JF0gSjQ= d1+J+hsslqfWYSojcp05U78Eo/iXxkZXgkdxzhc/7KI=
STATUS SILVER SILVER
AGE_BAND 75 40
REGION_CODE REGION_8 REGION_7
DAYS_ACTIVE 107 413
DEVICE_TYPE iOS Android
EDUCATION_LEVEL UNDERGRADUATE POSTGRADUATE
INCOME_BRACKET 50K-100K 100K-250K
HOUSEHOLD_SIZE 3 3
GENDER FEMALE MALE

構築手順概要

インストール手順全体像は公式ドキュメントを参照してください。
https://docs.snowflake.com/en/user-guide/cleanrooms/getting-started

双方の準備が必要なのでプロバイダとコンシューマで交互に実施(一人二役)
実際の利用ではどちらかの立場だけの作業を実施してください。

1.プロバイダ

・DCRの初期設定 Snowflake DCRログインページよりインストールを実施
 ※前回記事からの見直し観点

2.コンシューマ

・DCRの初期設定 Snowflake DCRログインページよりインストールを実施
 ※1の手順と同様

3.プロバイダ

・コンシューマの追加 公開する相手を指定※先に2の①②が必要
・DCRの作成とコンシューマへの共有

4.コンシューマ

・マッチングと分析の実行 マッチングする対象データとアウトプットの指定

構築手順詳細

1.プロバイダ DCRの初期設定

今回のアップデートでマーケットプレイスからインストール出来るようになりました!と思いきや、入口だけの改善で結構手作業多いです・・

それでは手順を見ていきましょう!

1.マーケットプレイスより取得します

(今まではMPから取得するとバグる・・)

2.取得ボタンを実行

3.インストールが開始

(あるべき手順 笑)

4.無事にインストール

5.アプリ画面を起動

6.SnowsightでインストールSQLがセットされるので実行する

(え、ここは手動なの?)

7.インストールSQLを実行します

※プリセットされているSQLに日本語訳を追加しています。

//  DCR APP LOADING INSTRUCTIONS
--Set role as ACCOUNTADMIN to proceed with setup(管理者アカウント使うよ)
USE ROLE ACCOUNTADMIN;

--Application name must be SAMOOHA_BY_SNOWFLAKE to function. If you have renamed the application, please change "Snowflake_Data_Clean_Rooms" to the name your provided during install. (アプリケーション名は SAMOOHA_BY_SNOWFLAKE でなければなりません。アプリケーション名を変更した場合は、「Snowflake_Data_Clean_Rooms」をインストール時に指定した名前で置き換えてください。)
ALTER APPLICATION IF EXISTS Snowflake_Data_Clean_Rooms RENAME TO SAMOOHA_BY_SNOWFLAKE;

--Prepare the mount script(マウントスクリプトを準備します。)
CALL SAMOOHA_BY_SNOWFLAKE.APP_SCHEMA.PREPARE_MOUNT_SCRIPT();

-- If you would like to review the mount script, run the line below or else proceed to the next step. Please do NOT execute the output provided here manually, as partial execution could impact application functionality.(マウントスクリプトを確認したい場合は、以下の行を実行します。そうでない場合は、次のステップに進んでください。ここで提供される出力を手動で実行しないでください。部分的な実行はアプリケーションの機能に影響を与える可能性があります。)
-- EXECUTE IMMEDIATE FROM @SAMOOHA_BY_SNOWFLAKE.APP_SCHEMA.MOUNT_CODE_STAGE/dcr_loader.sql DRY_RUN=TRUE;

-- Execute the mount for Snowflake Data Clean Rooms(Snowflake Data Clean Rooms のマウントを実行します。)
EXECUTE IMMEDIATE FROM @SAMOOHA_BY_SNOWFLAKE.APP_SCHEMA.MOUNT_CODE_STAGE/dcr_loader.sql;

--Switch role to SAMOOHA_APP_ROLE and run the below command to ensure API is functional and confirm your mount status is recroded as TRUE.(ロールを SAMOOHA_APP_ROLE に切り替え、以下のコマンドを実行して API が機能していることを確認し、マウント状態が TRUE として記録されていることを確認します。)
USE ROLE SAMOOHA_APP_ROLE;
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.LIBRARY.CHECK_MOUNT_STATUS();

-- You can now begin using the clean rooms API. Please refer to the read me for links to API introduction & tutorial for more information.;(ここで、クリーンルーム API の使用を開始できます。詳細については、README に記載されている API の紹介とチュートリアルへのリンクを参照してください。)

※ちなみに裏ではめっちゃリクエストされています

※5分ほどでスクリプトは完了

8.確認コマンドを実行

USE ROLE samooha_app_role;
USE WAREHOUSE app_wh;
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.LIBRARY.CHECK_MOUNT_STATUS();

成功していればインストールは完了です

と思いきや、ネットワークポリシーの構成とサービスユーザー作成が必要とのこと

9.ネットワークポリシーを以下の地域に従い、追加します。

https://docs.snowflake.com/en/user-guide/cleanrooms/admin-tasks#label-cleanrooms-configure-network-policy

10.サービスユーザーを作成します

(これ前はUIで出来たんだけど・・)

USE ROLE USERADMIN;
CREATE USER <SERVICE-USER-USERNAME> PASSWORD='<SERVICE-USER-PASSWORD>'
FIRST_NAME='DCR' LAST_NAME='Service User'
EMAIL='<SERVICE-USER-EMAIL-ADDRESS>';

11.DCRサービスユーザーでログイン

Snowsightからログアウトして、作成したDCRサービスユーザーでログイン

12.ログインすると、新規ユーザーとしてWelcomeされます

13.My Profileより、メール確認を行います

14.認証メールを確認して、認証を行います。

15.認証が取れたので、閉じるか続けるか選びます。

元のログイン画面が残っているので閉じるで良い

16.再ログインか元の画面でリロードすると認証済の状態になります

メール確認の表示がない

17.Clean Roomの管理画面にアクセスします

https://cleanroom.c1.us-east-1.aws.app.snowflake.com/?action=signup

18.アカウント識別子を入力します


過去に作成したことがあるアカウントの場合は、すでにあるよと警告が出るので、右のLogInよりログインしてください。

ログインページでアカウントを指定します

無事にログイン完了

19.Profile & Featuresの設定

Company Profile が設定出来るのでひとまず設定

・Admin→Profile & Featuresへ遷移

・ロゴをアップして、Zoomでサイズ調整

・社名はかっこよく英語で(笑)

ここでプロバイダ側の作業は一旦完了し、並行してコンシューマ側の設定に移ります

2.コンシューマ DCRの初期設定

コンシューマ側で 1の手順と同じ手順で実施してください。

3-①.プロバイダ コンシューマの追加

1.CollaboratorsよりSnowflake Partnersを追加する

2.パートナーの企業名や連絡メールアドレス、アカウントロケータ、リージョンを選択

3.パートナーの登録完了

ここまでで初期設定は完了です!
ここからはDCRによるコラボレーションの設定と実行の手順に入ります

3-②.プロバイダ DCRの作成とコンシューマへの共有

1.クリーンルームの作成開始

Add Data 設定

ここではクリーンルームの箱を作り、公開するテーブルを指定します
・Name(クリーンルームの名称設定)
・Datasource(どのクラウドサービスかを指定 Snowlflake以外はストレージを指定)
・Tables(DCRに公開するテーブル指定※今回はSAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS)
※Tableを指定するとプレビューが見れます

Specify Join Policies 設定

ここでは外部と連携するための接続設定やマッチング条件の設定を行います
・identity Hub(今回は使用しない)
・3Rdpartyとして選べるラインナップ👀(LiveRampとか色々)
・Audience Overlap & Segmentation を選択(他にも色々テンプレートがあります)
・CUSTOMERS のHASHED_EMAILでのJoinを選択(複数設定も可能)

ちなみにConnecter で見るとCleanRoomとしてAMCとAds Data Hubも出来るみたい

この辺りのコネクタ系は公式ドキュメント見て実施しましょう
https://docs.snowflake.com/en/user-guide/cleanrooms/connector-activation

Configure Analysis & Query 設定

ここでは分析テーマと結合した後のアウトプット条件(クエリー)の指定をします

・Tables(結合するテーブルを指定)
https://storage.googleapis.com/zenn-user-upload/0c8f1da193a9-20241003.png =300x)

・Segmentation & Attribute Colmuns(セグメントや属性項目を指定)

Privacy Settings

クリーンルームの必須機能
・閾値 K≧5 以上をアウトプットする(目的や特定性により調整してください)

・差分プライバシー設定(ノイズを追加する設定)
 これ設定するXSのウエアハウスが常時動いちゃうので使い方は要検討かもです 

※差分プライバシーに関する説明はこちら

https://docs.snowflake.com/en/user-guide/cleanrooms/differential-privacy

Share Clean Room 設定

・Collaboratorsの追加(設定済のパートナーから選択)

・Finish

これで公開設定が完了!!(俺、お疲れ!)
後はコンシューマ側(一人二役しんど・・)

4.コンシューマ マッチングと分析の実行

Clean Rooms画面でCRの招待が来ていることを確認し、Joinする

Install Cleanroomの実行

この辺りはプロバイダと同じ手順です
(Icebergだめよ。とか言われてるのはクリーンルーム自体で許可すれば出なくなります)

Specify Join Policies 設定

・マッチング条件の設定
・自身の選択したテーブルの結合カラムを指定
・名称が一致しているとデフォで選択される模様
・プロバイダ側の結合項目も指定可能(今回はHASHED_EMAILだけなので固定)

Configure Analysis & Query

・Tables(マッチングするテーブルの指定)
・Segmentation & Attribute Colmuns(セグメントや出力する属性項目の指定)
・ID Columns(アクティベーションする際に出力する項目)

ぽちぽちと選んでください

ID Columnsの指定

ID Columns は9月26日のリリースで追加された項目で、
アクティベーションハブのID列を指定出来るようになりました。
マッチングしたい項目とプッシュしたいキーが違うケースがあるので超便利!
https://docs.snowflake.com/en/release-notes/2024/other/2024-09-26-dcr

DCR実行環境の準備

初期状態

準備開始

準備完了

Query Configlations

ここではクエリのマッチング条件や出力内容を設定します
・My Join Column(結合項目の指定)
・User Segmentation(セグメント項目の指定)
・My Columns と Collaborator Columns(出力項目の指定)

・Filter(セグメント項目の条件設定、複数ある場合は + Filter で追加)

Privacy Settings

プロバイダ側で設定されている情報を確認し、ウェアハウスを指定してクエリを実行

※差分プライバシーを設定した場合は、指定した比率でノイズが混入するようです

Save Analytics & Query

※スケジューリングはAdminで許可すれば利用可能(9月26日のアップデートで追加)
Hourly(クレジット消費が心配になる設定だな・・)
Daily(UTC11時固定)
Weekly(毎月曜UTC11時固定)
スケジュールは今後色々自由度上がると期待

・実行時間の目安を表示してくれます(15分!結構かかるじゃん。。)

・しばらくして処理完了(15分かかんなかったけど。。)

処理結果を確認

・Match Rate

・Overlap Count

ちなみに差分プライバシーを設定した時は以下のようにノイズの注意書きが追加

Differential Privacy Enabled: Results are not exact and low numbers can show as negative due to noise injection.

・ダウンロードCSVを確認
 統計データとして取得できるのね

Activation Hub

・9月26日のアップデートで追加されたプッシュ機能

Push Data

今回はコンシューマ側にプッシュ

出力結果の確認

Pushされたデータは下記テーブルに格納されます
 SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.PUBLIC.CONSUMER_DIRECT_ACTIVATION_SUMMARY
このテーブルのアクセス権限を限定しておけば、よりセキュア!

USERR_IDやセグメント項目などが1カラムで出力されます。
テーブルレイアウトは見たことない桁数のVarchar型(笑)これならどんな桁数も大丈夫そう!

このデータを使って、自身のオウンドメディアへ配信が行う的な流れとなります!
実施手順は以上です!

まとめと今後の活用

・クリーンルームとしての基本機能は充分に有していると思います。
・9月26日のリリース機能も一通り確認しましたが、どれも実用的な機能でした!
・追加のクレジットやライセンスなどもなく、すぐに使える事は控えめに言っても素晴らしい!
・またPush機能により、配信やAdsなど様々な取組みが出来る可能性がある事が分かりました。
・今後の要望としてはスケジュール機能や外部コネクタの更なる充実をお願いしたい!

snowflakeにはいつもワクワクさせられていますが、DCRはプロダクト部門や外部提携部門とのビジネス活用の提案など色々使えそうで一層ワクワクしております!

ありがとう!Snowflake!ありがとう!SAMOOHA!
&色々試行錯誤でsnowflakeサポートの皆様を困らせてすいませんでした!(ToT)

細かい手順まで載せてしまったので長文な投稿となりましたがここまで読んでいただいてありがとうございました。

Zennの使い方もまだまだ分かっていないので見づらいところも多々あるかと思いますが少しでもお役に立てたなら、いいね!を頂けましたら、嬉しい限りです!

それではまた次の記事で。

1
Snowflake Data Heroes

Discussion

ログインするとコメントできます