❄️

Snowflake Data Clean Rooms の構築から実行までやってみたよ!

2024/10/04に公開

こんにちは、CCCMKホールディングスのタロウです。
先日のSnowflake World Tour Tokyoでは弊社取締役の撫養がSMCCの白石執行役員と基調講演で企業間データシェアの事例を発表させていただきました。
https://www.snowflake.com/events/snowflake-world-tour-tokyo/

さて、データシェアについては皆様も既にご利用進めているかと思いますが、
よりセキュアに、さらにプライバシーに配慮し、さらにビジネスに活用出来るために
事業に先駆けて準備をしておこうと個人的にクリーンルームを色々試しておりました。

そんな中、今年の5月にこのニュースが出たので、これは試さねばとSnowflakeの菅野さんに色々教わりながら実施したハンズオンを元に色々試しているとさらにアップデートのニュースが!

Samoohaの買収とネイティブ機能としての提供

https://www.snowflake.com/ja/blog/unlock-insights-with-snowflake-data-clean-rooms/

9月26日の大型アップデート

・Branded clean room tiles(ロゴと企業名など設定できる!)
・Consumer direct activation(コンシューマ/プロバイダ間で直接プッシュ可!サイコー!)
・Activation Hub column policies(アクティベーション時のID列を指定できる!)
・Schedule analyses as a consumer(分析処理のスケジュール化!超便利!)
・Clean room data stats(アカウント間のテーブル相関性の確認や統計が見れる!確かに欲しい!)
・LiveRamp activation/The Trade Desk CRM activation(アクティベーション機能強化)
・Managed account credit limit and monitoring(消費量の制限が可能に!)
・Audience Overlap, SQL Query and Custom template update(結果の保存など機能強化!)

https://docs.snowflake.com/en/release-notes/2024/other/2024-09-26-dcr

と言うわけで、9月26日の最新アップデートも踏まえながら、データクリーンルーム機能の構築や一通りの実行手順を可能な限りまとめてみました。

記事の目的

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

個人情報保護の前提

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

DCRの利用要件

キャパシティ契約の有無

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

必要エディションの有無

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

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

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

全体の概念

実施シナリオ

DCRの構築から実際のマッチングまでの一連の流れを実施します
・新規に立ち上げた2つのアカウントにおいて、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ログインページよりインストールを実施

3.プロバイダ

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

4.コンシューマ

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

構築手順詳細

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

※インストールの注意事項
公式ドキュメントに記載がありますがマーケットプレイスにある製品なのに
マーケットプレイスからインストールしないでください。という鬼門過ぎる手順・・

・Snowflake DCRログインページより構築したアカウントおよびログインユーザーを指定します
・インストールが終わるとログインユーザーのメールアドレスに通知が来ます。
・Mサイズでも数分程度かかるようです。

※Snowflake Data Clean Roomsのログインページはこちらから(Streamlitで構築してる👀)
https://cleanroom.c1.us-east-1.aws.app.snowflake.com/

・ログインページでアカウントを指定

・アカウントが設定され、管理者メールアドレスやパスワードを設定

・アカウント入力後、認証メールが送信される

・認証メールが届くのでメール認証を実施

・認証後にログイン画面よりサインイン

・さきほどのログイン画面で入力した管理者メールアドレスを入力

・パスワード(+ワンタイムパスワード)※自社のセキュリティ設定に従って実施してください

・管理画面が起動されるので、Snowflake Adminメニューよりログインを実施

・ログインはAccount Admin権限を持つユーザー(管理者ユーザー)で実施

・DCRがアクセスする内容を確認して許可

・管理者ユーザーでログイン

・ログイン後にDCR用ユーザー(デフォルト dcr_service_user)を作成
 ※DCRユーザーにMFAを設定するとログイン出来なくなるようなので、設定しないこと
・DCR用ユーザー作成が完了したら、DCRユーザーのメール認証を実施
 Snowflake account リンク先へ遷移

・「DCR_SERVICE_USER」でログインして、My profile を選択
 ※Account Adminのユーザーではなく、DCR_SERVICE_USERのメール認証を行う目的

・DCR_SERVICE_USERの認証メールを送信

・メール認証の実施

・メール認証完了(元の画面が残っているなら閉じて良い)

・メール認証完了後に、Verify Statusを更新

・DCR内でDCR_SERVICE_USERの認証が完了したら、いよいよインストールを実施(数分かかる)
※実行するのはAccount Adminユーザーで実施しますが、氏名やメアドが入力されていないと
 実行時にエラーになるので、その場合は、ユーザーのプロフィールを更新してください。
※ちなみにクエリ履歴見ると分かりますが、バックグラウンドでめっちゃスクリプト実行してます

Account Featuresについての補足

・Cross-Cloud Auto-Fulfillment(クロスクラウド設定、クレジット消費増加します)
・External & Iceberg Tables(外部テーブルやIceBergテーブルの許可設定)
・Schedule Analysis Run(9月26日追加機能 スケジュール実行便利そう)

・しばらくしたら、Refresh押してステータスを確認

・インストール完了(Authenticatedになっている)

・画面をスクロールすると自身のロールで参照できるデータ群に加えて
SAMOOHA_BY_SNOWFLAKE_LOCAL_DB が表示されます。このDBはDCR実行用のDBとなります。
またここには表示されませんが、SAMOOHA_SAMPLE_DATABASE がSync済になっています。
自社データを使う場合は、当然ながらロール設定等で必要なデータのみ参照権限を追加しましょう

Profile & Features

9月26日のアップデートで、Company Profile が設定出来るようになりましたのでそちらも実施

・Admin→Profile & Featuresへ遷移

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

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

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

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

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

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

・CollaboratorsよりSnowflake Partnersを追加する

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

・パートナーの登録完了

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

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

・クリーンルームの作成開始

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(結合するテーブルを指定)

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

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

Discussion