Delta Sharing の共有を作成および管理する

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

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

  • テーブルとテーブル パーティション
  • ビュー (行レベルと列レベルでアクセスを制限する動的ビューを含む)
  • ボリューム
  • ノートブック
  • AI モデル

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

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

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

要件

共有を作成するには、次の条件を満たす必要があります。

  • メタストア管理者であるか、共有するデータが登録されている Unity Catalog メタストアに対して CREATE SHARE 権限を持っていること。
  • その Unity Catalog メタストアがアタッチされている Azure Databricks ワークスペースを使用して共有を作成すること。

共有にテーブルまたはビューを追加するには、次の条件を満たす必要があります。

  • 共有の所有者であること。
  • テーブルまたはビューを含むカタログとスキーマに対する USE CATALOGUSE SCHEMA の権限、あるいはカタログまたはスキーマの所有権を持っていること。
  • テーブルまたはビューに対する SELECT 権限を持っていること。 引き続きテーブルを共有するには、その特権を保持する必要があります。 失うと、受信者は共有を介してテーブルにアクセスできません。 そのため Databricks では、共有所有者としてのグループを使用することをお勧めします。

共有にボリュームを追加するには、次の条件を満たす必要があります。

  • 共有の所有者であること。
  • ボリュームを含むカタログとスキーマに対する USE CATALOGUSE SCHEMA の権限、あるいはカタログまたはスキーマの所有権を持っていること。
  • ボリュームに対する READ VOLUME 権限を持っていること。 ボリュームを継続して共有するには、その権限を保持する必要があります。 それを失うと、受信者は共有を介してボリュームにアクセスできません。 そのため Databricks では、共有所有者としてのグループを使用することをお勧めします。

共有にモデルを追加するには、以下の要件があります。

  • 共有の所有者であること。
  • モデルを含むカタログとスキーマに対する USE CATALOGUSE SCHEMA の権限、あるいはカタログまたはスキーマの所有権を持っていること。
  • モデルに対する EXECUTE 特権を持っていること。 引き続きモデルを共有するには、その特権を保持する必要があります。 失うと、受信者は共有を介してモデルにアクセスできません。 そのため Databricks では、共有所有者としてのグループを使用することをお勧めします。

スキーマ全体を共有するには、次の条件を満たす必要があります。

  • 共有の所有者であり、かつスキーマの所有者であるか、USE SCHEMA. を持っていること
  • テーブルを共有するスキーマに対する SELECT を持っていること。
  • ボリュームを共有するスキーマに対する READ VOLUME を持っていること。

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

  • 共有所有者であり、ノートブックに対する読み取り可能アクセス許可を持っていること。

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

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

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

  • メタストア管理者 (すべてを表示できます)
  • USE SHARE 特権を持つユーザー (すべてを表示できます)
  • 共有オブジェクト所有者

コンピューティングの要件:

  • Databricks ノートブックを使用して共有を作成する場合、クラスターでは Databricks Runtime 11.3 LTS 以降と共有またはシングルユーザー クラスター アクセス モードを使用する必要があります。
  • SQL ステートメントを使用してスキーマを共有に追加する (またはスキーマを更新または削除する) 場合は、Databricks Runtime 13.3 LTS 以降が動作する SQL ウェアハウスまたはコンピューティングを使用する必要があります。 カタログ エクスプローラーを使用して同じことを行う場合にはコンピューティング要件はありません。

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

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

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

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、カタログ アイコンカタログ をクリックします。
  2. 左側のペインで、[Delta Sharing] メニューを展開し、[自分と共有] を選択します。
  3. [データの共有] をクリックします。
  4. 共有の名前と省略可能なコメントを入力します。

Sql

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

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

CLI

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

databricks shares create <share-name>

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

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

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

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

Note

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

カタログ エクスプローラー

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

  2. 左側のペインで、[Delta Sharing] メニューを展開し、[自分と共有] を選択します。

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

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

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

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

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

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

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

  6. (省略可能) [詳細テーブル オプション] をクリックして、次のオプションを指定します。 スキーマ全体を選択した場合、エイリアスとパーティションは使用できません。 スキーマ全体を選択すると、既定でテーブル履歴が含まれます。

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

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

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

      Note

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

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

Sql

ノートブックまたは 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 コマンドには、Databricks Runtime 13.3 LTS 以降が動作する SQL ウェアハウスまたはコンピューティングが必要です。 スキーマの共有の詳細については、「共有へのスキーマの追加」を参照してください。

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

