Delta Sharing の共有の作成と管理

この記事では、Delta Sharing の共有を作成および管理する方法について説明します。

共有は、Unity Catalog 内のセキュリティ保護可能なオブジェクトであり、次のデータ アセットを 1 人以上の受信者と共有するために使用できます。

  • テーブルとテーブルパーティション

  • ビュー (行レベルと列レベルでアクセスを制限する動的ビューを含む)

  • ボリューム

  • ノートブック

  • AIモデル

スキーマ (データベース) 全体を共有すると、受信者は共有した時点でスキーマ内のすべてのテーブル、ビュー、モデル、ボリュームにアクセスできるほか、今後スキーマに追加されたデータや AI アセットにもアクセスできます。

共有には、1 つの Unity Catalog メタストアからのデータと AI アセットのみを含めることができます。 データと AI アセットはいつでも共有に追加したり共有から削除したりできます。

詳細については、「 共有、プロバイダー、受信者」を参照してください。

要件

共有を作成するには、次の操作を行う必要があります。

  • 共有するデータが登録されている Unity Catalog メタストアのメタストア管理者であるか、 CREATE SHARE権限を持っている必要があります。

  • Unity Catalog メタストアがアタッチされた Databricks ワークスペースを使用して共有を作成します。

共有にテーブルまたはビューを追加するには、次の操作を行う必要があります。

  • 共有の所有者になります。

  • テーブルまたはビューを含むカタログとスキーマに対する USE CATALOG 権限と USE SCHEMA 権限、またはカタログまたはスキーマの所有権を持っている。

  • テーブルまたはビューに対する SELECT 権限を持っている。 テーブルまたはビューを引き続き共有するには、その権限を保持する必要があります。 これを紛失すると、受信者は共有を通じてテーブルにアクセスしたり、ビューを表示したりできなくなります。 したがって、Databricks では、共有所有者としてグループを使用することをお勧めします。

共有にボリュームを追加するには、次の操作を行う必要があります。

  • 共有の所有者になります。

  • カタログまたはスキーマのボリュームまたは所有権を含むカタログおよびスキーマに対する USE CATALOG 権限と USE SCHEMA 権限を持っている。

  • ボリュームに対する READ VOLUME 権限を持っている。 ボリュームを引き続き共有するには、その特権を保持する必要があります。 紛失すると、受信者は共有を通じてボリュームにアクセスできなくなります。 したがって、Databricks では、共有所有者としてグループを使用することをお勧めします。

共有にモデルを追加するには、次の操作を行う必要があります。

  • 共有の所有者になります。

  • モデルを含むカタログとスキーマに対する USE CATALOG 権限と USE SCHEMA 権限を持っているか、カタログまたはスキーマの所有権を持っている。

  • モデルに対する EXECUTE 権限を持っている。 モデルを引き続き共有するには、その権限を保持する必要があります。 紛失した場合、受信者は共有を通じてモデルにアクセスできません。 したがって、Databricks では、共有所有者としてグループを使用することをお勧めします。

スキーマ全体を共有するには、次の操作を行う必要があります。

  • 共有とスキーマの所有者であるか、右の権限を持っている USE SCHEMA.

  • テーブルを共有するスキーマに対する SELECT 権限がある。

  • ボリュームを共有するスキーマに対する READ VOLUME 権限がある。

ノートブック ファイルを共有に追加するには、次の条件を満たす必要があります。

  • 共有所有者であり、ノートブックに対するCAN READ権限を持っています。

受信者に共有へのアクセス権を付与するには、次のいずれかである必要があります。

  • メタストア管理者。

  • 共有オブジェクトと受信者オブジェクト (USE SHARE + SET SHARE PERMISSION) または共有の所有者) および (USE RECIPIENT または受信者の所有者) の両方に対する委任されたアクセス許可または所有権を持つユーザー。

共有を表示するには、次のいずれかである必要があります。

  • メタストア管理者 (すべてを表示可能)

  • USE SHARE権限を持つユーザー(すべてを表示可能)

  • 共有オブジェクトの所有者

コンピュートの要件:

  • Databricks ノートブックを使用して共有を作成する場合、クラスターでは Databricks Runtime 11.3 LTS 以上と共有またはシングルユーザーのクラスター アクセス モードを使用する必要があります。

  • SQLステートメントを使用して共有にスキーマを追加する場合 (またはスキーマを更新または削除する場合)、 Databricks Runtime 13.3 LTS以上を実行している SQL ウェアハウスまたはコンピュートを使用する必要があります。 Catalog Explorer を使用して同じことを実行する場合、コンピュートの要件はありません。

共有オブジェクトを作成する

共有を作成するには、カタログ エクスプローラー、Databricks Unity Catalog CLI、または Databricks ノートブックまたは Databricks SQL クエリ エディターのCREATE SHARE SQL コマンドを使用できます。

必要なアクセス許可: メタストア管理者またはメタストアの CREATE SHARE 権限を持つユーザー。

  1. Databricks ワークスペースで、カタログアイコンカタログをクリックします。

  2. カタログパネルの上部にある歯車アイコン歯車アイコンをクリックし、 Delta Sharingを選択します。

    または、クイック アクセスページでDelta Sharing >]ボタンをクリックします。

  3. [共有済み]タブで、 [データの共有]ボタンをクリックします。

  4. [ 共有の作成 ] ページで、共有 の [名前 ] とオプションのコメントを入力します。

  5. [保存して続行] をクリックします。

    データ資産を引き続き追加することも、停止して後で戻ることもできます。

  6. [データ アセットの追加]タブで、共有するテーブル、ボリューム、ビュー、モデルを選択します。

    詳細な手順については、以下を参照してください。

  7. [保存して続行] をクリックします。

  8. [ノートブックの追加]タブで、共有するノートブックを選択します。

    詳細な手順については、 「ノートブック ファイルを共有に追加する」を参照してください。

  9. [保存して続行] をクリックします。

  10. [受信者の追加]タブで、共有する受信者を選択します。

    詳細な手順については、 「Delta Sharing データ共有へのアクセスの管理 (プロバイダー向け)」を参照してください。

  11. データの共有 」をクリックして、受信者とデータを共有します。

ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。

