Snowflake のデータ共有とマーケットプレイス:Data Sharing、Secure View、Marketplace

この記事について

Snowflake の最大の差別化ポイントの一つがデータ共有機能である。データのコピーなしにリアルタイムで他のアカウントとデータを共有できる。この記事では Data Sharing の仕組みと Marketplace を整理する。

1. 従来のデータ共有の問題

従来の方法:
  1. データをエクスポート(CSV / Parquet)
  2. S3 / FTP に配置
  3. 相手がダウンロード
  4. 相手がインポート

問題:
  - データのコピーが増える → ストレージコスト、整合性の問題
  - 鮮度が落ちる → エクスポート時点のスナップショット
  - セキュリティ → ファイルが流出するリスク
  - 運用負荷 → パイプラインの構築・監視が必要

2. Snowflake Data Sharing

2-1. 仕組み

Provider Account(データ提供者)
  │
  │ SHARE オブジェクトを作成
  │ → メタデータだけを共有(データのコピーなし)
  │
  ▼
Consumer Account(データ利用者)
  │
  │ SHARE から読み取り専用データベースを作成
  │ → Provider のストレージ上のデータを直接参照
  │
  ▼
  SELECT * FROM shared_db.sales;
  → Provider のデータをリアルタイムで参照

ポイント: – データのコピーは発生しない(ストレージは Provider のまま) – Consumer は常に最新のデータを参照 – Provider がアクセスを取り消せば即座にアクセス不可 – Consumer のクエリコストは Consumer が負担

2-2. 設定方法

-- Provider 側
CREATE SHARE sales_share;
GRANT USAGE ON DATABASE sales_db TO SHARE sales_share;
GRANT USAGE ON SCHEMA sales_db.public TO SHARE sales_share;
GRANT SELECT ON TABLE sales_db.public.orders TO SHARE sales_share;
ALTER SHARE sales_share ADD ACCOUNTS = consumer_account_id;

-- Consumer 側
CREATE DATABASE shared_sales FROM SHARE provider_account.sales_share;
SELECT * FROM shared_sales.public.orders;

2-3. Secure View

共有するデータの一部を隠したい場合、Secure View を使う。

-- Provider 側:PII を除外した View を作成
CREATE SECURE VIEW sales_db.public.orders_safe AS
SELECT order_id, date, amount, region
FROM sales_db.public.orders;
-- → email, phone などの PII カラムは含めない

-- この View を SHARE に追加
GRANT SELECT ON VIEW sales_db.public.orders_safe TO SHARE sales_share;

Secure View の特徴: – View の定義(SQL)が Consumer に見えない – クエリ最適化が制限される(定義を隠すため) – 行レベルフィルタも可能

2-4. Data Sharing の種類

種類 説明 用途
Direct Share 特定のアカウントに直接共有 グループ会社間、パートナー
Listing(Private) 招待制で共有 限定的なデータ提供
Listing(Public) Marketplace で公開 データの販売・無料提供

3. Snowflake Marketplace

3-1. 概要

Snowflake Marketplace はデータの「App Store」。サードパーティのデータセットを Snowflake アカウントに直接取り込める。

Marketplace:
  ├── 無料データ
  │   ├── COVID-19 データ(Starschema)
  │   ├── 天気データ(Weather Source)
  │   └── 地理データ(SafeGraph)
  │
  ├── 有料データ
  │   ├── 金融市場データ(FactSet)
  │   ├── 消費者行動データ(Experian)
  │   └── 企業情報(Dun & Bradstreet)
  │
  └── データアプリケーション
      ├── セキュリティ分析
      └── マーケティング分析

3-2. 利用方法

-- Marketplace からデータセットを取得(UI で「Get」をクリック)
-- → 読み取り専用データベースが自動作成される

-- 即座にクエリ可能
SELECT * FROM weather_data.public.daily_temperatures
WHERE city = 'Tokyo' AND date >= '2024-01-01';

3-3. Databricks との比較

観点 Snowflake Marketplace Delta Sharing
プロトコル Snowflake 独自 オープンプロトコル(OSS)
利用条件 Snowflake アカウント必須 任意のクライアント(pandas, Spark 等)
マーケットプレイス 成熟(数千のデータセット) Databricks Marketplace(発展途上)
データコピー なし なし
クロスクラウド Snowflake 同士のみ クラウド非依存

4. Snowflake のセキュリティ

4-1. 認証・認可

