Unity Catalog によって管理されるデータでのパスのしくみ
この記事では、Unity Catalog でのパスの重複に関する制限事項についての説明と Unity Catalog オブジェクト内にあるデータ ファイルのパス ベースのアクセス パターンについての詳しい説明を行うとともに、Unity Catalog でのテーブルとボリュームのパスの管理方法について説明します。
Note
ボリュームは、Databricks Runtime 13.3 LTS 以降でのみサポートされています。 Databricks Runtime 12.2 LTS 以降では、 /Volumes
パスに対する操作は成功する可能性がありますが、データを書き込むことができるのは、データを想定どおりに Unity カタログ ボリュームに保持するのではなく、コンピューティング クラスターに接続されたエフェメラル ストレージ ディスクのみです。
Unity Catalog オブジェクトのパスは重複できない
Unity Catalog では、データのマネージド ディレクトリが重複しないようにすることでデータ ガバナンスが適用されます。 Unity Catalog では、次の規則が適用されます。
- 外部の場所は、他の外部の場所とは重複できません。
- テーブルとボリュームによって、外部の場所またはメタストア ルートの場所にデータ ファイルが格納されます。
- ボリュームは、他のボリュームとは重複できません。
- テーブルは、他のテーブルとは重複できません。
- テーブルとボリュームは、相互に重複できません。
- 管理対象の保存場所は、互いに重複できません。 「Unity Catalog の管理されたストレージの場所の指定」を参照してください。
- 外部ボリュームは、管理対象の保存場所とは重複できません。
- 外部テーブルは、管理対象の保存場所とは重複できません。
これらの規則は、Unity Catalog に次の制限事項があることを意味します。
- 外部の場所を別の外部の場所内に定義することはできません。
- ボリュームを別のボリューム内に定義することはできません。
- テーブルを別のテーブル内に定義することはできません。
- テーブルをボリューム内のデータ ファイルまたはディレクトリ上に定義することはできません。
- ボリュームをテーブル内のディレクトリ上に定義することはできません。
Note
Delta Lake などのボリュームからデータ ファイルを書き込む、または読み取るには、パス ベースのアクセスを常に使うことができます。 これらのデータ ファイルを Unity Catalog メタストアのテーブルとして登録することはできません。
マネージド テーブルとマネージド ボリュームのパスが Unity Catalog によって完全に管理されている
マネージド テーブルまたはマネージド ボリュームを作成すると、Unity Catalog によって、格納されているスキーマに関連付けられている Unity Catalog の構成済みの保存場所に新しいディレクトリが作成されます。 このディレクトリの名前は、既に存在している他のディレクトリとの競合を回避するためにランダムに生成されます。
この動作は、Hive メタストアによるマネージド テーブルの作成方法とは異なります。 Databricks では、テーブル名を使って Unity Catalog マネージド テーブルを、ボリューム パスを使って Unity Catalog マネージド ボリュームを常に操作することをお勧めしています。
外部テーブルと外部ボリュームのパスは、Unity Catalog によって管理されます
外部テーブルまたは外部ボリュームを作成する場合は、Unity Catalog によって管理される外部の場所内にパスを指定します。
重要
Databricks では、外部ボリュームまたは外部テーブルを外部の場所のルートに作成することをお勧めしていません。 代わりに、外部の場所内にあるサブディレクトリに外部ボリュームと外部テーブルを作成してください。 これらの推奨事項は、パスが誤って重複しないようにするのに役立ちます。 「Unity Catalog オブジェクトのパスは重複できない」を参照してください。
使いやすさのために、Databricks では、テーブル名を使って Unity Catalog 外部テーブルを、ボリューム パスを使って Unity Catalog 外部ボリュームを操作することをお勧めしています。
別の方法として、対応する Unity Catalog オブジェクトに対する十分な権限を持つユーザーは、完全修飾されたクラウド オブジェクト ストレージ パスを使用して外部テーブルまたは外部ボリュームからデータにアクセスすることもできます。
重要
Unity Catalog を使うと、外部テーブルまたは外部ボリュームに関連付けられているデータへの、クラウド URI を使ったアクセスに対するすべての権限が管理されます。 これらの権限によって、外部の場所に関連付けられているすべての権限がオーバーライドされます。 「Unity Catalog の権限とセキュリティ保護可能なオブジェクト」を参照してください
どのようにすれば Unity Catalog 内のデータにアクセスできますか?
Unity Catalog オブジェクトを使うと、オブジェクト識別子、ボリューム パス、またはクラウド URI を介してデータにアクセスできます。 これらの値を使用して、ボリュームとテーブルに関連付けられているデータにアクセスできます。
Unity Catalog テーブルには、次のパターンの 3 層識別子を使ってアクセスします。
<catalog_name>.<schema_name>.<table_name>
Unity カタログのボリューム ファイル パスとは
ボリュームによって、次のパターンでデータ ファイルにアクセスするためのファイル パスが指定されます。
/Volumes/<catalog_name>/<schema_name>/<volume_name>/<path_to_file>
クラウド URI には、次の例のように、ユーザーが、ドライバー、ストレージ コンテナー識別子、ターゲット ファイルへの完全パスを指定する必要があります。
abfss://<container_name>@<storage_account>.dfs.core.windows.net/<path>
次の表は、Unity Catalog オブジェクトに対して許可されるアクセス機構を示しています。
Object | オブジェクト識別子 | ファイル パス | クラウド URI |
---|---|---|---|
外部の場所 | いいえ | no | はい |
マネージド テーブル | はい | no | いいえ |
外部テーブル | はい | no | はい |
マネージド ボリューム | いいえ | はい | いいえ |
外部ボリューム | いいえ | はい | はい |
Note
Unity Catalog ボリュームには、管理コマンド (CREATE VOLUME
や DROP VOLUME
など) に対して次のパターンを持つ 3 層オブジェクト識別子を使います。
<catalog_name>.<schema_name>.<volume_name>
ボリューム内のファイルを実際に操作するには、パス ベースのアクセスを使う必要があります。