次の方法で共有


Databricks 間 Delta Sharing を使用して共有されたデータを読み取る (受信者の場合)

この記事では、Databricks がデータ共有用のセキュリティで保護された接続を管理する "Databricks 間" Delta Sharing プロトコルを使用して、共有されたデータを読み取る方法について説明します。 Delta Sharing "オープン共有" プロトコルとは異なり、Databricks 間プロトコルには資格情報ファイルは必要ありません (トークンベースのセキュリティ)。

Databricks 間の共有では、Unity Catalog が有効になっている Databricks ワークスペースに受信者がアクセスできる必要があります。

Unity Catalog が有効になっている Databricks ワークスペースがない場合、Delta Sharing オープン共有プロトコルを使用してデータを共有する必要があります。また、この記事は参考になりません。 「Delta Sharing オープン共有を使用した共有データを読み取る (受信者の場合)」を参照してください。

共有データをチームで使用できるようにする方法

Databricks 間プロトコルを使用して共有されているデータとノートブックを読み取るには、Unity Catalog が有効になっている Databricks ワークスペースのユーザーである必要があります。 チームのメンバーは、Unity カタログ メタストアの一意の識別子をデータ プロバイダーに提供し、データ プロバイダーはその識別子を使用して組織との安全な共有接続を作成します。 その後、共有データはワークスペースで読み取りアクセスが可能になります。また、データ プロバイダーが共有テーブル、ビュー、ボリューム、パーティションに対して行うすべての更新は、凖リアルタイムでワークスペースに反映されます。

Note

共有のデータ テーブル、ビュー、ボリュームに対する更新は、凖リアルタイムでワークスペースに表示されます。 ただし、列の変更 (追加、名前変更、削除) は最大 1 分間、カタログ エクスプローラーに表示されない場合があります。 同様に、共有に対する新しい共有と更新 (共有への新しいテーブルの追加など) は、表示およびクエリを実行できるようになる前に 1 分間キャッシュされます。

共有されているデータを読み取る方法:

  1. チームのユーザーが "共有" (自分と共有されているテーブル、ビュー、ボリューム、ノートブックのコンテナー) を見つけ、その共有を使用して "カタログ" (Databricks Unity Catalog 内のすべてのデータの最上位コンテナー) を作成します。
  2. チームのユーザーは、カタログとカタログ内のオブジェクト (スキーマ、テーブル、ビュー、ボリューム) へのアクセスを、チームの他のメンバーに許可または拒否します。
  3. 自分にアクセス権が付与されているテーブル、ビュー、ボリューム内のデータを、読み取り専用 (SELECT または READ VOLUME) アクセス権を持つ Databricks の他のデータ資産と同様に読み取ります。
  4. カタログに対する USE CATALOG 特権がある限り、共有内のノートブックをプレビューおよび複製できます。

必要なアクセス許可

すべてのプロバイダーとプロバイダー共有に関する詳細を一覧表示および表示できるようにするには、メタストア管理者であるか、USE PROVIDER 特権を持っている必要があります。 他のユーザーは、自分が所有するプロバイダーと共有にのみアクセスできます。

プロバイダー共有からカタログを作成するには、メタストア管理者、Unity Catalog メタストアの CREATE_CATALOG 特権と USE PROVIDER 特権の両方を持つユーザー、または、プロバイダー オブジェクトの CREATE_CATALOG 特権と所有権の両方を持つユーザーである必要があります。

共有から作成されたカタログ内のスキーマ (データベース)、テーブル、ビュー、ボリュームへの読み取り専用アクセスの付与は、一般的な Unity Catalog 特権階層に従って行うことができます。 共有から作成されたカタログ内のノートブックを表示するには、カタログに対する USE CATALOG 特権が必要です。 「Delta Sharing カタログ内のスキーマ、テーブル、ボリュームのアクセス許可を管理する」を参照してください。

プロバイダーと共有を表示する

