Delta Sharingは、組織間・プラットフォーム間でDelta Lakeテーブルを安全に共有するための世界初のオープンプロトコルです。Linux Foundation傘下で開発されており、REST APIベースのシンプルな仕組みで、データのコピーを一切作成せずにリアルタイムの共有を実現します。 プロバイダー(データ提供者)がUnity CatalogでShareオブジェクトを作成するだけで、レシピエント(受信者)はDatabricksを使っていなくても Pandas・Spark・Power BI・Tableau・dbt など任意のツールからデータにアクセスできます。
この記事では、Delta Sharingのアーキテクチャ・Unity Catalog統合・オープン共有とDatabricks-to-Databricks共有の違い・ 共有オブジェクトの種類・Change Data Feed対応・セキュリティモデル・Snowflake Data Sharingとの比較まで網羅します。Data Engineer Associate(DEA)試験のData Governanceドメインで問われるポイントも整理しています。
Delta Sharingは、従来のデータ共有方法(ファイルコピー・SFTP転送・カスタムAPI構築・ETLパイプライン)が抱えていた 「データの鮮度の低さ」「運用負荷の高さ」「セキュリティ管理の煩雑さ」を根本的に解決するために設計されました。 プロトコルの核心はゼロコピー共有——プロバイダーのクラウドストレージ上のデータに対して、レシピエントが直接アクセスする方式です。
Delta Sharingは、Provider(プロバイダー)・Share・Recipient(レシピエント)の3つのコア概念と、 Delta Sharingサーバー(認証・認可・ディスカバリー)で構成されます。 DatabricksのマネージドDelta SharingではUnity CatalogがSharingサーバーの役割を担います。
┌─────────────────────────────────────────────────────────┐
│ Provider(プロバイダー) │
│ │
│ Unity Catalog │
│ ├── Share: customer_data_share │
│ │ ├── Schema: sales │
│ │ │ ├── Table: orders (全パーティション) │
│ │ │ └── Table: customers (region='APAC'のみ) │
│ │ └── Schema: analytics │
│ │ └── View: daily_summary │
│ │ │
│ ├── Recipient: partner_a ──→ Token / D2D認証 │
│ └── Recipient: partner_b ──→ Token / D2D認証 │
│ │
│ Cloud Storage (S3/ADLS/GCS) │
│ └── Delta Lake files (Parquet + _delta_log) │
└───────────────┬─────────────────────────────────────────┘
│ REST API (HTTPS + Bearer Token)
│ 短期間の署名付きURL発行
▼
┌──────────────────────────────────────────────────────────┐
│ Recipient(レシピエント) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌────────┐ ┌──────────────┐ │
│ │ Pandas │ │ Spark │ │Power BI│ │ Databricks │ │
│ │ (Python) │ │ (OSS) │ │Tableau │ │ ワークスペース │ │
│ └──────────┘ └──────────┘ └────────┘ └──────────────┘ │
│ ※ Databricksライセンス不要(オープン共有の場合) │
└──────────────────────────────────────────────────────────┘データフローの流れは次のとおりです。①レシピエントが認証トークン付きでDelta Sharingサーバーにリクエスト → ②サーバーが認証・認可を検証し、対象ファイルの短期間署名付きURL(Pre-signed URL)を返却 → ③レシピエントが署名付きURLでクラウドストレージから直接Parquetファイルを読み取り。 プロバイダーのストレージに直接アクセスするため、Sharingサーバーがボトルネックにならず、大量データでもスケーラブルに動作します。
DatabricksのマネージドDelta SharingはUnity Catalogにネイティブ統合されています。 Share・Recipient・ProviderはすべてUnity Catalogのセキュアブルオブジェクトとして管理され、 GRANT/REVOKEによる権限管理・System Tablesによる監査ログ・データリネージがそのまま適用されます。
-- ========================================
-- 1. Shareオブジェクトの作成
-- ========================================
CREATE SHARE IF NOT EXISTS customer_data_share
COMMENT 'パートナー企業向け顧客データ共有';
-- ========================================
-- 2. Shareにテーブルを追加
-- ========================================
-- テーブル全体を共有
ALTER SHARE customer_data_share
ADD TABLE prod_catalog.sales.customers;
-- パーティションフィルタで部分共有(APAC地域のみ)
ALTER SHARE customer_data_share
ADD TABLE prod_catalog.sales.orders
PARTITION (region = 'APAC');
-- Change Data Feed(CDC履歴)付きで共有
ALTER SHARE customer_data_share
ADD TABLE prod_catalog.sales.transactions
WITH HISTORY;
-- ========================================
-- 3. レシピエントの作成
-- ========================================
-- オープン共有(トークンベース)
CREATE RECIPIENT IF NOT EXISTS partner_company_a
COMMENT 'Partner Company A - APAC region';
-- Databricks-to-Databricks共有
CREATE RECIPIENT partner_company_b
USING ID 'aws:us-west-2:workspace-id-12345';
-- ========================================
-- 4. レシピエントにShareへのアクセスを付与
-- ========================================
GRANT SELECT ON SHARE customer_data_share
TO RECIPIENT partner_company_a;
-- ========================================
-- 5. 共有状況の確認
-- ========================================
SHOW ALL IN SHARE customer_data_share;
SHOW GRANTS ON SHARE customer_data_share;
DESCRIBE RECIPIENT partner_company_a;オープン共有のレシピエントは、プロバイダーから受け取ったプロファイルファイル(.shareファイル)を使ってデータにアクセスします。プロファイルファイルにはSharingサーバーのエンドポイントURL、 ベアラートークン、有効期限が含まれています。
# ─── プロファイルファイル(config.share)の構造 ───
# {
# "shareCredentialsVersion": 1,
# "endpoint": "https://<workspace>.cloud.databricks.com/api/2.0/delta-sharing/",
# "bearerToken": "xxxxxxxxxxxxx",
# "expirationTime": "2026-12-31T23:59:59Z"
# }
import delta_sharing
profile_file = "/path/to/config.share"
# 共有テーブルの一覧を取得
client = delta_sharing.SharingClient(profile_file)
shares = client.list_shares()
for share in shares:
schemas = client.list_schemas(share)
for schema in schemas:
tables = client.list_tables(schema)
print(f"{share.name}.{schema.name}: {[t.name for t in tables]}")
# Pandas DataFrameとして読み込み
df_pandas = delta_sharing.load_as_pandas(
f"{profile_file}#customer_data_share.sales.customers"
)
# Spark DataFrameとして読み込み
df_spark = delta_sharing.load_as_spark(
f"{profile_file}#customer_data_share.sales.orders"
)
# Change Data Feed(CDC履歴)の読み込み
cdf = delta_sharing.load_table_changes_as_pandas(
f"{profile_file}#customer_data_share.sales.transactions",
starting_version=0
)Delta Sharingには2つの共有モードがあります。 レシピエントの環境やガバナンス要件に応じて使い分けます。
| 比較項目 | オープン共有 | Databricks-to-Databricks(D2D)共有 |
|---|---|---|
| レシピエント要件 | 任意のクライアント(Pandas, Power BI, Snowflakeなど) | Databricksワークスペース必須 |
| 認証方式 | ベアラートークン(プロファイルファイル) | Unity Catalogのクロスワークスペース認証 |
| トークン管理 | トークンの発行・配布・ローテーションが必要 | トークン管理不要(自動認証) |
| レシピエント側の権限制御 | なし(トークン保持者が全アクセス可能) | Unity CatalogのGRANT/REVOKEが適用される |
| 行フィルタ・列マスク | 非対応 | 対応(レシピエント側でも動的マスク適用) |
| 監査ログ | プロバイダー側のみ | プロバイダー・レシピエント双方で記録 |
| 共有可能オブジェクト | テーブル、パーティション | テーブル、ビュー、ノートブック出力、Volume |
| セットアップ | CREATE RECIPIENT(トークン発行) | CREATE RECIPIENT USING ID 'cloud:region:workspace-id' |
Delta Sharingで共有可能なオブジェクトはテーブルだけではありません。Unity Catalogと統合されたDatabricks環境では、以下のオブジェクトを共有できます。
| オブジェクト | 共有モード | 用途・備考 |
|---|---|---|
| Delta Lakeテーブル | オープン / D2D | 全パーティションまたはPARTITION句で部分共有可能 |
| ビュー | D2Dのみ | プロバイダー側でフィルタ・集計・マスクを適用した結果を共有 |
| ノートブック出力 | D2Dのみ | 分析結果のビジュアライゼーション・レポートを共有 |
| Volume | D2Dのみ | CSV・JSON・画像・モデルアーティファクトなどのファイルを共有 |
| Change Data Feed | オープン / D2D | WITH HISTORYで追加。レシピエントがCDC差分を取得可能 |
-- ビューの共有(D2Dのみ)
ALTER SHARE customer_data_share
ADD VIEW prod_catalog.analytics.daily_revenue_summary;
-- Volumeの共有(D2Dのみ)
ALTER SHARE customer_data_share
ADD VOLUME prod_catalog.raw.model_artifacts;
-- ノートブック出力の共有
ALTER SHARE customer_data_share
ADD NOTEBOOK prod_catalog.reports.quarterly_analysis;
-- テーブルからオブジェクトを削除
ALTER SHARE customer_data_share
REMOVE TABLE prod_catalog.sales.deprecated_table;Delta LakeのChange Data Feed(CDF)をDelta Sharing経由で共有すると、 レシピエントが全データの再読み込みをせずに、前回以降の差分(INSERT/UPDATE/DELETE)のみを取得できます。 大規模テーブルのインクリメンタル同期やリアルタイムに近いデータパイプラインの構築に有効です。
-- プロバイダー側: CDFを有効化してShareに追加
ALTER TABLE prod_catalog.sales.transactions
SET TBLPROPERTIES (delta.enableChangeDataFeed = true);
ALTER SHARE customer_data_share
ADD TABLE prod_catalog.sales.transactions
WITH HISTORY;
-- レシピエント側(Python): 差分データの取得
import delta_sharing
cdf = delta_sharing.load_table_changes_as_pandas(
"/path/to/config.share#customer_data_share.sales.transactions",
starting_version=5, # バージョン5以降の変更
ending_version=10 # バージョン10まで
)
# CDFの各行には _change_type カラムが含まれる
# _change_type: "insert" / "update_preimage" / "update_postimage" / "delete"
print(cdf[["_change_type", "_commit_version", "_commit_timestamp"]].head())Delta Sharingは複数レイヤーのセキュリティモデルで保護されています。 Unity Catalogの権限体系がそのまま適用されるため、既存のガバナンスポリシーとの一貫性が保たれます。
system.access.auditに記録。 「誰が・いつ・どのShareの・どのテーブルに・何回アクセスしたか」をSQLでクエリ可能-- ========================================
-- Share関連の権限管理
-- ========================================
-- USE SHARE: Shareオブジェクトの詳細を表示する権限
GRANT USE SHARE ON METASTORE TO data_governors;
-- SET SHARE PERMISSION: Shareの権限を他ユーザーに委譲できる権限
GRANT SET SHARE PERMISSION ON METASTORE TO share_admins;
-- CREATE SHARE: 新しいShareを作成する権限
GRANT CREATE SHARE ON METASTORE TO data_engineers;
-- CREATE RECIPIENT: レシピエントを作成する権限
GRANT CREATE RECIPIENT ON METASTORE TO data_engineers;
-- レシピエントのトークンをローテーション(再発行)
ALTER RECIPIENT partner_company_a ROTATE TOKEN;
-- レシピエントにIPアクセスリストを設定
ALTER RECIPIENT partner_company_a
SET IP_ACCESS_LIST = ('203.0.113.0/24', '198.51.100.0/24');
-- レシピエントの詳細・アクセス状況を確認
DESCRIBE RECIPIENT partner_company_a;
SHOW GRANTS TO RECIPIENT partner_company_a;SnowflakeもSecure Data Sharing機能でクロスアカウントのデータ共有をサポートしています。 Delta SharingとSnowflake Data Sharingの設計思想・制約の違いを整理します。
| 比較項目 | Delta Sharing | Snowflake Data Sharing |
|---|---|---|
| プロトコル | オープンソース(Apache 2.0) | Snowflake独自 |
| レシピエント要件 | 任意のツール(Databricks不要) | Snowflakeアカウント必須(リーダーアカウントで代替可能) |
| データ形式 | Delta Lake(Parquet + トランザクションログ) | Snowflakeの内部マイクロパーティション |
| データコピー | ゼロコピー(プロバイダーのストレージを直接読み取り) | ゼロコピー(同一リージョン)/ レプリケーション(異リージョン) |
| クロスクラウド共有 | クロスクラウド対応(REST API経由) | レプリケーションが必要(コスト発生) |
| マーケットプレイス | Databricks Marketplace | Snowflake Marketplace |
| ガバナンス統合 | Unity Catalog | Snowflakeのアクセス制御(RBAC) |
Data Engineer Associate(DEA)試験では、Data Governanceドメイン(約17%)でDelta Sharingが出題されます。 Unity Catalogのセクションと密接に関連するため、Share・Recipient・権限管理をセットで理解しておく必要があります。
| 出題テーマ | 押さえるべきポイント |
|---|---|
| オープンプロトコル | OSS・ベンダーロックインなし。レシピエントにDatabricksは不要 |
| ゼロコピー共有 | データの複製は作成されない。プロバイダーのストレージから直接読み取り |
| SQL構文 | CREATE SHARE → ALTER SHARE ADD TABLE → CREATE RECIPIENT → GRANT SELECT ON SHARE TO RECIPIENT |
| パーティション共有 | ALTER SHARE ... ADD TABLE ... PARTITION (col = 'value') でテーブルの部分共有 |
| オープン共有 vs D2D | オープン=トークン認証・任意ツール、D2D=Unity Catalog認証・きめ細かいガバナンス |
| 権限 | USE SHARE / SET SHARE PERMISSION / CREATE SHARE / CREATE RECIPIENTの4種類 |
| CDF共有 | WITH HISTORYでCDC差分を共有。レシピエントがインクリメンタルに更新データを取得 |
DEA - Data Governance / Delta Sharing
問題 1
データエンジニアが、外部パートナー企業(Databricksを使用していない)に対して、顧客テーブルのAPACリージョンのデータのみを安全に共有したいと考えています。この要件を満たすために実行すべきSQL文の組み合わせとして正しいものはどれですか?
正解: A
Delta Sharingでパーティションフィルタリングされた共有を設定する正しい手順は、(1) CREATE SHAREでShareオブジェクトを作成、(2) ALTER SHARE ADD TABLE ... PARTITION (region = 'APAC')で特定パーティションのみを追加、(3) CREATE RECIPIENTでレシピエントを作成、(4) GRANT SELECT ON SHARE ... TO RECIPIENTでアクセスを付与、の4ステップです。選択肢Bはテーブルへの直接GRANTであり、外部パートナーへのDelta Sharing共有になりません。選択肢Cのビュー共有はDatabricks-to-Databricksモードでのみ有効で、非Databricksユーザーには使えません。選択肢Dのテーブルプロパティ構文は存在しません。
Delta Sharingは無料で使えますか?
Delta Sharingプロトコル自体はApache 2.0ライセンスのオープンソースであり、OSSのDelta Sharingサーバーを自分でホストすれば無料です。DatabricksのマネージドDelta Sharing(Unity Catalog統合)はDatabricksの有料機能ですが、レシピエント側はDatabricksライセンス不要で、Pandas・Spark・Power BI・Tableauなど任意のクライアントからデータにアクセスできます。
オープン共有とDatabricks-to-Databricks共有のどちらを使うべきですか?
レシピエントがDatabricksを利用している場合はDatabricks-to-Databricks共有を推奨します。Unity Catalogのきめ細かいアクセス制御(行フィルタ・列マスク)がレシピエント側でも適用され、トークン管理が不要になり、監査ログも双方のワークスペースで記録されます。レシピエントが非Databricks環境(Snowflake・Power BI・Pandasなど)の場合はオープン共有を使います。
Delta SharingはDEA試験でどのように出題されますか?
Data Engineer Associate(DEA)試験ではData Governanceドメイン(出題比率17%)で出題されます。頻出ポイントは①オープンプロトコルであること ②データコピーが発生しないこと ③レシピエントにDatabricksが不要であること ④CREATE SHARE / ALTER SHARE ADD TABLE / CREATE RECIPIENTのSQL構文 ⑤パーティションフィルタリングによる部分共有です。Unity Catalogとの統合の文脈で問われることが多いため、GRANT SELECT ON SHARE ... TO RECIPIENT構文もあわせて押さえてください。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...