次のようなオプションがあります。 スキーマ全体を選択した場合、PARTITION および AS <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 以降が必要です。

    Note

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

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

Cli

テーブルを追加するには、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"
        }
      }
    ]
  }'

Note

テーブルの場合、"data_object_type" を省略できます (テーブルの場合のみです)。

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

その他のパラメーターについては、databricks shares update --help を実行するか、REST API リファレンスの「PATCH /api/2.1/unity-catalog/shares/」を参照してください。

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

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

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

基本的な例

次の SQL の例では、year 列、month 列、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: データ受信者が属する Azure Databricks アカウント (Databricks から Databricks への共有のみ)。
  • databricks.metastoreId: データ受信者が属する Unity Catalog メタストア (Databricks から Databricks への共有のみ)。
  • databricks.name: データ受信者の名前。

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

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

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

Delta Sharing でのパラメーター ベースの動的パーティション共有の図

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

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

Note

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

カタログ エクスプローラー

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

  2. 左側のペインで、[Delta Sharing] メニューを展開し、[自分と共有] を選択します。

  3. [共有] タブで、更新する共有を見つけ、その名前をクリックします。

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

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

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

  6. (省略可能) [高度なテーブル オプション] をクリックして、パーティション指定を追加します。

    [テーブルへのパーティションの追加] ダイアログで、次の構文を使用してプロパティ ベースのパーティション指定を追加します。

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

    たとえば、次のように入力します。

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

Sql

ノートブックまたは 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 Lake テーブルで有効にできるストレージ最適化機能です。 「削除ベクトルとは」を参照してください。

Azure Databricks では、Delta テーブルの列マッピングもサポートされています。 「Delta Lake の列マッピングを使用して列の名前変更と削除を行う」をご覧ください。

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

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

共有にビューを追加する

重要

この機能はパブリック プレビュー段階にあります。

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

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

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

その他の要件:

  • ビュー共有は、Databricks 間の共有でのみサポートされます。
  • 共有可能なビューは、Delta テーブルまたはその他共有可能なビューで定義する必要があります。
  • 共有テーブルまたは共有ビューを参照するビューを共有することはできません。
  • ビューを共有に追加するときは、Databricks Runtime 13.3 LTS 以降で SQL ウェアハウスまたはクラスターを使用する必要があります。
  • 受信者によるビューの使用に関する要件と制限については、「共有ビューの読み取り」を参照してください。

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

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、カタログ アイコンカタログ をクリックします。
  2. 左側のペインで、[Delta Sharing] メニューを展開し、[自分と共有] を選択します。
  3. [共有] タブで、ビューの追加先とする共有を見つけ、その名前をクリックします。
  4. [資産の管理] > [データ資産の追加] をクリックします。
  5. [テーブルの追加] ページで、共有するビューを検索または参照して選択します。
  6. (省略可能) [テーブルの詳細オプション] をクリックして、別名または代替ビュー名を指定して、ビュー名を読みやすくします。 別名は、受信者に表示される名前であり、クエリ内で使用する必要があります。 別名が指定されている場合、受信者は実際のビュー名を使用できません。
  7. [保存] をクリックします。

Sql

ノートブックまたは 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」を参照してください。

Cli

次の 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 を実行するか、REST API リファレンスの「PATCH /api/2.1/unity-catalog/shares/」を参照してください。

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

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

重要

この機能はパブリック プレビュー段階にあります。

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

  • 列または行のレベルでのセキュリティ。
  • データ マスキング。

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

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

要件

  • Databricks Runtime バージョン: CURRENT_RECIPIENT 関数は Databricks Runtime 14.2 以降でサポートされています。
  • アクセス許可:
    • ビューを作成するには、共有オブジェクトの所有者であること、ビューを含むカタログとスキーマに対する USE CATALOGUSE SCHEMA およびビューに対する SELECT を持っていることが必要です。 ビューを共有する限り、SELECT 特権を維持する必要があります。
    • 受信者にプロパティを設定するには、受信者オブジェクトの所有者である必要があります。
  • 制限事項: Databricks 間の共有に関する制限を含めた、ビュー共有に関するすべての制限事項に加えて、以下があります。
    • CURRENT_RECIPIENT 関数を使用するビューをプロバイダーが共有した場合、共有コンテキストのため、プロバイダーはビューに直接クエリを実行できません。 このような動的ビューをテストするには、プロバイダーは自身に対してビューを共有し、受信者としてビューにクエリを実行する必要があります。
    • プロバイダーは、動的ビューを参照するビューを作成できません。

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

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

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

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、カタログ アイコンカタログ をクリックします。
  2. 左側のペインで、[Delta Sharing] メニューを展開し、[自分と共有] を選択します。
  3. [受信者] タブで、プロパティを追加する受信者を見つけて、その名前をクリックします。
  4. [プロパティの編集] をクリックします。
  5. [Edit recipient properties] (受信者のプロパティの編集) ダイアログで、キーとして列名 (この場合は country) を、値としてフィルター条件となる値を入力します (たとえば CA)。
  6. [保存] をクリックします。

