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

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

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

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

共有データをチームで利用できるようにするにはどうすればよいですか?

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

注:

共有データ テーブル、ビュー、およびボリュームの更新は、ほぼリアルタイムでワークスペースに表示されます。 ただし、列の変更 (追加、名前変更、削除) は、最大 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、または Databricks ノートブックまたは Databricks SQL クエリ エディターのSHOW PROVIDERS SQL コマンドを使用できます。

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

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

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

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

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

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

共有の表示

プロバイダーが共有している共有を表示するには、カタログ エクスプローラー、Databricks Unity Catalog CLI、または 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、または Databricks ノートブックまたは Databricks SQL クエリ エディターの SQL コマンドを使用できます。

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

注:

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

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

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

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

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

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

  5. カタログの名前とオプションのコメントを入力します。

  6. [作成]をクリックします。

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

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

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

共有から作成されたカタログのカタログの種類は Delta Sharing です。 種類は、カタログ エクスプローラーのカタログ詳細ページで表示するか、ノートブックまたは Databricks SQL クエリで DESCRIBE CATALOG SQL コマンドを実行することで表示できます。 すべての共有カタログは、カタログエクスプローラーの左表示枠の「 共有>カタログ」(Catalog Shared ) の下にリストされます。

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

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

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

  • DESCRIBESHOW、および SELECT はテーブル用です。

  • DESCRIBE VOLUMEボリュームの場合は、 LIST <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での権限の管理」を参照してください。

共有テーブルのデータの読み取り

Databricksユーザーとして利用可能なツール (カタログ エクスプローラー、データベース、 SQLクエリ、 Databricks CLI 、 Databricks REST APIs ) を使用して、共有テーブル内のデータを読み取ることができます。 テーブルに対する SELECT 権限が必要です。

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

Databricksユーザーとして利用できるツール (カタログ エクスプローラー、データベース、 SQLクエリ、 Databricks CLI 、 Databricks REST APIs ) を使用して、共有ボリューム内のデータを読み取ることができます。 ボリュームに対する 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");

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

Apache Spark構造化ストリーミングを用いたテーブルのクエリー

テーブルが履歴と共有されている場合、それをSpark構造化ストリーミングのソースとして使用できます。 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")
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 テーブルで有効にできるストレージ最適化機能です。 「削除とは何ですか?」を参照してください。 。

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

プロバイダーが、削除クロマまたは列マッピングを有効にしてテーブルを共有している場合は、SQL Databricks Runtime14.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-to-Databricks 共有でのみサポートされます。

共有ビューの読み取りは 、共有テーブルの読み取りと同じですが、次の例外があります。

コンピュートの要件:

  • Databricksがプロバイダーのものと異なる場合は、共有ビューをクエリするには、サーバレスSQLウェアハウスを使用する必要があります。

  • プロバイダーが同じDatabricksアカウント上にある場合は、任意のSQLハウスを使用でき、共有アクセス モードを使用するクラスターウェアも使用できます。

View-on-Viewの制限:

共有ビューを参照するビューは作成できません。

共有制限の表示:

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

名前付けの要件:

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

履歴とストリーミング:

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

JDBC/ODBC:

この記事の手順では、Databricks ユーザー インターフェイス、具体的には Unity Catalog 構文とインターフェイスを使用して共有データを読み取ることに重点を置いています。 また、Databricks JDBC/ODBC ドライバーを使用して、Apache Spark、Python、Tableau や Power BI などの BI ツールを使用して共有ビューをクエリすることもできます。 Databricks JDBC/ODBC ドライバーを使用して接続する方法については、 「Databricks ODBC および JDBC ドライバー」を参照してください。

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

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

必要な権限: カタログの所有者、または共有から作成されたカタログに対する USE CATALOG 権限を持つユーザー。

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

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

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

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

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

    1. [複製先]ダイアログで、必要に応じて新しい名前を入力し、ノートブック ファイルの複製先となるワークスペース フォルダーを選択します。

    2. [クローンを作成] をクリックします。

    3. ノートブックの複製が完了すると、複製が正常に行われたことを知らせるダイアログがポップアップ表示されます。 ダイアログの「ノートブック エディターで表示」をクリックすると、ノートブック エディターで表示されます。

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