Snowflake Secure Data Sharingは、データの物理コピーを作成することなく、アカウント間でリアルタイムにデータを共有できる機能です。プロバイダーはShareオブジェクトを作成してテーブル・ビュー・UDFを追加し、コンシューマーはそのShareからデータベースを作成するだけでクエリを実行できます。本記事では、Share作成からReader Account、Marketplaceまでを解説します。
従来のデータ共有ではETLやファイル転送でデータのコピーを作成する必要がありました。Snowflakeのゼロコピー共有では、プロバイダーのマイクロパーティション上のデータをコンシューマーが直接参照します。
ゼロコピー共有のアーキテクチャ:
[プロバイダーアカウント]
├─ テーブル: sales_data
│ └─ マイクロパーティション(S3/Azure Blob/GCS上)
│
├─ Share: sales_share
│ └─ メタデータ参照のみ(データコピーなし)
│
▼
[コンシューマーアカウント]
├─ Database: shared_sales_db (FROM SHARE)
│ └─ プロバイダーのマイクロパーティションを直接読み取り
│
└─ Warehouse: consumer_wh(コンシューマー側で実行)-- Step 1: Shareオブジェクトの作成
CREATE SHARE sales_share
COMMENT = '月次売上データの共有';
-- Step 2: データベースへのUSAGE権限を付与
GRANT USAGE ON DATABASE analytics_db TO SHARE sales_share;
-- Step 3: スキーマへのUSAGE権限を付与
GRANT USAGE ON SCHEMA analytics_db.public TO SHARE sales_share;
-- Step 4: テーブルへのSELECT権限を付与
GRANT SELECT ON TABLE analytics_db.public.monthly_sales
TO SHARE sales_share;
-- Secure Viewを共有する場合
GRANT SELECT ON VIEW analytics_db.public.sales_summary_v
TO SHARE sales_share;
-- Step 5: コンシューマーアカウントをShareに追加
ALTER SHARE sales_share ADD ACCOUNTS = consumer_org.consumer_acct;
-- 複数アカウントの追加
ALTER SHARE sales_share ADD ACCOUNTS = org1.acct1, org2.acct2;-- 利用可能なShareの確認
SHOW SHARES;
-- SharedデータベースをShareから作成
CREATE DATABASE shared_sales
FROM SHARE provider_org.provider_acct.sales_share;
-- 共有データへのクエリ実行
SELECT * FROM shared_sales.public.monthly_sales
WHERE sale_month >= '2026-01-01';
-- 自組織のユーザーにアクセス権を付与
GRANT IMPORTED PRIVILEGES ON DATABASE shared_sales TO ROLE analyst_role;| オブジェクト | 共有可否 | 備考 |
|---|---|---|
| テーブル | ○ | SELECT権限をGRANT |
| Secure View | ○ | SECUREキーワード必須 |
| Secure UDF | ○ | SECUREキーワード必須 |
| 通常のView | × | Secure Viewに変更が必要 |
| ステージ・パイプ | × | Shareには含められない |
| タスク・ストリーム | × | Shareには含められない |
非SECUREのViewをShareに含めることはできません。これはViewの定義(SQLテキスト)がコンシューマーに公開されるのを防ぐためです。
Reader Account(リーダーアカウント)は、Snowflakeアカウントを持たない外部パートナーや顧客にデータを共有するための仕組みです。プロバイダーアカウントから作成・管理し、ウェアハウスのコンピュート費用もプロバイダーが負担します。
-- Reader Accountの作成
CREATE MANAGED ACCOUNT partner_reader
ADMIN_NAME = 'reader_admin',
ADMIN_PASSWORD = 'StrongP@ss123!',
TYPE = READER;
-- Reader AccountにShareを割り当て
ALTER SHARE sales_share ADD ACCOUNTS = partner_reader;
-- Resource Monitorを設定してコストを制御
CREATE RESOURCE MONITOR reader_monitor
WITH CREDIT_QUOTA = 10
TRIGGERS
ON 80 PERCENT DO NOTIFY
ON 100 PERCENT DO SUSPEND;| 項目 | Reader Account | Full Account |
|---|---|---|
| Snowflakeアカウント | プロバイダーが作成 | コンシューマーが既に保有 |
| コンピュート費用 | プロバイダー負担 | コンシューマー負担 |
| ストレージ費用 | プロバイダー負担 | プロバイダー負担(元データ) |
| データの書き込み | 不可(読み取り専用) | 共有DBへの書き込みは不可 |
| 自前のテーブル作成 | 不可 | 可(自アカウント内) |
| 管理責任 | プロバイダー | コンシューマー |
Snowflake Marketplaceは、Data Sharingの仕組みを基盤として、データ製品を公開・検索・取得できるプラットフォームです。
| タイプ | 公開範囲 | 課金 | 用途 |
|---|---|---|---|
| Free Listing | 全Snowflakeユーザー | 無料 | オープンデータ・プロモーション |
| Paid Listing | 全Snowflakeユーザー | 有料(月額/従量) | データ商品の販売 |
| Personalized Listing | 指定アカウントのみ | 任意 | パートナー限定共有 |
Data Sharingでは通常のViewは共有できず、Secure Viewが必須です。Secure Viewではビュー定義(SQL文)がコンシューマーから隠蔽され、クエリオプティマイザの最適化も一部制限されてデータリーケージを防止します。
-- Secure Viewの作成
CREATE OR REPLACE SECURE VIEW sales_summary_v AS
SELECT
region,
product_category,
DATE_TRUNC('MONTH', sale_date) AS sale_month,
SUM(amount) AS total_amount,
COUNT(*) AS transaction_count
FROM sales_data
WHERE is_active = TRUE
GROUP BY 1, 2, 3;
-- ShareにSecure Viewを追加
GRANT SELECT ON VIEW sales_summary_v TO SHARE sales_share;Data Sharing
問題 1
Snowflake Secure Data Sharingに関して正しい記述はどれか?
正解: D
コンシューマーはShareから作成したデータベースに対して、GRANT IMPORTED PRIVILEGES ON DATABASE ... TO ROLE ... で自組織のロールにアクセスを付与します。Aはゼロコピーなのでコピーは作成されません。BのReader Accountのコンピュートはプロバイダー負担です。Cの通常ViewはShareに含められず、Secure Viewが必要です。
Data Sharingではデータのコピーが作成されますか?
いいえ。Snowflake Secure Data Sharingはゼロコピー共有の仕組みで、データの物理的なコピーを作成しません。プロバイダーが共有したオブジェクトのメタデータのみがコンシューマーに提供され、コンシューマーがクエリを実行すると、プロバイダーのストレージ上のデータを直接読み取ります。そのためストレージの二重消費は発生せず、データの鮮度も常にリアルタイムです。
Reader AccountとFull Accountの違いは何ですか?
Reader Account(リーダーアカウント)はSnowflakeアカウントを持たない外部組織にデータを共有するためにプロバイダーが作成する管理対象アカウントです。Reader Accountのコンピュートコスト(ウェアハウス利用料)はプロバイダーが負担します。Full Account(通常のSnowflakeアカウント)へのShareではコンシューマーが自身のウェアハウスを使用するため、コンピュートコストはコンシューマー負担です。
異なるクラウドプロバイダー間でData Sharingは可能ですか?
同一リージョン・同一クラウドプロバイダー内のShareは追加設定なしで可能です。異なるリージョンやクラウドプロバイダー(例: AWS → Azure)間でデータを共有するにはデータベースレプリケーションを設定する必要があります。Snowflake Marketplaceでのリスティング公開時もクロスリージョン配信のためにレプリケーション設定が必要になる場合があります。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Snowflake資格一覧|全11試験(SnowPro)の難易度・費用
Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...
Snowflake試験の難易度ランキング|全11資格を徹底比較
Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...
Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ
Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...
SnowPro Core試験完全解説|出題範囲・問題例・合格戦略
SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...
SnowPro Platform Associate完全解説|入門試験の攻略
SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...