Sql

受信者にプロパティを設定するには、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');

もう 1 つのオプションは、データ プロバイダーがファクト テーブルのフィールドを受信者のプロパティにマップする個別のマッピング テーブルを維持し、受信者のプロパティとファクト テーブルのフィールドを切り離して柔軟性を高めるためのものです。

受信者に対して列レベルのアクセス許可を指定した動的ビューを作成する

この例では、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 オブジェクトです。 これらは主に、表形式以外のデータ資産に対するガバナンスを提供することを目的としています。 「ボリュームの作成と操作」を参照してください。

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

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

その他の要件:

  • ボリュームの共有は、Databricks 間共有でのみサポートされます。
  • ボリュームを共有に追加する場合は、バージョン 2023.50 以降で SQL ウェアハウスを使用するか、Databricks Runtime 14.1 以降でクラスターを使用する必要があります。

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

カタログ エクスプローラー

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

  2. 左側のペインで、[Delta Sharing] メニューを展開し、[自分と共有] を選択します。

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

  4. [資産の管理] > [資産の編集] をクリックします。

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

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

  6. (省略可能) [詳細オプション] をクリックして、代替ボリューム名 (別名) を指定して、ボリューム名を読みやすくします。

    スキーマ全体を選択した場合、別名は使用できません。

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

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

Sql

ノートブックまたは 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」を参照してください。

Cli

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 を実行するか、REST API リファレンスの「PATCH /api/2.1/unity-catalog/shares/」を参照してください。

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

共有にモデルを追加する

重要

この機能はパブリック プレビュー段階にあります。

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

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

その他の要件:

  • モデル共有は、Databricks 間の共有でのみサポートされます。
  • モデルを共有に追加する場合は、バージョン 2023.50 以降で SQL ウェアハウスを使用するか、Databricks Runtime 14.0 以降でクラスターを使用する必要があります。

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

カタログ エクスプローラー

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

  2. 左側のペインで、[Delta Sharing] メニューを展開し、[自分と共有] を選択します。

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

  4. [資産の管理] > [資産の編集] をクリックします。

  5. [資産の編集] ページで、共有するモデルを検索または参照して選択します。

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

  6. (省略可能) [詳細オプション] をクリックして、代替モデル名 (別名) を指定して、モデル名を読みやすくします。

    スキーマ全体を選択した場合、別名は使用できません。

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

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

Sql

ノートブックまたは 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」を参照してください。

Cli

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 を実行するか、REST API リファレンスの「PATCH /api/2.1/unity-catalog/shares/」を参照してください。

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

共有にスキーマを追加する

重要

この機能はパブリック プレビュー段階にあります。

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

SQL を使用してスキーマを追加、更新、削除するには、Databricks Runtime 13.3 LTS 以降が動作する SQL ウェアハウスまたはコンピューティングが必要です。 カタログ エクスプローラーを使用して同じことを行う場合にはコンピューティング要件はありません。

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

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

スキーマ全体を選択した場合、テーブルの別名、パーティション、ボリュームの別名は使用できません。 スキーマ内の資産の別名またはパーティションを作成した場合、これらはスキーマ全体を共有に追加するときに削除されます。

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

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

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

Note

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

必要なアクセス許可: 共有オブジェクトの所有者と、共有するノートブックに対する読み取り可能アクセス許可。

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

  2. 左側のペインで、[Delta Sharing] メニューを展開し、[自分と共有] を選択します。

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

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

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

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

    (省略可能) [共有名] フィールドでファイルのわかりやすい別名を指定します。 これは、受信者に表示される識別子です。

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

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

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

