次の方法で共有


Databricks-to-Databricks の Delta Sharing を使用して共有されたデータを読み取る (受信者向け)

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

Databricks から Databricks への共有では、受信者が次の 両方 の要件を満たしている必要があります。

  • Unity カタログで有効になっている Databricks ワークスペースにアクセスできます。
  • プロバイダーは、オープン共有プロトコルではなく、資格情報ファイルを提供するDatabricks-to-DatabricksDelta Sharingプロトコルを使用しています。

いずれかの要件が満たされていない場合は、「ベアラートークンを使用して共有を開く(受信者の場合)、Delta Sharing を使用して共有されたデータを読み取る」を参照してください。

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

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

追加、名前変更、削除などの列の変更は、カタログ エクスプローラーに最大 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 特権と所有権の両方を持つユーザーです。

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

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

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

  2. [カタログ] ウィンドウの上部にある歯車アイコンをクリックします。歯車アイコンをクリックし、[差分共有] を選択します。

    または、[クイック アクセス] ページで、[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

例の構造化ストリーミング クエリ

スカラ (プログラミング言語)
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>)

共有ビューを読み取る

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

共有の制限を表示する:

  • 共有テーブルまたは共有ビューを参照するビューを共有することはできません。
  • 共有ビューでは、Databricks の組み込み関数と演算子のサブセットのみがサポートされます。 「Databricks 間共有ビューでサポートされている機能」を参照してください。

名前付けに関する要件:

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

履歴とストリーミング:

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

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

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

コスト:

共有コストの計算方法については、「Delta Sharing コストの発生と確認方法」を参照してください。

共有ストリーミング テーブルと具体化されたビューの読み取り

重要

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

共有ストリーミング テーブルと具体化されたビューの 読み取りは、共有テーブルの読み取りと同じですが、次の例外があります。

オープン共有でのサポート:

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

SQL の制限事項:

  • current_recipient 関数はサポートされません。
  • DESCRIBE EXTENDED コマンドはサポートされていません。
  • ワークスペース内のストリーミング テーブルや具体化ビューを、共有されているストリーミング テーブルや具体化ビューと結合したり、合併したりすることはできません。

コスト:

共有コストの計算方法については、「Delta Sharing コストの発生と確認方法」を参照してください。

具体化されたビュー固有の例外

歴史:

履歴を照会することはできません。

リフレッシュ:

具体化されたビューの更新状態と更新スケジュールにアクセスすることはできません。

テーブルの作成の表示とストリーミング:

共有マテリアライズド ビューでビューまたはストリーミング テーブルを作成することはできません。

ストリーミング テーブル固有の例外

歴史:

クエリ履歴は、以下の Databricks から Databricks への共有の場合に利用可能です。

  • 別の Azure Databricks アカウントと共有するときに、サーバーレス コンピューティングを使用しています。

  • 同じ Azure Databricks アカウント内で共有するときに、サーバーレスコンピューティングまたはクラシック コンピューティングを使用しています。

さまざまなコンピューティングの詳細については、「コンピューティング の種類」を参照してください。

リフレッシュ:

ストリーミング テーブルの更新状態と更新スケジュールにアクセスすることはできません。

ビューの作成:

共有ストリーミング テーブルにビューを作成することはできません。

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

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

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

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

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

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

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

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

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

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