機能 説明
MFA 多要素認証
SSO SAML 2.0 / OAuth
Key Pair 認証 サービスアカウント向け
RBAC ロールベースアクセス制御
DAC 任意アクセス制御(GRANT/REVOKE)

4-2. ロール階層

ACCOUNTADMIN(最上位)
  ├── SECURITYADMIN(ユーザー・ロール管理)
  ├── SYSADMIN(Warehouse・DB 管理)
  │    ├── カスタムロール: ETL_ROLE
  │    ├── カスタムロール: ANALYST_ROLE
  │    └── カスタムロール: DS_ROLE
  └── PUBLIC(全ユーザーに自動付与)

4-3. データ保護

機能 説明
暗号化 常時暗号化(AES-256)。転送中も保存時も
Dynamic Data Masking クエリ結果のカラムを動的にマスキング
Row Access Policy 行レベルのアクセス制御
External Tokenization 外部トークナイゼーションサービスとの統合
Network Policy IP ホワイトリスト
Private Link パブリックインターネットを経由しない接続

4-4. Dynamic Data Masking

-- マスキングポリシーを作成
CREATE MASKING POLICY email_mask AS (val STRING)
RETURNS STRING ->
  CASE
    WHEN CURRENT_ROLE() IN ('ADMIN_ROLE') THEN val
    ELSE '***@***.com'
  END;

-- テーブルに適用
ALTER TABLE customers MODIFY COLUMN email SET MASKING POLICY email_mask;

-- ADMIN_ROLE: [email protected] が見える
-- ANALYST_ROLE: ***@***.com が見える

5. Snowpipe:継続的なデータ取り込み

5-1. 仕組み

S3 / Azure Blob / GCS にファイルが到着すると、自動的に Snowflake テーブルにロードする。

[アプリ / Firehose] → [S3] → [S3 Event通知] → [Snowpipe] → [Snowflake テーブル]
                                                  │
                                            サーバーレス
                                            (Warehouse 不要)

5-2. COPY vs Snowpipe

COPY INTO Snowpipe
実行 手動 / スケジュール 自動(イベント駆動)
コンピュート Virtual Warehouse サーバーレス(Snowflake 管理)
レイテンシ バッチ(分〜時間) ニアリアルタイム(分)
用途 大量データの一括ロード 継続的な取り込み

5-3. Kinesis / Structured Streaming との比較

観点 Snowpipe Kinesis Firehose Structured Streaming
レイテンシ 60秒〜 秒〜分
変換処理 なし(ロードのみ) Lambda で変換可能 Spark で任意の変換
管理 サーバーレス サーバーレス クラスタ管理
用途 Snowflake への取り込み S3 への配信 複雑なストリーミング ETL

Snowpipe は「取り込み」に特化。変換処理は Snowflake 内で SQL / Task で行う。

6. Snowflake の課題と制約

課題 説明
ベンダーロックイン データが Snowflake 内部形式。エクスポートが必要
非構造化データ 対応しているが、Databricks ほど得意ではない
ML / AI Snowpark ML は発展途上。Databricks の MLflow に劣る
ストリーミング Snowpipe は取り込みのみ。複雑なストリーム処理は不可
コスト 使い方を誤ると高額になる(Warehouse の停止忘れ等)
オープン性 プロプライエタリ。Delta Lake / Iceberg のようなOSSではない

Iceberg Tables(対策)

Snowflake は Apache Iceberg フォーマットのサポートを追加し、オープン性の課題に対応しつつある。

-- Iceberg テーブルの作成
CREATE ICEBERG TABLE sales_iceberg (...)
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_s3_volume'
  BASE_LOCATION = 'sales/';
-- → データが S3 上に Iceberg フォーマットで保存される
-- → Spark 等の外部エンジンからも直接読み取り可能

7. まとめ

機能 Snowflake の強み
Data Sharing コピーなしのリアルタイム共有。最大の差別化
Marketplace データの App Store。数千のデータセット
セキュリティ Dynamic Masking、Row Access Policy、常時暗号化
Snowpipe サーバーレスの継続的取り込み
Iceberg Tables オープン性への対応(進行中)

参考文献

  • Snowflake. “Secure Data Sharing.” https://docs.snowflake.com/en/user-guide/data-sharing-intro
  • Snowflake. “Snowflake Marketplace.” https://www.snowflake.com/en/data-cloud/marketplace/
  • Snowflake. “Snowpipe.” https://docs.snowflake.com/en/user-guide/data-load-snowpipe-intro
  • Snowflake. “Dynamic Data Masking.” https://docs.snowflake.com/en/user-guide/security-column-ddm-intro

コメントする