Salesforce Data Cloud から Snowflake へのデータ共有を試してみる

Salesforce Data Cloud から Snowflake へのデータ共有を試してみる

Clock Icon2025.06.11

はじめに

Salesforce Data Cloud では Zero Copy Integration として主要な DWH と双方向でデータ連携できる機能が提供されています。このうち Data Cloud から Snowflake へのデータ共有機能を試してみましたので、本記事で内容をまとめてみます。

なお、以下の記事でも同様の検証が解説されており、本記事での検証時もこちらの内容を参考とさせていただきました。

https://qiita.com/manabian/items/7d809ca40e7d2758ce3e

概要

Data Cloud では Zero Copy Integration として Snowflake や BigQuery などの DWH と双方向でデータ連携が行えるサービスを提供しています。

この機能の要素として以下があります。

  • Data Shares(Bring Your Own Lake Data Shares)
    • Data Cloud 内のオブジェクトを DWH に共有できる機能
    • 各 DWH 側から Data Cloud のデータをクエリできる
  • Zero Copy Data Federation(Bring Your Own Lake Data Federation)
    • 外部のデータレイクまたは DWH のデータに Data Cloud からクエリできる機能

本機能の概要については、以下の Salesforce 社の方の記事が参考になります。

https://medium.com/@dsoffner/connect-salesforce-data-cloud-with-google-bigquery-and-snowflake-using-a-zero-copy-approach-6ba94d09d824

デモ動画も公開されています。

https://www.youtube.com/watch?v=OPH95cvHj1Y&t=7s

前提条件

ここでは以下の環境で Data Shares(Bring Your Own Lake Data Shares) を試してみます。

  • Data Cloud Playground を使用
    • Trailhead という Salesforce 社が提供する無料のオンライン学習サービスで使用できる環境
    • 以下よりサインインします

https://trailhead.salesforce.com/ja/today

サインイン後は、以下の講座で構築される一時的な環境を使用します。

https://trailhead.salesforce.com/ja/content/learn/projects/create-a-data-stream-in-data-cloud/get-started-with-a-data-cloud-developer-edition?trail_id=get-hands-on-with-data-cloud

  • Snowflake
    • Data Cloud の環境が準備できたら、同じクラウドリージョンに Snowflake アカウントを作成します
    • 本検証では ap-south-1: Asia Pacific (Mumbai) にアカウントを作成

Data Cloud インスタンスの場所は、環境ログイン後に画面右上のセットアップをクリックし、会社情報メニューより確認できます。

image

「Company Information > Instance」に記載があります。
※何度か検証しているため下図では別リージョンの記載です

image 1

リージョン情報は以下に記載があります。

https://help.salesforce.com/s/articleView?id=000396845&type=1

https://help.salesforce.com/s/articleView?id=data.c360_a_data_shares_aws_supportability_snowflake.htm&type=5

Snowflake 側の事前準備

Snowflake 側でのアカウント作成後、以下の作業を行います。

  • 認証用ユーザーの作成
  • Snowflake OAuth の構成

手順は以下に記載があります。

https://help.salesforce.com/s/articleView?id=data.c360_a_get_user_details_snowflake.htm&type=5

認証用ユーザーの作成

ユーザーについては、TYPE = SERVICE も試したのですが、うまく認証できませんでした。そのため、ここでは TYPE = PERSON として作成しました。権限については特に明記されていませんでしたが、おそらく認証できればよいので、以下のドキュメント記載のサンプルのように最小権限のロール(PUBLICなど)を付与でよいと思われます。

CREATE OR REPLACE USER  <Data Cloud Admin or Data Aware Specialist> 
  PASSWORD = '<string>'
  LOGIN_NAME = <string>
  DISPLAY_NAME = <string>
  FIRST_NAME = <string>
  MIDDLE_NAME = <string>
  LAST_NAME = <string>
  EMAIL = <string>
  DEFAULT_ROLE = <Any Public Role With Low Privileges>;

Snowflake OAuth の構成

ACCOUNTADMIN で以下を実行します。

CREATE OR REPLACE SECURITY INTEGRATION <Integration名>
  TYPE = OAUTH
  OAUTH_CLIENT = CUSTOM
  OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
  OAUTH_REDIRECT_URI = 'https://login.salesforce.com/services/cdpSnowflakeOAuthCallback'
  ENABLED = TRUE 
  OAUTH_ISSUE_REFRESH_TOKENS = TRUE; 