CREATE SHARE [IF NOT EXISTS] <share-name>
[COMMENT "<comment>"];

これで、テーブル、ボリューム、ビュー、およびモデルを共有に追加できます。

詳細な手順については、以下を参照してください。

Databricks CLIを使用して次のコマンドを実行します。

databricks shares create <share-name>

--comment を使用してコメントを追加したり、--json を使用してアセットを共有に追加したりできます。詳細については、以下のセクションを参照してください。

これで、テーブル、ボリューム、ビュー、およびモデルを共有に追加できます。

詳細な手順については、以下を参照してください。

共有にテーブルを追加する

共有にテーブルを追加するには、カタログ エクスプローラー、Databricks Unity Catalog CLI、または Databricks ノートブックまたは Databricks SQL クエリ エディターの SQL コマンドを使用できます。

注:

2024 年 7 月 25 日以降に 共有を使用して受信者と共有される共有には、テーブル コメント、列コメント、および 主キー制約が 含まれます。Databricks-to-Databricksリリース日より前に受信者と共有された共有を通じてコメントと制約の共有を開始する場合は、コメントと制約の共有をトリガーするために、受信者のアクセス権を取り消して再付与する必要があります。

必要な権限: 共有オブジェクトの所有者、テーブルを含むカタログとスキーマの USE CATALOGUSE SCHEMA 、およびテーブルに対する SELECT 権限。 テーブルを共有する限り、 SELECT 権限を維持する必要があります。 詳細については、 「要件」を参照してください。

注:

ワークスペース管理者であり、テーブルを含むスキーマとカタログに対するUSE SCHEMAおよびUSE CATALOG権限をワークスペース管理者グループから継承している場合は、テーブルを共有に追加することはできません。 まず、スキーマとカタログに対する USE SCHEMA 権限と USE CATALOG 権限を自分自身に付与する必要があります。

  1. Databricks ワークスペースで、カタログアイコンカタログをクリックします。

  2. カタログパネルの上部にある歯車アイコン歯車アイコンをクリックし、 Delta Sharingを選択します。

    または、クイック アクセスページでDelta Sharing >]ボタンをクリックします。

  3. [共有済み]タブで、テーブルを追加する共有を見つけて、その名前をクリックします。

  4. [ アセットの管理] > [データ アセットの追加] をクリックします。

  5. [ テーブルの追加 ] ページで、スキーマ全体 (データベース) を選択するか、個々のテーブルとビューを選択します。

    • テーブルまたはビューを選択するには、まずカタログを選択し、次にテーブルまたはビューを含むスキーマを選択し、次にテーブルまたはビュー自体を選択します。

      ワークスペース検索を使用して、名前、列名、またはコメントでテーブルを検索できます。 「ワークスペース オブジェクトの検索」を参照してください。

    • スキーマを選択するには、まずカタログを選択し、次にスキーマを選択します。

      スキーマの共有の詳細については、 「共有にスキーマを追加する」を参照してください。

  6. (オプション) 「詳細テーブル・オプション 」をクリックして、次のオプションを指定します。 エイリアスとパーティションは、スキーマ全体を選択した場合は使用できません。 スキーマ全体を選択した場合、テーブル履歴はデフォルトで含まれます。

    • エイリアス: テーブル名を読みやすくするための代替テーブル名。 エイリアスは、受信者に表示され、クエリで使用する必要があるテーブル名です。 エイリアスが指定されている場合、受信者は実際のテーブル名を使用できません。

    • パーティション: テーブルの一部のみを共有します。 たとえば、 (column = 'value'). 「共有するテーブルパーティションの指定」および「受信者のプロパティを使用してパーティションのフィルタリングを行う」を参照してください。

    • 履歴の共有: テーブル履歴を共有して、受信者がタイムトラベルクエリを実行したり、 Spark構造化ストリーミングでテーブルを読み取ったりできるようにします。 Databricks Runtime 12.2 LTS 以上が必要です。

      注:

      タイムトラベル クエリやストリーミング読み取りの実行に加えて、顧客が table_changes() 関数を使用してテーブルの変更データフィード(CDF) をクエリできるようにしたい場合は、テーブルを共有する前にテーブルで CDF を有効にする必要がありますWITH HISTORY .

  7. [保存]をクリックします。

テーブルを追加するには、ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。

ALTER SHARE <share-name> ADD TABLE <catalog-name>.<schema-name>.<table-name>  [COMMENT "<comment>"]
   [PARTITION(<clause>)] [AS <alias>]
   [WITH HISTORY | WITHOUT HISTORY];

スキーマ全体を追加するには、以下を実行します。 ADD SCHEMAコマンドには、SQL Databricks Runtime13.3LTS 以降を実行する ウェアハウスまたはコンピュートが必要です。スキーマの共有の詳細については、 「共有にスキーマを追加する」を参照してください。

ALTER SHARE <share-name> ADD SCHEMA <catalog-name>.<schema-name>
[COMMENT "<comment>"];

次のオプションがあります。 PARTITIONAS <alias> は、スキーマ全体を選択した場合は使用できません。 スキーマ全体を選択した場合、すべてのテーブルに対してデフォルトでWITH HISTORYが選択されます。

  • PARTITION(<clause>): テーブルの一部のみを共有する場合は、パーティションを指定できます。 たとえば、「共有するテーブル パーティションの指定」および「受信者のプロパティを使用してパーティションのフィルター処理を行う(column = 'value')

  • AS <alias>: 代替テーブル名、またはテーブル名を読みやすくするための エイリアス 。 エイリアスは、受信者に表示され、クエリで使用する必要があるテーブル名です。 エイリアスが指定されている場合、受信者は実際のテーブル名を使用できません。 <schema-name>.<table-name>の形式を使用します。

  • WITH HISTORY またはWITHOUT HISTORY : WITH HISTORYが指定されている場合は、完全な履歴を含むテーブルが共有され、受信者がタイムトラベル クエリとストリーミング読み取りを実行できるようになります。 テーブル共有のデフォルトの動作はWITHOUT HISTORYで、スキーマ共有のデフォルトの動作はWITH HISTORYです。 Databricks Runtime 12.2 LTS 以上が必要です。

    注:

    タイムトラベル クエリやストリーミング読み取りの実行に加えて、顧客が table_changes() 関数を使用してテーブルの変更データフィード(CDF) をクエリできるようにしたい場合は、テーブルを共有する前にテーブルで CDF を有効にする必要がありますWITH HISTORY .