共有からノートブック ファイルを削除するには、次の手順を実行します。

  1. Azure Databricks ワークスペースで、カタログ アイコンカタログ をクリックします。
  2. 左側のペインで、[Delta Sharing] メニューを展開し、[自分と共有] を選択します。
  3. [共有] タブで、ノートブックを含む共有を見つけて、共有名をクリックします。
  4. [資産] タブで、共有から削除するノートブック ファイルを見つけます。
  5. 行の右にある ケバブ メニュー ケバブ メニュー (3 つのドット メニューとも呼ばれます) をクリックして、[ノートブック ファイルの削除] を選択します。
  6. 確認のダイアログで [削除] をクリックします。

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

既に共有しているノートブックを更新するには、ノートブックを再追加し、[共有名] フィールドで新しい別名を付ける必要があります。 Databricks では、<old-name>-update-1 などのノートブックの変更された状態を示す名前を使用することをお勧めします。 変更を受信者に通知する必要がある場合があります。 更新を利用するには、受信者が新しいノートブックを選択して複製する必要があります。

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

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

必要なアクセス許可: 次のいずれか。

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

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

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

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

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

詳細には次のものが含まれます。

  • 共有の所有者、作成者、作成タイムスタンプ、アップデーター、更新されたタイムスタンプ、コメント。
  • 共有内のデータ資産。
  • 共有にアクセスできる受信者。

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、カタログ アイコンカタログ をクリックします。
  2. 左側のペインで、[Delta Sharing] メニューを展開し、[自分と共有] を選択します。
  3. [共有] タブを開いて共有の一覧を表示します。
  4. [詳細] タブで共有の詳細を表示します。

Sql

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

SHOW SHARES [LIKE <pattern>];

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

DESCRIBE SHARE <share-name>;

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

SHOW ALL IN SHARE <share-name>;

Cli

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

databricks shares list

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

databricks shares get <share-name>

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

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

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

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、カタログ アイコンカタログ をクリックします。
  2. 左側のペインで、[Delta Sharing] メニューを展開し、[自分と共有] を選択します。
  3. [共有] タブで、受信者を見つけて選択します。
  4. [受信者] タブに移動して、共有にアクセスできる受信者の一覧を表示します。

Sql

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

SHOW GRANTS ON SHARE <share-name>;

CLI

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

databricks shares share-permissions <share-name>

共有を更新する

テーブルビューボリュームノートブックを共有に追加することに加えて、次のことができます。

  • 共有の名前を変更します。
  • 共有からテーブル、ビュー、ボリューム、スキーマを削除します。
  • 共有に対してコメントを追加または更新します。
  • テーブルの履歴データへのアクセスを有効または無効にして、受信者がタイム トラベル クエリまたはテーブルのストリーミング読み取りを実行できるようにします。
  • パーティションの定義を追加、更新、削除します。
  • 共有の所有者を変更します。

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

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

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、カタログ アイコンカタログ をクリックします。
  2. 左側のペインで、[Delta Sharing] メニューを展開し、[自分と共有] を選択します。
  3. [共有] タブで、更新する共有を見つけ、その名前をクリックします。

共有の詳細のページでは、以下のことを実行できます。

  • [所有者] または [コメント] フィールドの横にある [編集] アイコン 編集アイコンをクリックして、これらの値を更新します。
  • 資産の行で縦の省略記号 縦方向の省略記号 ボタンをクリックして、削除します。
  • [資産の管理] > [資産の編集] をクリックして、その他すべてのプロパティを更新します。
    • 資産を削除するには、資産の横にあるチェック ボックスをオフにします。
    • パーティション定義を追加、更新、または削除するには、[詳細オプション] をクリックします。

Sql

ノートブックまたは 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」を参照してください。

CLI

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>"
        }
      }
    ]
  }'

Note

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

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

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

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

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

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

共有を削除する

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

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

必要なアクセス許可: 共有オブジェクト所有者。

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、カタログ アイコンカタログ をクリックします。
  2. 左側のペインで、[Delta Sharing] メニューを展開し、[自分と共有] を選択します。
  3. [共有] タブで、削除する共有を見つけ、その名前をクリックします。
  4. ケバブ メニュー ケバブ メニュー (3 つのドット メニューとも呼ばれます) をクリックして、[削除] を選択します。
  5. 確認のダイアログで [削除] をクリックします。

Sql

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

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

CLI

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

databricks shares delete <share-name>