データ プロバイダーによって共有されたデータの読み取りを開始するには、プロバイダーがデータを共有したら、"プロバイダー" の名前を把握し、Unity Catalog メタストアに格納されているオブジェクトを "共有する" 必要があります。

プロバイダー オブジェクトは、データの共有元の組織の Unity Catalog メタストア、クラウド プラットフォーム、リージョンを表します。

共有オブジェクトは、プロバイダーが自分と共有したテーブル、ボリューム、ビューを表します。

データの共有元のすべてのプロバイダーを表示する

使用可能なデータ プロバイダーの一覧を表示するには、カタログ エクスプローラー、Databricks Unity Catalog CLI、または Azure Databricks ノートブックや Databricks SQL クエリ エディターで SHOW PROVIDERS SQL コマンドを使用することができます。

必要なアクセス許可: メタストア管理者であるか、USE PROVIDER 特権を持っている必要があります。 他のユーザーは、自分が所有するプロバイダーとプロバイダー共有にのみアクセスできます。

詳細については、「プロバイダーを表示する」を参照してください。

プロバイダーの詳細を表示する

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

必要なアクセス許可: メタストア管理者であるか、USE PROVIDER 特権を持っているか、プロバイダー オブジェクトを所有している必要があります。

詳細については、「プロバイダーの詳細を表示する」を参照してください。

共有を表示する

プロバイダーが共有している共有を表示するには、カタログ エクスプローラー、Databricks Unity Catalog CLI、または Azure Databricks ノートブックや Databricks SQL クエリ エディターで SHOW SHARES IN PROVIDER SQL コマンドを使用することができます。

必要なアクセス許可: メタストア管理者であるか、USE PROVIDER 特権を持っているか、プロバイダー オブジェクトを所有している必要があります。

詳細については、「プロバイダーが共有した共有を表示する」を参照してください。

共有テーブルまたはボリューム内のデータにアクセスする

共有テーブルまたはボリューム内のデータを読み取るには、次のようにします。

  1. 特権ユーザーは、テーブルまたはボリュームを含む共有からカタログを作成する必要があります。 これは、メタストア管理者、Unity Catalog メタストアの CREATE_CATALOG 特権と USE PROVIDER 特権の両方を持つユーザー、または、プロバイダー オブジェクトの CREATE_CATALOG 特権と所有権の両方を持つユーザーです。
  2. そのユーザーまたは同じ特権を持つユーザーから、共有テーブルまたはボリュームへのアクセス権が付与される必要があります。
  3. テーブルまたはボリュームには、Unity Catalog メタストアに登録されている他のデータ資産と同じようにアクセスできます。

共有からカタログを作成する

共有内のデータにチームがアクセスできるようにするには、共有からカタログを作成する必要があります。 共有からカタログを作成するには、カタログ エクスプローラー、Databricks Unity Catalog CLI、または Azure Databricks ノートブックまたは Databricks SQL クエリ エディターで SQL コマンドを使用します。

必要なアクセス許可: これは、メタストア管理者、Unity Catalog メタストアの CREATE_CATALOG 特権と USE PROVIDER 特権の両方を持つユーザー、または、プロバイダー オブジェクトの CREATE_CATALOG 特権と所有権の両方を持つユーザーです。

Note

共有にビューが含まれている場合は、プロバイダーのメタストア内のビューを含むカタログの名前とは異なるカタログ名を使用する必要があります。

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

  1. Azure Databricks ワークスペースで、カタログ アイコン [カタログ] をクリックしてカタログ エクスプローラーを開きます。

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

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

  3. [自分と共有] タブで、プロバイダーを見つけて選択します。

  4. [共有] タブで共有を見つけ、共有行の [カタログの作成] をクリックします。

  5. カタログの名前とコメント (省略可能) を入力します。

  6. Create をクリックしてください。

または、カタログ エクスプローラーを開く際に、右上にある [カタログを作成] をクリックして共有カタログを作成することもできます。 「カタログの作成」を参照してください。

SQL

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

CREATE CATALOG [IF NOT EXISTS] <catalog-name>
USING SHARE <provider-name>.<share-name>;

