Databricksのオープンデータ共有プロトコルDelta Sharingのウォークスルー

Delta SharingはDatabricksが開発したオープンなデータ共有プロトコルです。同じプラットフォームを使用していなくても、セキュアにデータを共有することができます。

https://qiita.com/taka_yayoi/items/3a53516c4434c0ee76f0

本書は以下で説明されている手順を実際に実行します。

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

ここでは、Databricksのデータを共有して、ローカルマシンのVSCodeから共有データを参照します。

# データの共有

データ提供者が以下の作業を行います。

1. Databricksのデータエクスプローラにアクセスします。左ペインで**Delta Sharing**を展開します。
![Screenshot 2023-04-07 at 14.42.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/31423756-9f5a-334a-788c-bd4ee2305a41.png)
1. **データを共有**をクリックして、共有(Share)を作成します。
![Screenshot 2023-04-07 at 14.44.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b42ce728-8d49-efdd-ff22-df37fb3a065b.png)
1. 作成した共有の中にテーブルを登録することで、データの共有が可能となります。**アセットを管理 > テーブルを追加**を選択します。
![Screenshot 2023-04-07 at 14.45.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/695bae83-e776-f4e4-f218-926198e7c0da.png)
1. 共有するテーブルを選択して、**保存**をクリックします。
![Screenshot 2023-04-07 at 14.45.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b4670cc9-dd3f-c081-def9-3bf8d8684f43.png)
![Screenshot 2023-04-07 at 14.46.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f3ccadb8-92b2-a981-e52a-8246bb5d3c6c.png)

# 受信者の作成

テーブルを共有するだけでは、データは共有されません。このデータを参照する受信者オブジェクトを作成する必要があります。

1. **受信者を追加**をクリックします。**+新規受信者を作成**を選択します。
![Screenshot 2023-04-07 at 14.47.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/44f2506f-2c20-aa43-387c-da5d29dfd6ca.png)
1. ここでは組織外との共有を行うので、ライブラリ名のみを入力して**受信者を作成および追加**をクリックします。
![Screenshot 2023-04-07 at 14.48.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c131b935-a065-0a0e-768c-192d7c5b963a.png)
1. [上のステップ](#データの共有)で作成した共有に受信者オブジェクトを紐付けます。
![Screenshot 2023-04-07 at 14.49.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a87dbc8c-4b53-f37a-44bd-b995d1c91300.png)
1. 受信者オブジェクトを使用する組織、ユーザーに共有する**アクティベーションリンク**が表示されます。このリンクはセキュアな手段で当該組織、ユーザーに共有してください。**このリンクが第三者に漏れないように注意してください。**
![Screenshot 2023-04-07 at 14.50.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/9597fbde-8fd9-63c9-6cd5-5e0d00c324f3.png)

# 共有データの参照

以降は受信者のローカルマシンでの作業となります。

1. 受領したアクティベーションリンクにアクセスします。
![Screenshot 2023-04-07 at 14.52.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b8084801-df87-02bd-a479-4f153b3ecdec.png)
1. **Download Credential File**をクリックして、資格情報ファイルをダウンロードします。**このリンクは一度しか利用できないので注意してください。**
1. `config.share`というファイルがローカルにダウンロードされます。
1. この資格情報ファイルを適切な場所に格納します。
1. VSCodeを起動し、以下のソースコードを記述します。

    ```py:Python
    import delta_sharing
    
    # 資格情報ファイルへのパス
    share_file_path = '/Users/takaaki.yayoi/Python/delta-sharing/config.share'
     
    # SharingClientの作成
    client = delta_sharing.SharingClient(share_file_path)
     
    # すべての共有テーブルの一覧
    print("------- 共有テーブル一覧 -------")
    #print(client.list_all_tables())
    
    shares = client.list_shares() 
    for share in shares:
      schemas = client.list_schemas(share)
      for schema in schemas:
        tables = client.list_tables(schema)
        for table in tables:
          print(f'name = {table.name}, share = {table.share}, schema = {table.schema}')
    
    # テーブルの読み込み
    print("------- データロード結果 -------")
    
    # テーブルのURL
    # {profile_file}#{share_id}.{database}.{table}
    
    table_url = f"{share_file_path}#takaakiyayoi-share.default.pdf_table"
    #table_url = f"{share_file_path}#takaakiyayoi-share.default.yellowtaxi_trips"
    
    # データロードにdelta sharingクライアントを使用
    pandas_df = delta_sharing.load_as_pandas(table_url)
     
    print(pandas_df.head(10))
    ```

1. 実行すると、共有テーブル一覧とテーブルの中身が表示されます。

    ```
    ------- 共有テーブル一覧 -------
    name = pdf_table, share = takaakiyayoi-share, schema = default
    name = yellowtaxi_trips, share = takaakiyayoi-share, schema = default
    ------- データロード結果 -------
       id_col  dummy_col dummy_date
    0       0          1 2023-03-02
    1       1          1 2023-03-02
    2       2          1 2023-03-02
    3       3          1 2023-03-02
    4       4          1 2023-03-02
    5       5          1 2023-03-02
    6       6          1 2023-03-02
    7       7          1 2023-03-02
    8       8          1 2023-03-02
    9       9          1 2023-03-02
    ```

これはデータがコピーされているのではなく、ライブのデータを参照しています。このため「古いデータを参照してしまった！」ということはなく、安心して共有データを活用することができます。以降は通常のpandasデータフレームとして操作することが可能です。是非お試しください！

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

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