ALTER SHARE オプションの詳細については、 ALTER SHAREを参照してください。

テーブルを追加するには、 Databricks CLIを使用して次のコマンドを実行します。

databricks shares update <share-name> \
  --json '{
    "updates": [
      {
        "action": "ADD",
        "data_object": {
          "name": "<table-full-name>",
          "data_object_type": "TABLE",
          "shared_as": "<table-alias>"
        }
      }
    ]
  }'

スキーマを追加するには、次の Databricks CLI コマンドを実行します。

databricks shares update <share-name> \
  --json '{
    "updates": [
      {
        "action": "ADD",
        "data_object": {
          "name": "<schema-full-name>",
          "data_object_type": "SCHEMA"
        }
      }
    ]
  }'

注:

テーブルの場合、およびテーブルのみの場合は、 "data_object_type".

この例にリストされているオプションの詳細については、SQL タブの説明を参照してください。

追加の問題については、実行databricks shares update --help を参照するか、 リファレンスの PATCH /api/2.1/unity-catalog/shares/RESTAPI を参照してください。

共有からテーブルを削除する方法については、 「共有の更新」を参照してください。

共有するテーブル パーティションを指定する

テーブルを共有に追加するときに、テーブルの一部のみを共有するには、パーティション仕様を指定します。 パーティションは、カタログエクスプローラー、Databricks Unity Catalog CLI、または Databricks ノートブックまたは Databricks SQL クエリーエディターの SQL コマンドを使用して、共有にテーブルを追加するとき、または共有を更新するときに指定できます。 「 共有にテーブルを追加する 」および「 共有を更新する」を参照してください。

基本的な例

次の SQL の例では、 yearmonth 、およびdate列でパーティション化されたinventoryテーブルのデータの一部を共有します。

  • 2021年のデータ。

  • 2020年12月のデータ。

  • 2019年12月25日のデータ。

ALTER SHARE share_name
ADD TABLE inventory
PARTITION (year = "2021"),
          (year = "2020", month = "Dec"),
          (year = "2019", month = "Dec", date = "2019-12-25");

受信者のプロパティを使用してパーティション フィルタリングを実行する

データ受信者のプロパティに一致するテーブルパーティションを共有できます (パラメータ化されたパーティション共有とも呼ばれます)。

デフォルトのプロパティは次のとおりです。

  • databricks.accountId: データ受信者が属するDatabricksアカウント ( Databricks-to-Databricks共有のみ)。

  • databricks.metastoreId: データ受信者が属する Unity Catalog メタストア (Databricks間共有のみ)。

  • databricks.name: データ受信者の名前。

受信者を作成または更新するときに、任意のカスタムプロパティを作成できます。

受信者プロパティによるフィルタリングにより、複数の Databricks アカウント、ワークスペース、およびユーザー間で同じ共有を使用して同じテーブルを共有しながら、それらの間のデータ境界を維持できます。

たとえば、テーブルに Databricks アカウント ID 列が含まれている場合は、Databricks アカウント ID で定義されたテーブル パーティションを持つ単一の共有を作成できます。 共有すると、Delta Sharing は各受信者の Databricks アカウントに関連付けられたデータのみを動的に配信します。

Delta Sharingにおける問題ベースの動的パーティション共有の図

プロパティごとに動的にパーティション分割する機能がなければ、受信者ごとに個別の共有を作成する必要があります。

共有を作成または更新するときに受信者のプロパティでフィルター処理するパーティションを指定するには、カタログ エクスプローラー、Databricks ノートブックのCURRENT_RECIPIENT SQL 関数、または Databricks SQL クエリ エディターを使用します。

注:

受信者プロパティは、Databricks Runtime 12.2 以降で使用できます。

  1. Databricks ワークスペースで、カタログアイコンカタログをクリックします。

  2. カタログパネルの上部にある歯車アイコン歯車アイコンをクリックし、 Delta Sharingを選択します。

    または、クイック アクセスページでDelta Sharing >]ボタンをクリックします。

  3. 「私が共有」タブで、更新する共有を見つけて、その名前をクリックします。

  4. [ アセットの管理] > [データ アセットの追加] をクリックします。

  5. [ テーブルの追加 ] ページで、テーブルを含むカタログとデータベースを選択し、テーブルを選択します。

    どのカタログとデータベースにテーブルが含まれているかわからない場合は、ワークスペース検索を使用して、名前、列名、またはコメントで検索できます。 「ワークスペース オブジェクトの検索」を参照してください。

  6. (オプション) 「詳細テーブル・オプション 」をクリックして、「パーティション・スペシフィケーション を追加します。

    パーティションをテーブルに追加 」ダイアログで、次の構文を使用してプロパティ・ベースのパーティション仕様を追加します。

    (<column-name> = CURRENT_RECIPIENT().<property-key>)
    

    例えば

    (country = CURRENT_RECIPIENT().'country')
    
  7. [保存]をクリックします。

ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。

ALTER SHARE <share-name> ADD TABLE <catalog-name>.<schema-name>.<table-name>
   PARTITION (<column-name> = CURRENT_RECIPIENT().<property-key>);

例えば

ALTER SHARE acme ADD TABLE acme.default.some_table
  PARTITION (country = CURRENT_RECIPIENT().'country');

削除ベクトルまたは列マッピングを持つテーブルを共有に追加する

プレビュー

この機能はパブリックプレビュー段階です。

削除ベクトルは、Delta テーブルで有効にできるストレージ最適化機能です。 「削除とは何ですか?」を参照してください。 。

Databricks は Delta テーブルの列マッピングもサポートしています。 「Delta Lake 列マッピングを使用した列の名前変更と削除」を参照してください。

削除ベクトルまたは列マッピングを含むテーブルを共有するには、履歴と共有する必要があります。 「共有にテーブルを追加する」を参照してください。

