Databricks Clean Roomsのウォークスルー

触ったことなかったので触ってみます。

https://www.databricks.com/jp/product/clean-room

:::note info
**プレビュー**
本機能は[パブリックプレビュー](https://docs.databricks.com/release-notes/release-types.html)です。
:::

# Databricks Clean Roomsとは

データやAIの重要性は増加の一途を辿っています。単一の企業内のみでのデータ活用では得られる示唆に限界があります。パートナーや外部ベンダーとのデータ連携によって、これまでに得られなかったような洞察によってイノベーションの可能性が高まりますが、データ漏えいのリスクは到底無視できるものではありません。

Databricks Clean Rooms(クリーンルーム)では、データをコピーすることなしに安全にデータを共有し、相互承認されたロジックのみの実行を許可する空間を提供します。

![Screenshot 2024-09-30 at 16.50.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1a17fa89-e578-c989-1eef-a97460e5d5c2.png)

これによって、プライバシーに妥協したり、機微データを共有することなしに、すべてのクラウド上の顧客やパートナーと容易にコラボレーションできるようになります。クリーンルームの参加者は自身の既存データを安全に共有、結合することができ、MLに対するネイティブサポートを提供するPythonのような任意の言語を用いて複雑なワークロードを実行することができます。クリーンルームでコラボレーションする際、あなたのデータは移動せず、データがどこでどのように使われるのかに関して常に管理下に置くことができます。

詳細は以下の記事をご覧ください。

https://qiita.com/taka_yayoi/items/a9df0970b34c7dfe6497

# ウォークスルー

[マニュアル](https://docs.databricks.com/ja/clean-rooms/index.html#)に沿って作業していきます。以降では2者を以下のように呼称します。

- クリエーター: クリーンルームの作成者
- コラボレーター: 作成されたクリーンルームで共同作業を行う人

## 前提条件

- クリーンルームでコラボレーションする2者のDatabricksアカウントが、両方ともプレビューに参加している必要があります。

## クリーンルームの作成

まずは、共同作業の場となる[クリーンルームを作成](https://docs.databricks.com/ja/clean-rooms/create-clean-room.html)します。

**クリエーターの作業**

自分のワークスペースでカタログエクスプローラから**クリーンルーム**にアクセスします。
![Screenshot 2024-09-30 at 16.22.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e675834b-5a29-5ddf-56e8-7813e470e163.png)

**クリーンルームを作成**をクリックします。クリーンルームの名称やクラウドプロバイダーとリージョン、説明文を入力します。
![Screenshot 2024-09-30 at 15.37.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/27739c7a-c5cd-99a8-ecbc-ed0fa4a89a45.png)

ここで重要なのは、**コラボレーターの詳細**にある**Clean Room sharing identifier**です。これは、コラボレーターの方から共有いただく必要があります。

**コラボレーターの作業**

自分のワークスペースでカタログエクスプローラにアクセスし、クリエーター同様に**クリーンルーム**にアクセスします。右上のメタストア名をクリックし、**Copy Clean room sharing identfier**をクリックして共有識別子をコピーし、クリエーターに共有します。

![Screenshot 2024-09-30 at 15.42.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2adcbcb9-8f02-adf1-efb4-a27509e9d049.png)

**クリエーターの作業**

共有された共有識別子を入力して、**クリーンルームを作成**をクリックします。クリーンルームのセットアッププロセスが起動します。

![Screenshot 2024-09-30 at 15.43.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/bcb178d0-181f-f4ff-e4d7-2223064e10cf.png)

## データアセットの追加

![Screenshot 2024-09-30 at 15.50.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/cab2264d-e84d-290f-0f44-9e9749a36c49.png)


クリエーターとコラボレーターは、自分のテーブルを**データアセット**として、クリーンルームに共有することができます。クリーンルームにおいては、以下のような仮想的なカタログの配下に各パーティのデータアセットが共有されます。

- `creator`: クリエーターが共有しているデータアセットを格納するカタログ
- `collaborator`: コラボレーターが共有しているデータアセットを格納するカタログ

**クリエーターの作業**

クリエーター側からフライトのテーブルを共有します。

![Screenshot 2024-09-30 at 15.50.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/0a47b72e-461d-61f5-f16a-be747df89897.png)

![Screenshot 2024-09-30 at 15.54.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/cc5d10e9-f5f6-38a7-ff12-d48b954494f3.png)

テーブルが共有されると、コラボレーター側でも確認できます。

## ノートブックの追加

共有されているデータに対して処理を行うには、ノートブックをクリーンルームに共有する必要があります。ここでは、クリエーター側でノートブックを作成します。

```py
df = spark.table("creator.airlinedata_takaaki_yayoi.flights")
display(df)
```
![Screenshot 2024-09-30 at 15.54.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/796e2c02-fb30-e852-e072-b92e08970710.png)

![Screenshot 2024-09-30 at 15.54.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1f699cca-66c3-19a9-9892-298f7969dbda.png)

## ノートブックの実行

[クリーンルームでのノートブックの実行](https://docs.databricks.com/ja/clean-rooms/clean-room-notebook.html)には**相互承認**が必要となります。クリエーターがノートブックを作成した場合、クリエーターはノートブックを実行できません。コラボレーターがノートブックの中身を確認した上で実行する形となります。

以下の例では、クリエーターがノートブックを参照しているので実行ボタンがグレーアウトされています。
![Screenshot 2024-09-30 at 15.57.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/55f27357-1166-4133-6315-b3d6b6d8bb49.png)

**コラボレーターの作業**

コラボレーターがノートブックにアクセスすると、実行ボタンが活性化しています。

![Screenshot 2024-09-30 at 15.57.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ebff776c-d420-9f9d-6cfe-a66ba831a0bc.png)

内容を確認して実行ボタンをクリックします。
![Screenshot 2024-09-30 at 15.58.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8b6efa16-3aba-1e53-29e5-04053eacca1c.png)
![Screenshot 2024-09-30 at 15.58.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1d4d5b9a-fe3f-acc1-24bb-d1d51915499a.png)

**ジョブの実行**タブで状況を確認できます。
![Screenshot 2024-09-30 at 16.00.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2a604858-7a3d-e3d3-1848-fc52eed2567c.png)

処理が完了しました。
![Screenshot 2024-09-30 at 16.01.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/72aa131d-7b94-3f58-0608-b0d85cb66fa7.png)

## さらにデータアセットを追加

今度は、コラボレーターからもテーブルを共有します。航空会社のコードから航空会社名を紐づけるテーブルを登録します。

**コラボレーターの作業**

![Screenshot 2024-09-30 at 16.05.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/57e032d5-49c1-244e-e134-7f8d22df7d6f.png)
![Screenshot 2024-09-30 at 16.07.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5f757186-1087-e5ba-c09e-577a456b1bd0.png)

**クリエーターの作業**

二つのテーブルを結合する新たなノートブックを作成します。

```py:Table join
df_airline = spark.table("creator.airlinedata_takaaki_yayoi.flights")
df_lookup = spark.table("collaborator.airlinedata_takaaki_yayoi.lookupcodes")
df_final = df_airline.join(df_lookup, df_airline.UniqueCarrier == df_lookup.UniqueCode)

display(df_final)
```

クリーンルームに登録します。

![Screenshot 2024-09-30 at 16.10.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1935aa24-054c-71f2-30db-5a652b19bfbc.png)

## 再度ノートブックを実行

**コラボレーターの作業**

クリエーターから共有されたノートブックを確認して実行します。

![Screenshot 2024-09-30 at 16.15.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e42e53ea-af1b-a06e-2c93-36d0958247c2.png)

お互いに持ち寄ったテーブルを用いて処理を実行することができました！

![Screenshot 2024-09-30 at 16.18.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/fb62797d-feb9-5081-f5cd-c206d4f778cb.png)

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)