Delta Sharing の共有の作成と管理

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

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

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

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

  • ボリューム

  • ノートブック

  • 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 コマンドを使用できます。

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

ワークスペース管理者であり、ワークスペース管理者グループからテーブルを含むスキーマとカタログに対する USE SCHEMAUSE CATALOG のアクセス許可を継承した場合、テーブルを共有に追加することはできません。 まず、スキーマとカタログに対する USE SCHEMAUSE 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 コマンドには、 Databricks Runtime 13.3 LTS以上を実行している SQL ウェアハウスまたはコンピュートが必要です。 スキーマの共有の詳細については、 「共有にスキーマを追加する」を参照してください。

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

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

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

テーブルを共有に追加するときに、テーブルの一部のみを共有するには、パーティション仕様を指定します。 パーティションは、カタログエクスプローラー、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.metastoreId: データ受信者が属する Unity Catalog メタストア (DatabricksDatabricks 共有のみ)。

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

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

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

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

Delta Sharingにおけるパラメーター・ベースの動的区画共用の図

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

共有を作成または更新するときに受信者のプロパティでフィルター処理するパーティションを指定するには、カタログ エクスプローラーを使用するか、Databricks ノートブックまたは Databricks SQL クエリー エディターで CURRENT_RECIPIENT 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 Server、Databricks Runtime 14.1 以上を実行しているクラスター、または OSSdelta-sharing-spark 3.1 以上を実行しているサーバーを使用してテーブルをクエリできます。「削除ベクトルまたは列マッピングが有効になっているテーブルを読み取る」および「削除ベクトルまたは列マッピングが有効になっているテーブルを読み取る」を参照してください。

共有にビューを追加する

プレビュー

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

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

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

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

追加要件:

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

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

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

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

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

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

  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 を実行するか、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 プロパティが一致する受信者のみが特定の行または列を表示できます。

受信者のプロパティは、カタログ エクスプローラー、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/」 を参照してください。

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

追加要件:

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

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

共有にモデルを追加する

プレビュー

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

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

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

追加要件:

  • モデル共有は、 Databricksから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 を実行するか、REST API リファレンスの PATCH /api/2.1/unity-catalog/shares/ を参照してください。

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

共有へのスキーマの追加

プレビュー

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

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

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 コマンドを使用できます。 カタログ エクスプローラを使用して共有の名前を変更することはできません。

必要なアクセス許可: 共有所有者を更新するには、メタストア管理者、共有オブジェクトの所有者、または USE SHARESET 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>'

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

共有を削除する

共有を削除するには、カタログ エクスプローラー、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>