続けて以下を実行しOAUTH_CLIENT_IDOAUTH_CLIENT_SECRET を控えておきます。

SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS( '<Integration名>');
{
	"OAUTH_CLIENT_SECRET_2":"XXXXX",
	"OAUTH_CLIENT_SECRET":"XXXXX",
	"OAUTH_CLIENT_ID":"XXXXX"
}

Data Cloud 側の作業

Data Cloud 側では以下の作業を行います。

  • 共有対象のオブジェクトを作成
  • Data Share Targets の作成
  • Data Share の作成とリンク

共有対象のオブジェクトを作成

こちらはオプションですが、共有対象のデータストリームを作成します。「Data Streams > New」をクリックし、ここでは下図の通り「Salesforce CRM」を選択します。

image 2

検証環境では「Sales」を選択できたので、こちらを選択し「Next」をクリックします。

image 3

その他はデフォルトの設定でデプロイします。

image 4

しばらく待機すると「Data Stream Status」が「Active」になります。

image 5

Data Share Targets の作成

Data Share Targets という設定を通して Snowflake アカウントとの認証を行います。こちらの手順は以下に記載があります。

https://help.salesforce.com/s/articleView?id=data.c360_a_create_data_share_target_snowflake.htm&type=5

DataCloudメニューから「Data Share Targets > New」をクリックします。

image 6

Snowflake を選択すると下図の表示になるので、以下の通り入力します。

image 7

  • Label:任意の名称
  • Account URL:Snowflake アカウントの URL
    • 図ではsnowflakecomputing.com以降もありますが、ドメイン名まででよくパス以降は不要です。パス以降があると認証ステータスがエラーとなります
  • Client ID:Snowflake OAuth の構成で取得したOAUTH_CLIENT_ID
  • Client Secret:Snowflake OAuth の構成で取得したOAUTH_CLIENT_SECRET

「Save」をクリックすると下図の表示になるので、先の手順で作成したユーザーで認証します。

image 8

問題なければ認証後「Authentication Status」が「Successful」となります。

image 10

Data Share の作成とリンク

次に Data Share として共有対象のオブジェクトをまとめます。「Data Share > New」をクリックします。

image 11

「New」をクリックします。

image 12

任意のラベルを指定します。Snowflake 側ではこのラベルでどの共有オブジェクトか判断できます。

image 13

Data Share に共有対象のオブジェクトを追加し「Save」をクリックします。

image 14

作成した Data Share を Data Share Target とリンクします。Data Share タブから任意の Data Share を選択し下図のメニューから「Link/Unlink Data Share Target」をクリックします。

image 15

作成済みの Data Share Target 表示されるので選択し「Save」をクリックします。

image 16

設定後、対象の Data Share の Data Share Targets タブからステータスを確認すると「Active」となっていました。

image 17

Data Cloud 側の作業は以上です。

Snowflake 側:共有データへのアクセス

Snowflake 側で「Data > Private Sharing」を開きます。デフォルトで権限のある ACCOUNTADMIN であればこのタイミングで共有オブジェクトが表示されるはずです。

image 18

以降は通常のデータ共有からデータベースを作成する手順です。ここでは GUI で作業しました。

image 19

データを確認します。Data Share 名を含むスキーマに共有オブジェクトがビューとして格納されていました。

image 20

さいごに

Data Cloud から Snowflake へのデータ共有機能を試してみました。
Federation(Data Cloud から Snowflake へのクエリ)については以下に手順と概要がまとめられています。

https://developer.salesforce.com/docs/data/data-cloud-int/guide/c360-a-set-up-data-federation-snowflake-connection.html

https://developer.salesforce.com/blogs/2024/08/zero-copy-data-federation-with-snowflake-and-salesforce-data-cloud

こちらの内容が何かの参考になれば幸いです。

参考

https://trailhead.salesforce.com/ja/content/learn/modules/byol-data-shares-in-data-cloud-quick-look/get-to-know-byol-data-sharing-in-data-cloud

https://help.salesforce.com/s/articleView?id=data.c360_a_limits_and_guidelines_cdp.htm&type=5

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.