1.背景

  • 大規模な組織や企業グループにおいては、データは部門ごと(Data Engineering, Data Science, Business Intelligenceなど)に個別のワークスペースで一般的に管理されます。
  • これらのチームは共通のデータソースへアクセスする必要がありますが、データの抽出やファイル送付、コピーの作成といった方法では、データの重複、古い情報の利用、アクセス権限の管理不備といった問題が発生しやすくなります。
    • 解決策:Databricksのワークスペース間でのDelta Sharingを活用することで、データを物理的に移動させることなく、安全かつ即時に、かつ制御された方法で元データセットを共有することが可能となります。
  • Aチーム (データサイエンス) は、トレーニングデータやモデルの結果をAワークスペースに保存しています。
  • Bチーム (BIチーム) は、このデータをリアルタイムで分析・レポート作成するために参照する必要があります。
    → AチームはDelta Sharingを利用して、必要なテーブルをBチームに直接共有します。
    → Bチームはデータを複製することなく、常に最新のデータに安全に(読み取り専用で)アクセスすることができます。

2.Delta Sharingとは

  • Delta Sharingは、 Databricksが開発したオープンソースのツールであり、Azure Databricksからファイルのコピーや送付を行うことなく、データを直接共有できる仕組みです。

  • データは Delta LakeのフォーマットであるDeltaテーブルとして保存されており、Python、Power BI、他のDatabricksワークスペースなど、さまざまなツールからアクセスすることが可能です。

3.Delta Sharingの仕組み

以下は、Azure DatabricksにおけるDelta Sharingの主なコンセプトです。

プロバイダーとは、Unity Catalog内で元データを保有し、そのデータをDelta Sharingを通じて外部に共有したい組織またはユーザーを指します。

  • 主な役割:
    • 共有の作成:共有したいテーブルをまとめて1つの共有オブジェクトを作成する。
    • 受信者の作成:データの受信者を定義し、共有オブジェクトへのアクセス権を付与する。
    • アクセス制御:権限の取り消しやアクセス範囲の制限も随時可能。

受信者とは、プロバイダーによって共有されたデータにアクセスする権限を持つ組織またはユーザーです。

  • 受け取り方法:
    • プロバイダーが受信者オブジェクトを作成し、トークンまたはプロファルファイル(共有タイプにより異なる)を含む。
    • 受信者はこのファイルを使って、データを複製・移動することなく、共有オブジェクトから共有されたデータにアクセスする。

共有とは、Unity Catalog内に定義されたオブジェクトで、外部と共有したいDeltaテーブル群を含みます。

  • 機能:
    • データ共有のための「パッケージ」のような存在であり、テーブルを直共有するのではなく、まず共有オブジェクトにテーブルをまとめ、その共有オブジェクトを受取先に共有する。

※注意点:

  • データは、プロバイダーの元の保存場所にそのまま残ります。
  • 受信者は、必要なアクセス権限と接続情報がある場合のみ、データのクエリが可能です。

 

Delta Sharing を使用してデータを共有するには、次の 3 つの方法があります。

  1. DatabricksからDatabricksへの共有プロトコル:
    • Unity Catalogが有効化されたDatabricksワークスペース間でデータ共有する方法です。クラウドプロバイダー(AWS、Azure、GCP)やアカウントの違いに関係なく利用可能です。
  2. Databricksオープン共有プロトコル:
    • Unity Catalogを有効にしたDatabricksワークスペースから、Databricks以外の任意のプラットフォームのユーザーに対して、テーブル形式のデータ共有を可能にするオープンなプロトコルです。
  3. オープンソースのDelta Sharingサーバーのカスタマー マネージド実装:
    • オープンソースのDelta Sharingサーバーを使用して、Databricksに限定されず、任意のプラットフォーム間でデータを共有する方法です。

※このガイドでは、Delta Sharingに触れるために、DatabricksからDatabricksへの共有プロトコルのケースをデモとして実施します。

4.Delta Sharingを用いたDatabricks間のデータ共有