CLI

databricks catalogs create <catalog-name> /
--provider-name <provider-name> /
--share-name <share-name>

共有から作成されたカタログには、Delta Sharing のカタログの種類があります。 種類は、カタログ エクスプローラーのカタログ詳細ページで表示することも、ノートブックまたは Databricks SQL クエリで DESCRIBE CATALOG SQL コマンドを実行して表示することもできます。 すべての共有カタログは、カタログ エクスプローラーで左側のペインの [カタログ]> [共有] に表示されます。

Delta Sharing カタログは、Unity Catalog メタストア上の通常のカタログと同じ方法で管理できます。 Delta Sharing カタログを表示、更新、削除するには、カタログ エクスプローラー、Databricks CLI、SQL コマンド SHOW CATALOGSDESCRIBE CATALOGALTER CATALOGDROP CATALOG を使用できます。

共有から作成された Delta Sharing カタログ下の 3 レベルの名前空間構造は、Unity Catalog 上の通常のカタログ下の構造 (catalog.schema.table または catalog.schema.volume) と同じです。

共有カタログの下のテーブルおよびボリューム データは読み取り専用です。つまり、次のような読み取り操作を実行できます。

  • テーブルに対する DESCRIBESHOWSELECT
  • ボリュームに対する DESCRIBE VOLUMELIST <volume-path>SELECT * FROM <format>.'<volume_path>'COPY INTO

共有カタログ内のノートブックは、カタログに対する USE CATALOG を持つ任意のユーザーがプレビューおよび複製できます。

共有カタログ内のモデルは、次の権限を持つユーザーであれば、誰でも推論のために読み取りおよび読み込みを行うことができます: 登録されたモデルに対する EXECUTE 権限と、モデルを含むスキーマおよびカタログに対する USE SCHEMA および USE CATALOG 権限。

Delta Sharing カタログ内のスキーマ、テーブル、ボリュームのアクセス許可を管理する

既定では、カタログ作成者は Delta Sharing カタログのすべてのデータ オブジェクトの所有者であり、それらのアクセス許可を管理できます。

特権は下位に継承されますが、一部のワークスペースは継承を提供しなかったレガシ セキュリティ モデルにまだ残っている可能性があります。 「継承モデル」を参照してください。 カタログに対する SELECT 特権を付与されたユーザーは、その特権が取り消されない限り、カタログ内のすべてのスキーマとテーブルに対する SELECT 特権を持ちます。 同様に、カタログに対する READ VOLUME 特権を付与されたユーザーは、その特権が取り消されない限り、カタログ内のすべてのボリュームに対する READ VOLUME 特権を持ちます。 Delta Sharing カタログまたは Delta Sharing カタログ内のオブジェクトへの書き込みまたは更新アクセス権を付与する特権を付与することはできません。

カタログ所有者は、データ オブジェクトの所有権を他のユーザーまたはグループに委任できるため、それらのユーザーにオブジェクトのアクセス許可とライフ サイクルを管理する権限を付与できます。

Unity Catalog を使用してデータ オブジェクトに対する特権を管理する方法の詳細については、「Unity Catalog の特権の管理」を参照してください。

共有テーブル内のデータを読み取る

Azure Databricks ユーザーとして使用できる任意のツール (カタログ エクスプローラー、ノートブック、SQL クエリ、Databricks CLI、Databricks REST API) を使用して、共有テーブル内のデータを読み取ることができます。 テーブルに対する SELECT 特権が必要です。

共有ボリューム内のデータを読み取る

Azure Databricks ユーザーとして使用できる任意のツール (カタログ エクスプローラー、ノートブック、SQL クエリ、Databricks CLI、Databricks REST API) を使用して、共有ボリューム内のデータを読み取ることができます。 ボリュームに対する READ VOLUME 特権が必要です。

推論のために共有モデルを読み込む

共有モデルを読み込み、それをバッチ推論に使用する方法の詳細については、「推論ワークロード用別名によるモデル バージョンの読み込み」を参照してください。