削除または列マッピングを使用してテーブルを共有すると、受信者はSQLウェアハウス、 Databricks Runtime 14.1 以降を実行しているクラスター、またはオープンソース delta-sharing-spark 3.1 以降を実行しているコンピュートを使用してテーブルにクエリを実行できます。 「削除ベクトルまたは列マッピングが有効になっているテーブルを読み取る」および「削除ベクトルまたは列マッピングが有効になっているテーブルを読み取る」を参照してください。

共有にビューを追加する

プレビュー

この機能はパブリックプレビュー段階です。

ビューは、1 つ以上のテーブルまたは他のビューから作成される読み取り専用オブジェクトです。 Unity Catalogメタストア内の複数のスキーマとカタログに含まれるテーブルやその他のビューからビューを作成できます。 「ビューの作成と管理」を参照してください。

このセクションでは、Databricks ノートブックまたは Databricks SQL クエリ エディターでカタログ エクスプローラー、Databricks CLI、または SQL コマンドを使用して、共有にビューを追加する方法について説明します。 Unity Catalog REST API を使用する場合は、REST API リファレンスのPATCH /api/2.1/unity-catalog/shares/を参照してください。

必要な権限: 共有オブジェクトの所有者、ビューを含むカタログとスキーマの USE CATALOGUSE SCHEMA 、ビューの SELECT 。 ビューを共有する限り、 SELECT 特権を維持する必要があります。 詳細については、 「要件」を参照してください。

追加要件:

  • ビューの共有は、 Databricks-to-Databricks 共有でのみサポートされます。

  • 共有可能なビューは、Delta テーブルまたはその他の共有可能なビューで定義する必要があります。

  • 共有テーブルまたは共有ビューを参照するビューは共有できません。

  • SQLビューを共有に追加するときは、Databricks Runtime 13.3LTS 以降で ウェアハウスまたはクラスターを使用する必要があります。

  • 受信者によるビューの使用に関する要件と制限については、「 共有ビューの読み取り」を参照してください。

共有にビューを追加するには:

  1. Databricks ワークスペースで、カタログアイコンカタログをクリックします。

  2. カタログパネルの上部にある歯車アイコン歯車アイコンをクリックし、 Delta Sharingを選択します。

    または、クイック アクセスページでDelta Sharing >]ボタンをクリックします。

  3. [共有済み]タブで、ビューを追加する共有を見つけて、その名前をクリックします。

  4. [ アセットの管理] > [データ アセットの追加] をクリックします。

  5. [ テーブルの追加 ] ページで、共有するビューを検索または参照し、それを選択します。

  6. (オプション)[ 詳細テーブル・オプション ] をクリックして、 エイリアスまたは代替ビュー名を指定し、ビュー名を読みやすくします。 エイリアスは、受信者に表示され、クエリで使用する必要がある名前です。 受信者は、エイリアスが指定されている場合、実際のビュー名を使用できません。

  7. [保存]をクリックします。

ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。

ALTER SHARE <share-name> ADD VIEW <catalog-name>.<schema-name>.<view-name>
   [COMMENT "<comment>"]
   [AS <alias>];

オプションは次のとおりです。

  • AS <alias>: ビュー名を読みやすくするための代替ビュー名またはエイリアス。 エイリアスは、受信者に表示され、クエリで使用する必要があるビュー名です。 受信者は、エイリアスが指定されている場合、実際のビュー名を使用できません。 <schema-name>.<view-name>の形式を使用します。

  • COMMENT "<comment>": コメントは、カタログ エクスプローラー UI に表示されるほか、SQL ステートメントを使用してビューの詳細を一覧表示したり表示したりするときにも表示されます。

ALTER SHARE オプションの詳細については、 ALTER SHAREを参照してください。

次の Databricks CLI コマンドを実行します。

databricks shares update <share-name> \
  --json '{
    "updates": [
      {
        "action": "ADD",
        "data_object": {
          "name": "<view-full-name>",
          "data_object_type": "VIEW",
          "shared_as": "<view-alias>"
        }
      }
    ]
  }'

"shared_as": "<view-alias>" はオプションであり、ビュー名を読みやすくするための代替ビュー名またはエイリアスを提供します。 エイリアスは、受信者に表示され、クエリで使用する必要があるビュー名です。 受信者は、エイリアスが指定されている場合、実際のビュー名を使用できません。 <schema-name>.<view-name>の形式を使用します。

追加の問題については、実行databricks shares update --help を参照するか、 リファレンスの PATCH /api/2.1/unity-catalog/shares/RESTAPI を参照してください。

共有からビューを削除する方法については、 「共有の更新」を参照してください。

動的ビューを共有に追加して行と列をフィルター処理する

プレビュー

この機能はパブリックプレビュー段階です。

動的ビューを使用して、次のようなテーブルデータへのきめ細かなアクセス制御を構成できます。

  • 列または行のレベルでのセキュリティ。

  • データマスキング。

CURRENT_RECIPIENT() 関数を使用する動的ビューを作成する場合は、受信者定義で指定したプロパティに従って受信者のアクセスを制限できます。

このセクションでは、動的ビューを使用して、行レベルと列レベルの両方でテーブルデータへの受信者のアクセスを制限する例を示します。

要件

  • Databricks Runtime バージョン: CURRENT_RECIPIENT関数は、Databricks Runtime 14.2 以降でサポートされています。

  • 権限:

    • ビューを作成するには、共有オブジェクトの所有者であること、ビューを含むカタログとスキーマに USE CATALOGUSE SCHEMA があり、ビューに SELECT が必要です。 ビューを共有する限り、 SELECT 特権を維持する必要があります。

    • 受信者のプロパティを設定するには、受信者オブジェクトの所有者である必要があります。

  • 制限事項 : の 共有の制限を含む、ビュー Databricks-to-Databricks共有のすべての制限事項に加えて、次の制限事項が適用されます。

    • プロバイダーが CURRENT_RECIPIENT 関数を使用するビューを共有する場合、プロバイダーは共有コンテキストのためにビューに対して直接クエリを実行できません。 このような動的ビューをテストするには、プロバイダーがビューを自分自身と共有し、受信者としてビューに対してクエリを実行する必要があります。

    • プロバイダーは、動的ビューを参照するビューを作成できません。

