Databricks-to-Databricks Delta Sharing を使用して共有されたデータの読み取り (受信者用)
Databricks-to-Databricks Delta Sharingこの記事では、Databricks がデータ共有のセキュリティで保護された接続を管理する プロトコルを使用して、共有されたデータを読み取る方法について説明します。Delta Sharing オープン共有 プロトコルとは異なり、Databricks-to-Databricksプロトコルは資格情報ファイル(トークンベースのセキュリティ)を必要としません。
Databricks-to-Databricks共有するには、受信者として、Databricksが有効になっているUnity Catalog ワークスペースにアクセスできる必要があります。
次のいずれかに該当する場合、この記事は適用されません。
- Unity Catalog が有効になっている Databricks ワークスペースがありません。
- Unity Catalog が有効になっている Databricks ワークスペースがありますが、プロバイダーはオープン共有プロトコルを使用しています (資格情報ファイルを提供します)。
このような場合は、 代わりに「Delta Sharing オープン共有を使用して共有されたデータを読み取る (受信者向け)」を参照してください。
共有データをチームで利用できるようにするにはどうすればよいですか?
プロトコルを使用して共有されているデータおよびノートブックを読み取るには、Databricks-to-Databricks Databricksが有効になっている ワークスペースのユーザーである必要があります。Unity Catalogチームのメンバーがデータ プロバイダーに Unity Catalog メタストアの一意の識別子を提供し、データ プロバイダーはその識別子を使用して組織との安全な共有接続を作成します。 その後、共有データはワークスペースで読み取りアクセスに使用できるようになり、データ プロバイダーが共有テーブル、ビュー、ボリューム、パーティションに対して行った更新は、ほぼリアルタイムでワークスペースに反映されます。
共有データ テーブル、ビュー、およびボリュームの更新は、ほぼリアルタイムでワークスペースに表示されます。 ただし、列の変更 (追加、名前変更、削除) は、最大 1 分間カタログエクスプローラーに表示されない場合があります。 同様に、新しい共有と共有の更新 (共有への新しいテーブルの追加など) は、表示およびクエリが使用可能になるまで 1 分間キャッシュされます。
共有されたデータを読み取るには:
- チームのユーザーは、共有されているテーブル、ビュー、ボリューム、ノートブックのコンテナーである 共有 を見つけ、その共有を使用して カタログ (Databricks Unity Catalog 内のすべてのデータの最上位コンテナー) を作成します。
- チームのユーザーが、カタログとカタログ内のオブジェクト(スキーマ、テーブル、ビュー、ボリューム)へのアクセスをチームの他のメンバーに許可または拒否します。
- アクセス権を付与されたテーブル、ビュー、ボリュームのデータは、読み取り専用 (
SELECT
またはREAD VOLUME
) アクセス権を持つ Databricks 内の他のデータ資産と同様に読み取ります。 - 共有内のノートブックをプレビューしてクローン化するには、カタログに対する
USE CATALOG
権限があります。
権限が必要です
すべてのプロバイダーとプロバイダー共有の詳細を一覧表示および表示するには、メタストア管理者であるか、 USE PROVIDER
特権を持っている必要があります。 他のユーザーは、自分が所有するプロバイダーと共有にのみアクセスできます。
プロバイダー共有からカタログを作成するには、メタストア管理者、 Unity Catalog メタストアに対する CREATE CATALOG
権限と USE PROVIDER
権限の両方を持つユーザー、またはプロバイダー オブジェクトの CREATE CATALOG
権限と所有権の両方を持つユーザーである必要があります。
共有から作成されたカタログ内のスキーマ (データベース)、テーブル、ビュー、ボリュームへの読み取り専用アクセスを許可する機能は、一般的な Unity Catalog 特権階層に従います。 共有から作成されたカタログ内のノートブックを表示する機能には、カタログに対する USE CATALOG
権限が必要です。 「Delta Sharing カタログ内のスキーマ、テーブル、ボリュームのアクセス許可を管理する」を参照してください。
プロバイダーと株式を見る
データ プロバイダーによって共有されたデータの読み取りを開始するには、 プロバイダー の名前を把握し、プロバイダーがデータを共有した後に Unity Catalog メタストアに格納されているオブジェクト を共有する 必要があります。
プロバイダー オブジェクトは、Unity Catalog メタストア、クラウド プラットフォーム、およびデータを共有した組織のリージョンを表します。
共有オブジェクトは、プロバイダーがあなたと共有しているテーブル、ボリューム、ビューを表します。
データを共有しているすべてのプロバイダーを表示する
使用可能なデータ プロバイダーの一覧を表示するには、Catalog Explorer、Databricks Unity Catalog CLI、または Databricks ノートブックまたは Databricks SQL クエリ エディターの SHOW PROVIDERS
SQL コマンドを使用できます。
必要な権限: メタストアの管理者であるか、USE PROVIDER
権限を持っている必要があります。 他のユーザーは、自分が所有するプロバイダーとプロバイダーシェアにのみアクセスできます。
詳細については、「プロバイダーを表示する」を参照してください。
プロバイダーの詳細を表示
プロバイダーの詳細を表示するには、カタログ エクスプローラー、 、または ノートブックまたはDatabricksUnity CatalogCLIDESCRIBE PROVIDER
SQLDatabricksDatabricks SQL クエリ エディターの コマンドを使用できます。
必要な権限: メタストアの管理者であるか、USE PROVIDER
権限を持っているか、プロバイダーオブジェクトを所有している必要があります。
詳細については、「 プロバイダーの詳細を表示する」を参照してください。
株式を見る
プロバイダーが共有している共有を表示するには、カタログ エクスプローラー、Databricks Unity Catalog CLI、または Databricks ノートブックまたは Databricks SQL クエリー エディターの SHOW SHARES IN PROVIDER
SQL コマンドを使用できます。
必要な権限: メタストアの管理者であるか、USE PROVIDER
権限を持っているか、プロバイダーオブジェクトを所有している必要があります。
詳細については、「プロバイダーが 共有した共有を表示する」を参照してください。
共有テーブルまたはボリューム内のデータへのアクセス
共有テーブルまたはボリュームのデータを読み取るには:
- 特権ユーザーは、テーブルまたはボリュームを含む共有からカタログを作成する必要があります。 これは、メタストア管理者、Unity Catalog メタストアに対する
CREATE CATALOG
特権とUSE PROVIDER
特権の両方を持つユーザー、またはプロバイダー オブジェクトのCREATE CATALOG
特権と所有権の両方を持つユーザーです。 - そのユーザーまたは同じ権限を持つユーザーから、共有テーブルまたはボリュームへのアクセス権が付与されている必要があります。
- テーブルまたはボリュームには、Unity Catalog メタストアに登録されている他のデータ資産と同様にアクセスできます。
共有からカタログを作成します
共有内のデータにチームがアクセスできるようにするには、共有からカタログを作成する必要があります。 共有からカタログを作成するには、Catalog Explorer、Databricks Unity Catalog CLI、または Databricks ノートブックまたは Databricks SQL クエリエディターの SQL コマンドを使用できます。
必要なアクセス許可 : メタストア管理者、Unity Catalog メタストアに対する CREATE CATALOG
と USE PROVIDER
の両方の特権を持つユーザー、またはプロバイダー オブジェクトの CREATE CATALOG
特権と所有権の両方を持つユーザー。
共有にビューが含まれている場合は、プロバイダーのメタストア内のビューを含むカタログの名前とは異なるカタログ名を使用する必要があります。
- Catalog Explorer
- SQL
- CLI
-
In your Databricks workspace, click
Catalog to open Catalog Explorer.
-
At the top of the Catalog pane, click the
gear icon and select Delta Sharing.
Alternatively, from the Quick access page, click the Delta Sharing > button.
-
On the Shared with me tab, find and select the provider.
-
On the Shares tab, find the share and click Create catalog on the share row.
-
Enter a name for the catalog and optional comment.
-
Click Create.
Alternatively, when you open Catalog Explorer, you can click Create Catalog in the upper right to create a shared catalog. See Create catalogs.
Run the following command in a notebook or the Databricks SQL query editor.
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 コマンドを実行することで表示できます。 すべての共有カタログは、カタログ エクスプローラの左ペインの [カタログ エクスプローラ] > [共有 ] に一覧表示されます。
Delta Sharing カタログは、Unity Catalog メタストアの通常のカタログと同じ方法で管理できます。Delta Sharing カタログを表示、更新、削除するには、Catalog Explorer、Databricks CLI、および SHOW CATALOGS
、 DESCRIBE CATALOG
、 ALTER CATALOG
、 DROP CATALOG
SQL コマンドを使用します。
共有から作成された Delta Sharing カタログの 3 レベルの名前空間構造は、Unity Catalog の通常のカタログ ( catalog.schema.table
または catalog.schema.volume
) の名前空間構造と同じです。
共有カタログの下のテーブルとボリュームのデータは読み取り専用であるため、次のような読み取り操作を実行できます。
DESCRIBE
、SHOW
、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 ユーザーとして使用できるツール (Catalog Explorer、ノートブック、 SQL クエリ、 Databricks CLI、 Databricks REST APIs) のいずれかのツールを使用できます。 テーブルに対する SELECT
権限が必要です。
共有ボリューム内のデータの読み取り
共有ボリューム内のデータを読み取るには、 Databricks ユーザーが使用できるツール (Catalog Explorer、ノートブック、 SQL queries、the the 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
:UPDATE
、MERGE INTO
、DELETE
(パーティション内)、OVERWRITE
などのデータ変更操作によってソース テーブル内のファイルが書き換えられた場合は、更新を再処理します。 変更されていない行は引き続き出力できます。 したがって、ダウンストリームの消費者は重複を処理できる必要があります。 削除はダウンストリームに反映されません。ignoreChanges
はignoreDeletes
を包含します。 したがって、ignoreChanges
を使用する場合、ソーステーブルの削除や更新によってストリームが中断されることはありません。startingVersion
: 開始する共有テーブルのバージョン。 このバージョン (包括的) 以降のすべてのテーブル変更は、ストリーミング ソースによって読み取られます。startingTimestamp
: 開始するタイムスタンプ。 タイムスタンプ (この値を含む) 以降にコミットされたすべてのテーブル変更は、ストリーミング ソースによって読み取られます。 例:"2023-01-01 00:00:00.0"
maxFilesPerTrigger
: すべてのマイクロバッチで考慮される新しいファイルの数。maxBytesPerTrigger
: 各マイクロバッチで処理されるデータの量。 このオプションは、バッチがほぼこの量のデータを処理し、最小入力単位がこの制限より大きい場合にストリーミングクエリを前進させるために制限を超えて処理する可能性があることを意味します。readChangeFeed
: ストリーム 共有テーブルのチェンジデータフィードを読み取ります。
サポートされていないオプション:
Trigger.availableNow
サンプル構造化ストリーミング クエリ
- Scala
- Python
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ウェアハウスまたは 14.1 以降を実行しているクラスターを使用して、テーブル Databricks Runtime バッチ読み取りを実行できます。 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-to-Databricks共有ビューでサポートされる関数を参照してください。
命名要件:
ビューを含む共有カタログに使用するカタログ名は、ビューによって参照されるテーブルを含むプロバイダー カタログと同じにすることはできません。 たとえば、共有ビューが test
カタログに含まれており、そのビューで参照されるプロバイダーのテーブルの 1 つがプロバイダーの test
カタログに含まれている場合、クエリは名前空間の競合エラーになります。 「共有からのカタログの作成」を参照してください。
履歴とストリーミング:
履歴をクエリしたり、ビューをストリーミングソースとして使用したりすることはできません。
オープン共有でのサポートを表示します。
この記事の手順では、Databricks ユーザー インターフェイス (特に Unity Catalog の構文とインターフェイス) を使用して共有データを読み取ることに焦点を当てています。 また、Apache Spark、Python、Tableau や Power BI などの BI ツールを使用して、共有ビューのクエリを実行することもできます。
費用:
ビュー共有のコストには、次の 2 つの潜在的なソースがあります。
- コンピュートの費用は、 Databricksによって請求されます。
- ストレージおよびネットワーク転送 (エグレス) のコスト (ストレージ ベンダーによって請求されます)。
コンピュート コストは、受信者のタイプに基づいています コンピュート リソース:
Recipient コンピュート | 誰が支払うのですか? | sku |
---|---|---|
Databricks のサーバーレス | RECIPIENT | サーバレス SKU 受信者によって使用されます |
Databricks クラシック | RECIPIENT | Interactive サーバレス |
Delta Sharing コネクタを開く | PROVIDER | Interactive サーバレス |
共有ノートブックを読む
共有ノートブック ファイルをプレビューしてクローンを作成するには、カタログ エクスプローラーを使用できます。
必要な権限: カタログの所有者または共有から作成されたカタログに対する USE CATALOG
権限を持つユーザー。
-
Databricks ワークスペースで、[
カタログ] をクリックします。
-
左側のペインで、 カタログメニューを展開し 、共有から作成されたカタログを見つけて選択します。
-
[その他のアセット ] タブには、共有ノートブック ファイルが表示されます。
-
共有ノートブック ファイルの名前をクリックしてプレビューします。
-
(オプション) 「クローン 」ボタンをクリックして、共有ノートブックファイルをワークスペースにインポートします。
- [クローン先 ]ダイアログで、必要に応じて [新しい名前 ]を入力し、ノートブックファイルのクローンを作成するワークスペースフォルダを選択します。
- [ クローンを作成 ] をクリックします。
- ノートブックがクローンされると、正常にクローン作成されたことを知らせるダイアログが表示されます。 ダイアログの ノートブックエディタで表示 をクリックして、ノートブックエディタで表示します。
「Databricks ノートブックの概要」を参照してください。