テーブルの履歴データに対してクエリを実行する

履歴がテーブルと共に共有されている場合は、バージョンまたはタイムスタンプを指定してテーブル データに対してクエリを実行できます。 Databricks Runtime 12.2 LTS 以降が必要です。

次に例を示します。

SELECT * FROM vaccine.vaccine_us.vaccine_us_distribution VERSION AS OF 3;
SELECT * FROM vaccine.vaccine_us.vaccine_us_distribution TIMESTAMP AS OF "2023-01-01 00:00:00";

さらに、テーブルで変更データ フィード (CDF) が有効になっている場合は、CDF に対してクエリを実行できます。 バージョンとタイムスタンプの両方がサポートされています。

SELECT * FROM table_changes('vaccine.vaccine_us.vaccine_us_distribution', 0, 3);
SELECT * FROM table_changes('vaccine.vaccine_us.vaccine_us_distribution', "2023-01-01 00:00:00", "2022-02-01 00:00:00");

変更データ フィードの詳細については、「Azure Databricks で Delta Lake 変更データ フィードを使用する」を参照してください。

Apache Spark Structured Streaming を使用してテーブルに対してクエリを実行する

テーブルが履歴と共有されている場合は、それを Spark Structured Streaming のソースとして使用できます。 Databricks Runtime 12.2 LTS 以降が必要です。

サポートされているオプション:

  • ignoreDeletes: データを削除するトランザクションを無視します。
  • ignoreChanges: UPDATEMERGE INTODELETE (パーティション内)、OVERWRITE などのデータ変更操作のためにファイルがソース テーブルで書き換えられた場合は、更新を再処理します。 変更されていない行は、引き続き出力できます。 そのため、ダウンストリームのコンシューマーが重複を処理できる必要があります。 削除はダウンストリームには反映されません。 ignoreChangesignoreDeletes を含みます。 そのため、ignoreChanges を使用する場合、ソース テーブルに対する削除または更新によってストリームが中断されることはありません。
  • startingVersion: 対象となる最初の共有テーブルのバージョン。 このバージョン (を含む) 以降のすべてのテーブル変更は、ストリーミング ソースによって読み取りされます。
  • startingTimestamp: 対象となる最初のタイムスタンプ。 このタイムスタンプ (を含む) 以降にコミットされたすべてのテーブル変更は、ストリーミング ソースによって読み取りされます。 例: "2023-01-01 00:00:00.0"
  • maxFilesPerTrigger: すべてのマイクロバッチで考慮される新しいファイルの数。
  • maxBytesPerTrigger: 各マイクロバッチで処理されるデータの量。 このオプションにより "ソフト最大値" が設定されます。これは、最小の入力単位がこの制限を超える場合にストリーミング クエリを進めるために、バッチでほぼこの量のデータが処理され、制限を超える処理が行われる可能性があることを意味します。
  • readChangeFeed: 共有テーブルの変更データ フィードをストリームで読み取ります。

サポートされていないオプション:

  • Trigger.availableNow

サンプルの構造化ストリーミング クエリ

Scala
spark.readStream.format("deltaSharing")
.option("startingVersion", 0)
.option("ignoreChanges", true)
.option("maxFilesPerTrigger", 10)
.table("vaccine.vaccine_us.vaccine_us_distribution")
Python
spark.readStream.format("deltaSharing")\
.option("startingVersion", 0)\
.option("ignoreDeletes", true)\
.option("maxBytesPerTrigger", 10000)\
.table("vaccine.vaccine_us.vaccine_us_distribution")

テーブルで変更データ フィード (CDF) が有効になっている場合は、CDF をストリームで読み取りできます。

spark.readStream.format("deltaSharing")
.option("readChangeFeed", "true")
.table("vaccine.vaccine_us.vaccine_us_distribution")

削除ベクターまたは列マッピングが有効になっているテーブルの読み取り

重要

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

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

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