受信者のプロパティを設定する

これらの例では、共有するテーブルに countryという名前の列があり、一致する country プロパティを持つ受信者のみが特定の行または列を表示できます。

受信者のプロパティは、カタログ エクスプローラー、または Databricks ノートブックまたは SQL クエリ エディターの SQL コマンドを使用して設定できます。

  1. Databricks ワークスペースで、カタログアイコンカタログをクリックします。

  2. カタログパネルの上部にある歯車アイコン歯車アイコンをクリックし、 Delta Sharingを選択します。

    または、クイック アクセスページでDelta Sharing >]ボタンをクリックします。

  3. [受信者]タブで、プロパティを追加する受信者を見つけて、その名前をクリックします。

  4. [プロパティの編集] をクリックします。

  5. 「 受信者のプロパティを編集 」ダイアログで、キーとして列名(この場合は country)を入力し、値としてフィルタリングする値( CAなど)を入力します。

  6. [保存]をクリックします。

受信者にプロパティを設定するには、 ALTER RECIPIENTを使用します。 この例では、 country プロパティは CAに設定されています。

ALTER RECIPIENT recipient1 SET PROPERTIES ('country' = 'CA');

受信者に対する行レベルのアクセス許可を持つ動的ビューを作成する

この例では、一致する country プロパティを持つ受信者のみが特定の行を表示できます。

CREATE VIEW my_catalog.default.view1 AS
  SELECT * FROM my_catalog.default.my_table
  WHERE country = CURRENT_RECIPIENT('country');

別のオプションとして、データ プロバイダーがファクト テーブル フィールドを受信者プロパティにマップする別のマッピング テーブルを保持し、受信者プロパティとファクト テーブル フィールドを分離して柔軟性を高めることができます。

受信者に対する列レベルのアクセス許可を持つ動的ビューを作成する

この例では、 country プロパティに一致する受信者のみが特定の列を表示できます。 他のユーザーには、返されたデータが次のように表示されます REDACTED

CREATE VIEW my_catalog.default.view2 AS
  SELECT
  CASE
    WHEN CURRENT_RECIPIENT('country') = 'US' THEN pii
    ELSE 'REDACTED'
  END AS pii
  FROM my_catalog.default.my_table;

動的ビューを受信者と共有する

動的ビューを受信者と共有するには、標準ビューの場合と同じ SQL コマンドまたは UI 手順を使用します。 「共有にビューを追加する」を参照してください。

共有にボリュームを追加する

ボリュームは、クラウド オブジェクトのストレージ場所にあるストレージの論理ボリュームを表すUnity Catalogオブジェクトです。 これらは主に、表形式以外のデータ資産に対するガバナンスを提供することを目的としています。 Unity Catalogボリュームとは何ですか?」を参照してください。

このセクションでは、カタログ エクスプローラー、Databricks CLI、または Databricks ノートブックまたは SQL クエリ エディターの SQL コマンドを使用して、共有にボリュームを追加する方法について説明します。 Unity Catalog REST API を使用する場合は、REST API リファレンスのPATCH /api/2.1/unity-catalog/shares/を参照してください。

注:

ボリューム コメントは、2024 年 7 月 25 日以降にDatabricks-to-Databricks共有を使用して受信者と共有される共有に含まれます。 リリース日より前に受信者と共有された共有を通じてコメントの共有を開始する場合、コメント共有をトリガーするには、受信者のアクセス権を取り消して再付与する必要があります。

必要な権限: 共有オブジェクトの所有者、ボリュームを含むカタログとスキーマの USE CATALOGUSE SCHEMA 、ボリュームの READ VOLUME 。 ボリュームを共有する限り、 READ VOLUME 特権を維持する必要があります。 詳細については、 「要件」を参照してください。

追加要件:

  • ボリューム共有はDatabricks-to-Databricks共有でのみサポートされます。

  • 共有にボリュームを追加するときは、バージョン 2023.50 以降のSQLウェアハウス、またはDatabricks Runtime 14.1 以降のクラスターを使用する必要があります。

  • プロバイダー側のボリューム ストレージにカスタム ネットワーク構成 (ファイアウォールやプライベート リンクなど) がある場合、プロバイダーは、受信者のコントロール プレーンとデータ プレーンのアドレスが適切に許可リストに登録されていることを確認して、ボリュームのストレージ場所に接続できるようにする必要があります。

共有にボリュームを追加するには、次のようにします。

  1. Databricks ワークスペースで、カタログアイコンカタログをクリックします。

  2. カタログパネルの上部にある歯車アイコン歯車アイコンをクリックし、 Delta Sharingを選択します。

    または、クイック アクセスページでDelta Sharing >]ボタンをクリックします。

  3. [共有]タブで、ボリュームを追加する共有を見つけて、その名前をクリックします。

  4. アセットの管理」>「アセットの編集」をクリックします。

  5. [ アセットの編集 ] ページで、共有するボリュームを検索または参照して選択します。

    または、ボリュームを含むスキーマ全体を選択することもできます。 「共有へのスキーマの追加」を参照してください。

  6. (オプション) [詳細オプション ] をクリックして別のボリューム名を指定するか、 エイリアスを指定してボリューム名を読みやすくします。

    エイリアスは、スキーマ全体を選択した場合は使用できません。

    エイリアスは、受信者に表示され、クエリで使用する必要がある名前です。 受信者は、エイリアスが指定されている場合、実際のボリューム名を使用できません。

  7. [保存]をクリックします。

ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。

ALTER SHARE <share-name> ADD VOLUME <catalog-name>.<schema-name>.<volume-name>
   [COMMENT "<comment>"]
   [AS <alias>];

オプションは次のとおりです。

  • AS <alias>: ボリューム名を読みやすくするための代替ボリューム名またはエイリアス。 エイリアスは、受信者に表示され、クエリで使用する必要があるボリューム名です。 受信者は、エイリアスが指定されている場合、実際のボリューム名を使用できません。 <schema-name>.<volume-name>の形式を使用します。

  • COMMENT "<comment>": コメントは、カタログ エクスプローラー UI に表示されるほか、SQL ステートメントを使用してボリュームの詳細を一覧表示したり表示したりするときにも表示されます。

