はじめに
Delta Sharingを利用するとDatabricks to Databricksもしくは Databricks to Open(DeltaSharing Client)間でデータ共有が行えるようになります。共有といってもReadOnlyなので一方通行ですが、他のデータブリックス環境で作成されたデータを、どのデータブリックス環境(もちろん許可された)からアクセス出来るようになったら、データ活用の幅が広がる気がします。
今回は以下のように、Azure Databricks上のUnityCatalogテーブルを、AWS Databricksから参照できるように設定したいと思います。
準備
以下のセットアップが完了している必要があります。
- Unity Catalogが利用できる
- DeltaSharingが有効になっている
- 共有するメタストアに対して管理権限を持っているもしくはメタストアに対して特権(CREATE_SHARE, CREATE_RECIPIENT, CREATE_PROVIDER)を持っている
詳細なDeltaSharing要件についてはマニュアルもご覧ください。
1. Delta Sharing 受信者の登録
まずはData Provider側(今回はAzure側)に、受信者情報を登録します。
登録するためには、受信側(今回はAWS側)の共有識別子が必要になります。
1-1. 受信側ワークスペースから、共有識別子を取得
受信側のワークスペースのデータエクスプローラ画面から、「Delta Sharing」-「自分と共有」を選択し、共有識別子をコピーします。
1-2. 共有側ワークスペースで受信者情報を作成する
共有する側のワークスペースのデータエクスプローラから、「Delta Sharing」-「自分が共有」を選択し、右上の「新たな受信者」をクリックして作成します。
2. 共有オブジェクトの作成
2-1. 共有するテーブルを指定し共有オブジェクトを作成します。
同じくデータエクスプローラ(共有する側)のDelta Sharingメニューから、「自分が共有」を選択し、右上にある「データを共有」をクリックします。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2206424%2Fb0d46706-202c-1d41-d25a-cedcb467ce07.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=9c4f8006eee724d2dd5592ae017b1886)
2-2. オブジェクトが作成できたら、次に共有するテーブルを追加してきます。
高度なテーブルオプションでは、エイリアス名をつけたり、共有するパーティションを指定したり、CDFとして共有するなど選択できます。
最後に保存する。
2-3. 作成した共有オブジェクトに受信者を追加
共有オブジェクト画面にて、右上に「受信者を追加」ボタンをクリックし、1で作成した受信者を追加します。
3. 受信側で共有カタログの作成
3-1. すでに共有が始まっているので、受信側のワークスペース(今回はAWS)にて確認してみます。
まずは、プロバイダーを選択します。これは共有側のDeltaShareを有効にした際に作成した名前もしくはUUIDになります。あらかじめ共有側に名前を確認しておきます。
3-2. カタログ作成し登録
共有されているテーブルは、受信側でカタログ作成することで利用出来るようになります。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2206424%2Fd9be4180-0e7d-755c-69a6-a66a5d1b74b8.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b9c7ac8d1ade37e2ceafc69bdd2a8b9e)
4. 利用してみよう
これで通常のデータと同様にアクセス出来るようになります。
詳細情報をみてみると、ストレージロケーションにdeltasharingパスが利用されております。
その他
- Databricks間の共有の場合、トークンを利用しないため有効期限はありません。
- DeltaSharingの場合、直接ストレージのテーブルデータにアクセス出来るため、データ提供側のクラスターやSQLウェアハウスは起動不要です。
- データはレプリケーションされるわけではなく、直接データ提供側のデータに毎回アクセスしにいきます。
- 異なるクラウドプロバイダーやリージョン間ではネットワーク通信費用が発生します。
詳細はマニュアルをご覧ください。
https://docs.databricks.com/data-sharing/index.html