この記事について
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