ALTER SHARE オプションの詳細については、 ALTER SHAREを参照してください。

Databricks CLI 0.210 以上を使用して次のコマンドを実行します。

 databricks shares update <share-name> \
   --json '{
     "updates": [
       {
         "action": "ADD",
         "data_object": {
           "name": "<volume-full-name>",
           "data_object_type": "VOLUME",
           "string_shared_as": "<volume-alias>"
         }
       }
     ]
   }'

"string_shared_as": "<volume-alias>" はオプションであり、ボリューム名を読みやすくするための代替ボリューム名 (別名) を提供します。 エイリアスは、受信者に表示され、クエリで使用する必要があるボリューム名です。 受信者は、エイリアスが指定されている場合、実際のボリューム名を使用できません。 <schema-name>.<volume-name>の形式を使用します。

追加の問題については、実行databricks shares update --help を参照するか、 リファレンスの PATCH /api/2.1/unity-catalog/shares/RESTAPI を参照してください。

共有からボリュームを削除する方法については、 「共有の更新」を参照してください。

共有にモデルを追加する

このセクションでは、カタログ エクスプローラー、Databricks CLI、または Databricks ノートブックまたは SQL クエリ エディターの SQL コマンドを使用して、共有にモデルを追加する方法について説明します。 Unity Catalog REST API を使用する場合は、REST API リファレンスのPATCH /api/2.1/unity-catalog/shares/を参照してください。

注:

モデル コメントとモデル バージョン コメントはDatabricks-to-Databricksを使用して共有される共有に含まれます。

必要な権限: 共有オブジェクトの所有者、モデルを含むカタログとスキーマの USE CATALOGUSE SCHEMA 、モデルの EXECUTE 。 モデルを共有する限り、 EXECUTE 権限を維持する必要があります。 詳細については、 「要件」を参照してください。

追加要件:

  • モデルの共有はDatabricks-to-Databricks共有でのみサポートされます。

  • モデルを共有に追加するときは、バージョン 2023.50 以降のSQLウェアハウス、またはDatabricks Runtime 14.0 以降のクラスターを使用する必要があります。

共有にモデルを追加するには:

  1. Databricks ワークスペースで、カタログアイコンカタログをクリックします。

  2. カタログパネルの上部にある歯車アイコン歯車アイコンをクリックし、 Delta Sharingを選択します。

    または、クイック アクセスページでDelta Sharing >]ボタンをクリックします。

  3. [共有済み]タブで、モデルを追加する共有を見つけて、その名前をクリックします。

  4. アセットの管理」>「アセットの編集」をクリックします。

  5. アセットの編集 」ページで、共有するモデルを検索または参照し、それを選択します。

    または、モデルを含むスキーマ全体を選択することもできます。 「共有へのスキーマの追加」を参照してください。

  6. (オプション) [詳細オプション ] をクリックして代替モデル名を指定するか、モデル名を読みやすくするために [エイリアス] を指定します。

    エイリアスは、スキーマ全体を選択した場合は使用できません。

    エイリアスは、受信者に表示され、クエリで使用する必要がある名前です。 受信者は、エイリアスが指定されている場合、実際のモデル名を使用できません。

  7. [保存]をクリックします。

ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。

ALTER SHARE <share-name> ADD MODEL <catalog-name>.<schema-name>.<model-name>
   [COMMENT "<comment>"]
   [AS <alias>];

オプションは次のとおりです。

  • AS <alias>: モデル名を読みやすくするための代替モデル名またはエイリアス。 エイリアスは、受信者に表示され、クエリで使用する必要があるモデル名です。 受信者は、エイリアスが指定されている場合、実際のモデル名を使用できません。 <schema-name>.<model-name>の形式を使用します。

  • COMMENT "<comment>": コメントは、カタログエクスプローラーの UI と、SQL ステートメントを使用してモデルの詳細をリストおよび表示するときに表示されます。

ALTER SHARE オプションの詳細については、 ALTER SHAREを参照してください。

Databricks CLI 0.210 以上を使用して次のコマンドを実行します。

 databricks shares update <share-name> \
   --json '{
     "updates": [
       {
         "action": "ADD",
         "data_object": {
           "name": "<model-full-name>",
           "data_object_type": "MODEL",
           "string_shared_as": "<model-alias>"
         }
       }
     ]
   }'

"string_shared_as": "<model-alias>" はオプションであり、モデル名を読みやすくするための代替モデル名 (エイリアス) を提供します。 エイリアスは、受信者に表示され、クエリで使用する必要があるモデル名です。 受信者は、エイリアスが指定されている場合、実際のモデル名を使用できません。 <schema-name>.<model-name>の形式を使用します。

追加の問題については、実行databricks shares update --help を参照するか、 リファレンスの PATCH /api/2.1/unity-catalog/shares/RESTAPI を参照してください。

共有からモデルを削除する方法については、 「共有の更新」を参照してください。

共有へのスキーマの追加

スキーマ全体を共有に追加すると、受信者は、共有の作成時にスキーマ内のすべてのデータアセットにアクセスできるだけでなく、時間の経過とともにスキーマに追加されるすべてのアセットにアクセスできるようになります。 これには、スキーマ内のすべてのテーブル、ビュー、ボリュームが含まれます。 この方法で共有されるテーブルには、常に完全な履歴が含まれます。

SQLを使用してスキーマを追加、更新、または削除するには、 Databricks Runtime 13.3 LTS以上を実行している SQL ウェアハウスまたはクラスターが必要です。 Catalog Explorer を使用して同じことを実行する場合、コンピュート要件はありません。

必要な権限: 共有オブジェクトの所有者およびスキーマの所有者 (またはスキーマに対する USE SCHEMA 権限と SELECT 権限を持つユーザー)。

共有にスキーマを追加するには、「 共有にテーブルを追加する」の指示に従い、スキーマの追加方法を指定する内容に注意してください。

