
【Databricks】Delta Sharingを利用してデータを共有してみた
データ事業本部のueharaです。
今回は、DatabricksでDelta Sharingを利用してデータを共有してみたいと思います。
はじめに
Delta Sharingについて、Databricksの公式ドキュメントで以下のように説明されています。
Delta Sharingは、使用するコンピューティングプラットフォームに関係なく、他の組織との安全なデータ共有を行うために、Databricksによって開発されたオープンプロトコルです。
(引用元)
DatabricksでDelta Sharingを利用すると、 Databricks to Databricks や Databricks to 任意のコンピューティング でリソースの共有をすることができます。

(引用元)
Delta Sharingには「Delta Sharingサーバー」が必要であり、もちろん独自でDelta Sharingサーバーを立てることもできますが、Databricksに組み込まれているものを利用すれば特別用意する必要はありません。

(引用元)
独自でサーバー立てたい方は以下を参考にすると良いと思います。
また、内部的な仕組みは以下が参考になると思います。
ちなみに、Databricks to Databricks であればテーブルだけでなくノートブックやボリューム、モデルの共有を行うこともできます。
今回は Databricks to 任意のコンピューティング でデータの共有を試したいと思います。
前提
今回は以前作成した以下のテーブルに外部のコンピューティングリソースからアクセスしたいと思います。

なお、「任意のコンピューティング」はローカル環境のPythonで pandas を利用してデータを読み込むことを想定します。
プロバイダー(Databricks)側の作業
まずCatalogの設定から『Delta Sharing』を選択します。

画面が遷移したらorganizationのDelta Sharingの設定を確認します。

ここで『External delta sharing』は『Enabled』に設定しておきます。

recipientの作成
次にrecipient(受信者)を作成します。

『Recipient name』は任意の値を設定します。私は test_recipient としました。
『Recipient type』は今回は任意のコンピューティングのため『Open』を設定します。
認証はトークンで有効期限は14日としました。

作成が完了すると認証ファイルを受け取るためのリンクが発行されるので、どこかに控えておきます。

データ共有
次にデータ共有を行います。
Delta Sharingの画面から『Share data』を選択します。

『Share name』は任意で設定します。私は test_sharing としました。

次に共有するテーブルを選択します。

Notebookの共有は特に設定しません。

最後にrecipientsの設定です。
先程作成したrecipientを設定して『Share data』を選択します。

以下のように共有が作成されていればプロバイダー側の設定は完了です。

受信者側の作業
プロバイダー側の設定でrecipient(受信者)の作成時に発行されたリンクにアクセスすると、以下のようなCredential Fileをダウンロードすることができます。

『Donwload Credential File』ボタンを押下すると config.share がダウンロードされます。
shareファイルには bearerToken や endpoint といった情報が含まれるため、取り扱いにはご注意下さい。
受信者側はこれで準備完了です。
共有データにアクセスしてみた
※以下は受信者目線での作業となります。
まず、 delta-sharing パッケージをインストールします。
$ pip install delta-sharing
先にダウンロードした config.share と同じ階層に test.py を作成し、以下のように記述します。
import delta_sharing
# shareファイルのパスを指定
share_file_path = "config.share"
# Delta Sharingクライアントの初期化
client = delta_sharing.SharingClient(share_file_path)
# 共有テーブルにアクセスするためのURLを作成
# 形式: <file-path>#<share-name>.<schema-name>.<table-name>
table_url = f"{share_file_path}#test_sharing.default.sample_data_delta"
# データをpandasデータフレームとして読み込む
df = delta_sharing.load_as_pandas(table_url)
# データを確認
print(df.head())
上記Pythonスクリプトを実行したところ、以下の通りデータへのアクセスが確認できました。

最後に
今回は、DatabricksでDelta Sharingを利用してデータを共有してみました。
非常に簡単かつセキュアにデータを共有できるため、データの提供者と利用者でのコラボレーションを促進する良い機能だと感じました。
また、今回は1テーブルを1受信者に共有しただけですが、様々なチーム・利用者が絡み複雑になってくると共有データのガバナンスを一元管理できるのも利点になると思います。
参考になりましたら幸いです。










