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 Catalogメタストアの一意の識別子をデータ プロバイダーに提供すると、データ プロバイダーはその識別子を使用して組織との安全な共有接続を作成します。 その後、共有データはワークスペースで読み取りアクセスできるようになり、データ プロバイダーが共有テーブル、ビュー、ボリューム、パーティションに対して行った更新は、ほぼリアルタイムでワークスペースに反映されます。

共有データ テーブル、ビュー、およびボリュームの更新は、ほぼリアルタイムでワークスペースに表示されます。 ただし、列の変更 (追加、名前変更、削除) は、最大 1 分間「カタログエクスプローラ」(Catalog Explorer) に表示されない場合があります。 同様に、新しい共有と共有の更新 (共有への新しいテーブルの追加など) は、表示およびクエリが使用可能になるまで 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 カタログ 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_CATALOGUSE PROVIDER の両方の特権を持つユーザー、またはプロバイダー オブジェクトの CREATE_CATALOG 特権と所有権の両方を持つユーザー。

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

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

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

  3. [ プロバイダー] タブで、プロバイダーを選択します。

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

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

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

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

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

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

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

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

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

  • DESCRIBESHOW、およびテーブルの場合は SELECT

  • DESCRIBE VOLUMELIST <volume-path>SELECT * FROM <format>.'<volume_path>'、およびボリュームの場合は COPY INTO

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

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");

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

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

テーブルが履歴と共有されている場合は、それをSpark構造化ストリーミングのソースとして使用できます。 Databricks Runtime 12.2 LTS 以上が必要です。

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

  • ignoreDeletes: データを削除するトランザクションを無視します。

  • ignoreChanges: UPDATEMERGE INTODELETE (パーティション内)、 OVERWRITEなどのデータ変更操作によってソース テーブルでファイルが書き換えられた場合は、更新を再処理します。 変更されていない行は引き続き出力できます。 したがって、ダウンストリームのコンシューマーは重複を処理できる必要があります。 削除はダウンストリームに反映されません。 ignoreChanges ignoreDeletesを包含します。したがって、 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 列マッピングを使用した列の名前変更と削除」を参照してください。

プロバイダーが、削除ベクトルまたは列マッピングが有効になっているテーブルを共有している場合は、 Databricks Runtime 14.1 以降を実行している SQL Server またはクラスターを使用して、テーブルでバッチ読み取りを実行できます。 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>)

共有ビュー の読み取り

プレビュー

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

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

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

コンピュート 要件:

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

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

ビューオンビューの制限:

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

ビューの共有制限:

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

命名要件:

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

歴史とストリーミング:

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

JDBC/ODBC:

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

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

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

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

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

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

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

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

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

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

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

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

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