テーブル・エイリアス、パーティション、およびボリューム・エイリアスは、スキーマ全体を選択した場合は使用できません。 スキーマ内のアセットに対してエイリアスまたはパーティションを作成した場合、スキーマ全体を共有に追加すると、これらは削除されます。

スキーマ共有を使用して共有しているテーブルまたはボリュームの詳細オプションを指定する場合は、SQL を使用してテーブルまたはボリュームを共有し、テーブルまたはボリュームに別のスキーマ名を持つエイリアスを指定する必要があります。

ノートブック ファイルを共有に追加する

カタログ エクスプローラーを使用して、ノートブック ファイルを共有に追加します。

注:

ノートブックを共有するには、メタストアにメタストア レベルのストレージが必要です。

必要な権限: 共有オブジェクトの所有者と、共有するノートブックに対する CAN READ 権限。

  1. Databricks ワークスペースで、カタログアイコンカタログをクリックします。

  2. カタログパネルの上部にある歯車アイコン歯車アイコンをクリックし、 Delta Sharingを選択します。

    または、クイック アクセスページでDelta Sharing >]ボタンをクリックします。

  3. [共有済み]タブで、ノートブックを追加する共有を見つけて、その名前をクリックします。

  4. [アセットの管理] をクリックし、 [ノートブック ファイルの追加]を選択します。

  5. [ノートブック ファイルの追加] ページで、ファイル アイコンをクリックして、共有するノートブックを参照します。

    共有するファイルをクリックし、[ 選択] をクリックします。

    (必要に応じて) [ 共有形式 ] フィールドにファイルのわかりやすいエイリアスを指定します。 これは、受信者に表示される識別子です。

  6. [保存]をクリックします。

共有ノートブック ファイルが、 [アセット]タブのノートブック ファイルリストに表示されます。

共有からノートブック ファイルを削除する

共有からノートブック ファイルを削除するには:

  1. Databricks ワークスペースで、カタログアイコンカタログをクリックします。

  2. カタログパネルの上部にある歯車アイコン歯車アイコンをクリックし、 Delta Sharingを選択します。

    または、クイック アクセスページでDelta Sharing >]ボタンをクリックします。

  3. [共有済み]タブで、ノートブックが含まれている共有を見つけて、共有名をクリックします。

  4. [アセット]タブで、共有から削除するノートブック ファイルを見つけます。

  5. クリックケバブメニュー行の右側にあるケバブ メニューをクリックし、ノートブック ファイルの削除を選択します。

  6. 確認ダイアログで、[ 削除] をクリックします。

共有内のノートブック ファイルを更新する

すでに共有しているノートブックを更新するには、再度追加し、 [共有名]フィールドに新しいエイリアスを指定する必要があります。 Databricks では、ノートブックの改訂ステータスを示す名前 ( <old-name>-update-1など) を使用することをお勧めします。 変更の受取人への通知が必要な場合があります。 受信者は、更新を利用するために、新しいノートブックを選択して複製する必要があります。

受信者に共有へのアクセス権を付与する

受信者に共有アクセスを許可するには、カタログ エクスプローラー、Databricks Unity Catalog CLI、または Databricks ノートブックまたは Databricks SQL クエリ エディターのGRANT ON SHARE SQL コマンドを使用できます。

必要な権限: 次のいずれかです。

  • メタストア管理者。

  • 共有オブジェクトと受信者オブジェクト ((USE SHARE + SET SHARE PERMISSION) または共有の所有者) および (USE RECIPIENT または受信者の所有者) の両方に対する委任されたアクセス許可または所有権。

手順については、 「Delta Sharing データ共有へのアクセスの管理 (プロバイダー向け)」を参照してください。 この記事では、共有への受信者のアクセスを取り消す方法についても説明します。

共有と共有の詳細を表示する

共有の一覧または共有の詳細を表示するには、カタログ エクスプローラー、Databricks Unity Catalog CLI、または Databricks ノートブックまたは Databricks SQL クエリ エディターの SQL コマンドを使用できます。

必要な権限: 返される共有のリストは、ロールと権限によって異なります。 メタストアの管理者と USE SHARE 権限を持つユーザーは、すべての共有を表示します。 それ以外の場合は、自分が共有オブジェクトの所有者である共有のみを表示できます。

詳細は次のとおりです。

  • 共有の所有者、作成者、作成タイムスタンプ、アップデーター、更新されたタイムスタンプ、コメント。

  • 共有内のデータ資産。

  • 共有へのアクセス権を持つ受信者。

  1. Databricks ワークスペースで、カタログアイコンカタログをクリックします。

  2. カタログパネルの上部にある歯車アイコン歯車アイコンをクリックし、 Delta Sharingを選択します。

    または、クイック アクセスページでDelta Sharing >]ボタンをクリックします。

  3. 共有タブを開いて共有リストを表示します。

  4. [詳細]タブで共有の詳細を表示します。

共有の一覧を表示するには、ノートブックまたは Databricks SQL クエリー エディターで次のコマンドを実行します。 必要に応じて、 <pattern> 'LIKE' 述語に置き換えます。

SHOW SHARES [LIKE <pattern>];

特定の共有の詳細を表示するには、次のコマンドを実行します。

DESCRIBE SHARE <share-name>;

共有内のすべてのテーブル、ビュー、ボリュームの詳細を表示するには、次のコマンドを実行します。

SHOW ALL IN SHARE <share-name>;

共有の一覧を表示するには、 Databricks CLIを使用して次のコマンドを実行します。

databricks shares list

特定の共有の詳細を表示するには、次のコマンドを実行します。

databricks shares get <share-name>

共有に対するアクセス許可を持つ受信者を表示する

受信者にアクセス権が付与されている共有の一覧を表示するには、カタログ エクスプローラー、Databricks Unity Catalog CLI、または Databricks ノートブックまたは Databricks SQL クエリー エディターの SHOW GRANTS TO RECIPIENT SQL コマンドを使用できます。