削除ベクトルまたは列マッピングが有効になっているテーブルをプロバイダーが共有している場合は、SQL ウェアハウスまたは Databricks Runtime 14.1 以降を実行しているクラスターを使用して、テーブルに対してバッチ読み取りを実行できます。 CDF とストリーミングの各クエリには、Databricks Runtime 14.2 以降が必要です。

バッチ クエリは、共有テーブルのテーブル機能に基づいて responseFormat を自動的に解決できるため、そのまま実行できます。

変更データ フィード (CDF) を読み取ったり、削除ベクトルまたは列マッピングが有効になっている共有テーブルに対してストリーミング クエリを実行したりするには、追加のオプション responseFormat=delta を設定する必要があります。

次の例は、バッチ、CDF、ストリーミングの各クエリを示しています。

import org.apache.spark.sql.SparkSession

// Batch query
spark.read.format("deltaSharing").table(<tableName>)

// CDF query
spark.read.format("deltaSharing")
  .option("readChangeFeed", "true")
  .option("responseFormat", "delta")
  .option("startingVersion", 1)
  .table(<tableName>)

// Streaming query
spark.readStream.format("deltaSharing").option("responseFormat", "delta").table(<tableName>)

共有ビューを読み取る

重要

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

以下の例外を除き、共有ビューの読み取りは共有テーブルの読み取りと同じです。

共有の制限を表示する:

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

名前付けに関する要件:

ビューを含む共有カタログに使用するカタログ名は、そのビューで参照されるテーブルを含むプロバイダー カタログと同じであってはなりません。 たとえば、共有ビューが test カタログに含まれており、そのビューで参照されるプロバイダーのテーブルのいずれかがプロバイダーの test カタログに含まれる場合、クエリを実行すると名前空間の競合エラーが発生します。 「共有からカタログを作成する」を参照してください。

履歴とストリーミング:

履歴のクエリを実行したり、ストリーミング ソースとしてビューを使用したりすることはできません。

オープン共有でサポートを表示する:

この記事の手順では、Azure Databricks のユーザー インターフェイス、特に Unity Catalog の構文とインターフェイスを使用して共有データを読み取る方法について説明しています。 また、Apache Spark、Python、および Tableau や Power BI などの BI ツールを使用して共有ビューのクエリを実行することもできます。

コスト:

ビュー共有には、次の 2 つの潜在的なコストソースがあります。

  • コンピューティング コスト。Databricks によって課金されます。
  • ストレージ ベンダーによって課金されるストレージとネットワーク転送 (エグレス) のコスト。

コンピューティング コストは、受信者のコンピューティング リソースの種類に基づいています。

受信者コンピューティング 誰が支払いますか? SKU
Databricks サーバーレス 受信者 受信者が使用するサーバーレス SKU
Databricks クラシック 受信者 対話型サーバーレス
差分共有コネクタを開く プロバイダー 対話型サーバーレス

共有ノートブックの読み取り

共有ノートブック ファイルをプレビューおよび複製するには、カタログ エクスプローラーを使用できます。

必要なアクセス許可: 共有から作成されたカタログに対する USE CATALOG 特権を持つカタログ所有者またはユーザー。

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

  2. 左側のウィンドウで、[カタログ] メニューを展開し、共有から作成されたカタログを見つけて選択します。

  3. [その他の資産] タブには、共有ノートブック ファイルが表示されます。

  4. 共有ノートブック ファイルの名前をクリックしてプレビューします。

  5. (省略可能) [複製] ボタンをクリックして、共有ノートブック ファイルをワークスペースにインポートします。

    1. [複製先] ダイアログで、必要に応じて [新しい名前] を入力し、ノートブック ファイルの複製先のワークスペース フォルダーを選択します。
    2. [複製] をクリックします。
    3. ノートブックが複製されると、ダイアログが表示され、正常に複製されたことを通知します。 ダイアログで [ノートブック エディターで表示] をクリックして、ノートブック エディターで表示します。

    Databricks ノートブックの概要」を参照してください。