全体フロー

  1. データ受信者は、共有データへアクセスする際に使用するDatabricksワークスペースに関連付けられたUnity Catalogメタストアの一意の共有識別子を、データ提供者に提供します。この識別子は、受信者(ユーザーまたはユーザーグループ)が共有データへ安全にアクセスするために必要です。
  2. データ提供者は、自身のUnity Catalogメタストア内に共有オブジェクトを作成します。このオブジェクトには名前が付けられ、メタストアに登録されているテーブル、ビュー、ボリューム、ノートブックなどのリソースをまとめて含めることができます。
  3. データ提供者は、自身の Unity Catalog メタストア内に受信者オブジェクトを作成します。このオブジェクトは、共有データにアクセスするユーザーまたはユーザーグループを表し、あわせてそのユーザーやグループが使用するDatabricksワークスペースに関連付けられたUnity Catalogメタストアの共有識別子も保持します。この共有識別子は、安全な接続を確立するための重要な要素です。
  4. データ提供者が、受信者に対して共有オブジェクトへのアクセス権限を付与します。
  5. 共有オブジェクトは受信者側のDatabricksワークスペースに表示され、Catalog Explorer、Databricks CLI、Azure Databricksのノートブック上のSQLコマンド、またはDatabricksのSQLエディタなどからアクセスできるようになります。

このデモンストレーションを実施するための前提条件は次のようです。

  • 以下の2つのAzure Databricksワークスペースが用意されていること
    • Aワークスペース (プロバイダー):データを保持する場所
    • Bワークスペース (受信者):データを受け取る場所
  • Aワークスペース (プロバイダー)で以下の権限が付与されていること
    • CREATE SHARE:共有の作成
    • CREATE RECIPIENT: 受信者の作成
    • SET SHARE PERMISSION: アクセス権限付与
    • USE SHARE: 共有の使用
    • USE RECIPIENT: 受信者の使用
    • SELECT: 共有テーブルのクエリ実行
    • USE CATALOG: テーブルが含まれるカタログへのアクセス
    • USE SCHEMA: テーブルが含まれるスキーマへのアクセス
  • Bワークスペース (受信者) で以下の権限が付与されていること
    • USE PROVIDER: 共有データの受信
    • CREATE CATALOG: 受信者カタログの作成

5.デモンストレーショの実行

ワークスペースB (データを受け取るワークスペース)では、

  • メニューの「カタログ」を開き、「Delta Sharing」を選択します。

  • Delta Sharingの名前をクリックします。

  • 「共有識別子をコピー」を選択し、データ提供者に送付します。

Aワークスペース (データを保持するワークスペース)では、

  • メニューの「カタログ」を開き、「Delta Sharing」を選択します。

  • 「自分が共有」タブをクリックし、「受信者」項目を選択します。
  • それから、「新たな受信者」をクリックします

  • 「受信者名」項目に名前を入力します。 (例: test_recipient)
  • 「共有識別子(Databricksの受信者のみ)」項目の欄に、前のステップでBワークスペースから受け取った共有IDを入力します。
  • 「作成」ボタンをクリックします。

  • Delta Sharingの画面に戻り、「データを共有」を選択します。

  • 「共有名」項目に名前を入力します。(例: test_delta_sharing).
  • 「保存して続行」ボタンをクリックします。

  • 「データセットを追加」を選択し、共有した対象のスキーマをクリックします。

  • スキーマ内で対象のテーブルを選択します。
  • 「選択」ボタンをクリックし、追加します。

  • 「保存して続行」ボタンをクリックします。

  • 「保存して続行」ボタンをクリックし、ノートブックに共有をスキップします。

  • 前のステップで作成した受信者を選択し、「データを共有」ボタンをクリックして完了します。

Bワークスペース (データを受け取るワークスペース)では、

  • 「カタログ」の画面にアクセスします。右上に「+」アイコンをクリックして共有データを受け取るためのスキーマを作成します。

  • 続けて、「+」アイコンをクリックし、「カタログを作成」を選択して共有データを受け取るカタログを作成します。

  • 「カタログ名」項目に名前を入力します。

: test_recipient_catalog

  • そして、「タイプ」項目で「共有」を選択します。

  • 「プロバイダー」項目のプルダウンでAワークスペースから共有されたプロバイダーを選択します。

  • 「共有」項目に対象の共有オブジェクトを選択し、その後「作成」ボタンをクリックして完了します。

  • 共有されたスキーマは、作成したカタログ内の「受け取ったDelta共有」セクションに表示されます。

  • Bワークスペースからのデータクエリが正常に実行され、共有データへのアクセスが成功しました。

: SELECT * FROM test_recipient_catalog.test_delta_schema.housing

6.まとめ

Azure Databricksにおける【Delta Sharing】を活用し、データを効率的に共有する方法について説明しました。

今回の記事が少しでも皆さんの新しい知識や業務のご参考になれば幸いです。双日テックイノベーションでは、Azure Databricksの環境構築パッケージを用意しています。Azure DatabricksやAzure活用、マイクロソフト製品の活用についてご相談事がありましたら是非お問い合わせください!

・Azure Databricks連載記事のまとめはこちら

お問い合わせはこちら


この記事を読んだ方へのオススメコンテンツはこちら


この記事を書いた人

i-luannt