必要なアクセス許可: メタストア管理者、 USE SHARE 特権、または共有オブジェクトの所有者。

  1. Databricks ワークスペースで、カタログアイコンカタログをクリックします。

  2. カタログパネルの上部にある歯車アイコン歯車アイコンをクリックし、 Delta Sharingを選択します。

    または、クイック アクセスページでDelta Sharing >]ボタンをクリックします。

  3. [共有者]タブで、受信者を見つけて選択します。

  4. 共有にアクセスできる受信者のリストを表示するには、 「受信者」タブに移動します。

ノートブックまたはDatabricks SQLクエリーエディタで次のコマンドを実行します。

SHOW GRANTS ON SHARE <share-name>;

Databricks CLIを使用して次のコマンドを実行します。

databricks shares share-permissions <share-name>

共有を更新する

テーブルビューボリュームノートブックを共有に追加するだけでなく、次のこともできます。

  • 共有の名前を変更します。

  • 共有からテーブル、ビュー、ボリューム、スキーマを削除します。

  • 共有のコメントを追加または更新します。

  • テーブルの履歴データへのアクセスを有効または無効にして、受信者がタイムトラベル クエリやテーブルのストリーミング読み取りを実行できるようにします。

  • パーティション定義を追加、更新、または削除します。

  • 共有の所有者を変更します。

共有にこれらの更新を行うには、カタログ エクスプローラー、Databricks Unity Catalog CLI、または Databricks ノートブックまたは Databricks SQL クエリ エディターの SQL コマンドを使用できます。 Catalog Explorer を使用して共有の名前を変更することはできません。

必要なアクセス許可: 共有所有者を更新するには、メタストア管理者、共有オブジェクトの所有者、または USE SHARE 権限と SET SHARE PERMISSION 権限の両方を持つユーザーのいずれかである必要があります。 共有名を更新するには、メタストア管理者 (または CREATE_SHARE 権限を持つユーザー) であり 、共有所有者である必要があります。 その他の共有プロパティを更新するには、所有者である必要があります。

  1. Databricks ワークスペースで、カタログアイコンカタログをクリックします。

  2. カタログパネルの上部にある歯車アイコン歯車アイコンをクリックし、 Delta Sharingを選択します。

    または、クイック アクセスページでDelta Sharing >]ボタンをクリックします。

  3. 「私が共有」タブで、更新する共有を見つけて、その名前をクリックします。

共有の詳細ページで、次の操作を行います。

  • [所有者] フィールドまたは [コメント] フィールドの横にある 編集アイコン 編集アイコンをクリックして、これらの値を更新します。

  • アセット行のケバブメニュー ケバブメニュー ボタンをクリックして、アセットを削除します。

  • アセットの管理」>「アセットの編集 」をクリックして、他のすべてのプロパティを更新します。

    • アセットを削除するには、アセットの横にあるチェックボックスをオフにします。

    • パーティション定義を追加、更新、または削除するには、[ 詳細オプション] をクリックします。

ノートブックまたは Databricks SQL エディターで次のコマンドを実行します。

共有の名前を変更します。

ALTER SHARE <share-name> RENAME TO <new-share-name>;

共有からテーブルを削除します。

ALTER SHARE share_name REMOVE TABLE <table-name>;

共有からボリュームを削除します。

ALTER SHARE share_name REMOVE VOLUME <volume-name>;

共有にコメントを追加または更新します。

COMMENT ON SHARE <share-name> IS '<comment>';

共有内のテーブルのパーティションを追加または変更します。

ALTER SHARE <share-name> ADD TABLE <table-name> PARTITION(<clause>);

共有所有者の変更:

ALTER SHARE <share-name> OWNER TO  '<principal>'

-- Principal must be an account-level user email address or group name.

テーブル履歴の共有を有効にします。

ALTER SHARE <share-name> ADD TABLE <table-name> WITH HISTORY;

ALTER SHARE パラメーターの詳細については、「 ALTER SHARE」を参照してください。

Databricks CLIを使用して次のコマンドを実行します。

共有の名前を変更します。

databricks shares update <share-name> --name <new-share-name>

共有からテーブルを削除します。

databricks shares update <share-name> \
  --json '{
    "updates": [
      {
        "action": "REMOVE",
        "data_object": {
          "name": "<table-full-name>",
          "data_object_type": "TABLE",
          "shared_as": "<table-alias>"
        }
      }
    ]
  }'

共有からボリュームを削除します (Databricks CLI 0.210 以降を使用)。

databricks shares update <share-name> \
  --json '{
    "updates": [
      {
        "action": "REMOVE",
        "data_object": {
          "name": "<volume-full-name>",
          "data_object_type": "VOLUME",
          "string_shared_as": "<volume-alias>"
        }
      }
    ]
  }'

注:

ボリュームにエイリアスがない場合は、 name プロパティを使用します。 エイリアスがある場合は、 string_shared_as を使用します。

共有にコメントを追加または更新します。

databricks shares update <share-name> --comment '<comment>'

共有所有者の変更:

databricks  shares update <share-name> --owner '<principal>'

プリンシパルは、アカウント レベルのユーザーの電子メール アドレスまたはグループ名である必要があります。

共有を削除する

共有を削除するには、カタログ エクスプローラー、Databricks Unity Catalog CLI、または Databricks ノートブックまたは Databricks SQL クエリ エディターのDELETE SHARE SQL コマンドを使用できます。 共有の所有者である必要があります。

共有を削除すると、受信者は共有データにアクセスできなくなります。

必要な権限: 共有オブジェクトの所有者。

  1. Databricks ワークスペースで、カタログアイコンカタログをクリックします。

  2. カタログパネルの上部にある歯車アイコン歯車アイコンをクリックし、 Delta Sharingを選択します。

    または、クイック アクセスページでDelta Sharing >]ボタンをクリックします。

  3. 「私が共有」タブで、削除する共有を見つけて、その名前をクリックします。

  4. ケバブメニューケバブメニューをクリックし、[削除]を選択します。

  5. 確認ダイアログで、[ 削除] をクリックします。

ノートブックまたはDatabricks SQLクエリーエディタで次のコマンドを実行します。

DROP SHARE [IF EXISTS] <share-name>;

Databricks CLIを使用して次のコマンドを実行します。

databricks shares delete <share-name>