Unity Catalog ボリュームとは?
ボリュームは、表形式ではないデータセットのガバナンスを有効にする Unity Catalog オブジェクトです。 ボリュームにより、クラウド オブジェクトの保存場所にあるストレージの論理ボリュームが示されます。 ボリュームにより、ファイルのアクセス、格納、管理、整理を行うための機能が提供されます。
テーブルにより、表形式データセットに対するガバナンスが提供される一方、ボリュームにより、表形式以外のデータセットに対するガバナンスが追加されます。 ボリュームを使うと、構造化データ、半構造化データ、非構造化データなど、任意の形式でファイルの格納とアクセスを実行できます。
Databricks では、表形式以外のすべてのデータへのアクセスを管理するために、ボリュームを使用することをお勧めします。 テーブルと同じように、ボリュームはマネージドまたは外部に設定できます。
重要
ボリュームをテーブルの場所として使用することはできません。 ボリュームは、パスベースのデータ アクセスのみを目的としています。 Unity Catalog で表形式データを操作する場合は、テーブルを使用します。
ボリュームの操作の詳細については、次のリンクを参照してください。
Note
ボリュームを操作するときは、カタログ エクスプローラーなどの Azure Databricks UI を使っている場合を除き、Databricks Runtime 13.3 LTS 以降を実行している SQL ウェアハウスまたはクラスターを使う必要があります。
マネージド ボリュームとは
マネージド ボリュームは、含まれているスキーマのマネージド ストレージの場所に作成される、Unity Catalog によって管理されるストレージ ボリュームです。 「Unity Catalog の管理されたストレージの場所の指定」を参照してください。
マネージド ボリュームを使うと、外部の場所やストレージ資格情報のオーバーヘッドなしで、ファイルを操作するための管理されたストレージを作成できます。 マネージド ボリュームを作成するときに場所を指定する必要はありません。また、マネージド ボリューム内のデータに対するすべてのファイル アクセスは、Unity Catalog によって管理されるパスを介して行われます。
外部ボリュームとは
外部ボリュームは、Unity Catalog によって管理されるストレージ資格情報を使って外部の場所にあるディレクトリに対して登録された、Unity Catalog によって管理されるストレージ ボリュームです。
Unity Catalog では、外部ボリューム内のファイルのライフサイクルとレイアウトは管理されません。 外部ボリュームを削除しても、Unity Catalog では基になるデータは削除されません。
ボリューム内のファイルにアクセスするために使用されるパス
ボリュームは、Unity Catalog の 3 レベルある名前空間 (catalog.schema.volume
) の3 番目のレベルに位置します。
ボリュームにアクセスするためのパスは、Apache Spark、SQL、Python、またはその他の言語とライブラリを使う場合でも同じです。 これは、Azure Databricks ワークスペースにバインドされたオブジェクト ストレージ内のファイルに対する従来のアクセス パターンとは異なります。
ボリューム内のファイルにアクセスするためのパスでは、次の形式を使います。
/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>
Azure Databricks では、Apache Spark を使う場合にオプションの dbfs:/
のスキームもサポートされるため、次のパスも機能します。
dbfs:/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>
パス内のシーケンス /<catalog>/<schema>/<volume>
は、ファイルに関連付けられている 3 つの Unity Catalog オブジェクト名に対応します。 これらのパス要素は読み取り専用であり、ユーザーが直接書き込むことはできません。つまり、ファイルシステム操作を使ってこれらのディレクトリを作成または削除することはできません。 これらは自動で管理され、対応する Unity Catalog エンティティと同期されます。
Note
クラウド ストレージの URI を使用して、外部ボリュームのデータにアクセスすることもできます。
ボリュームの予約済みパス
ボリュームには、ボリュームへのアクセスに使われる次の予約済みパスが導入されています。
dbfs:/Volumes
/Volumes
Note
パスは、Apache Spark API と dbutils
からのこれらのパスの入力ミスの可能性も考慮して予約されています。前に dbfs:/
が付いているかどうかに関係なく、/volumes
、/Volume
、/volume
が含まれます。 パス /dbfs/Volumes
も予約されていますが、ボリュームへのアクセスには使用できません。
ボリュームは、Databricks Runtime 13.3 LTS 以降でのみサポートされています。 Databricks Runtime 12.2 LTS 以前では、/Volumes
パスに対する操作が成功する可能性がありますが、想定どおりに Unity Catalog ボリュームにデータを保持するのではなく、コンピューティング クラスターにアタッチされたエフェメラル ストレージ ディスクにデータが書き込まれる場合もあります。
重要
DBFS ルートの予約済みパスに格納されている既存のデータがある場合は、サポート チケットを提出してこのデータへの一時的なアクセス権を取得し、別の場所に移動することができます。
制限事項
Unity Catalog ボリュームを操作するには、Unity Catalog 対応コンピューティングを使用する必要があります。 すべてのワークロードがボリュームでサポートされているわけではありません。
Note
Executor に配布される dbutils.fs
コマンドはボリュームでサポートされていません。
次の制限事項が適用されます。
Databricks Runtime 14.3 LTS 以降:
- シングルユーザーのユーザー クラスターでは、Scala のスレッドとサブプロセスからボリュームにアクセスすることはできません。
Databricks Runtime 14.2 以前:
- 共有アクセス モードで構成されたコンピューティングでは、UDF を使用してボリュームにアクセスすることはできません。
- Python と Scala の両方がドライバーから FUSE にアクセスできますが、Executor からはアクセスできません。
- I/O 操作を実行する Scala コードは、ドライバーで実行できますが、Executor ではできません。
- シングル ユーザー アクセス モードで構成されたコンピューティングでは、Scala の FUSE、ボリューム パスを使用してデータにアクセスする Scala IO コード、または Scala UDF はサポートされません。 Python UDF は、シングル ユーザー アクセス モードでサポートされています。
すべてのサポートされている Databricks Runtime バージョン:
Unity Catalog UDF は、ボリューム ファイル パスへのアクセスをサポートしていません。
RDD からボリュームにアクセスすることはできません。
ボリュームに格納されている JAR では、spark-submit を使用できません。
Wheel または JAR ファイル内のボリューム パスを介してアクセスされる他のライブラリへの依存関係を定義することはできません。
/Volumes/<catalog-name>
パターンまたは/Volumes/<catalog-name>/<schema-name>
パターンを使って Unity Catalog オブジェクトを一覧表示することはできません。 ボリューム名を含む完全修飾パスを使う必要があります。REST API の DBFS エンドポイントは、ボリューム パスをサポートしていません。
クラスター ログの配信の宛先としてボリュームを指定することはできません。
ボリューム間でのファイルの移動では、
%sh mv
はサポートされていません。 代わりに、dbutils.fs.mv
タグまたは%sh cp
タグを使用してください。ボリュームを使ってカスタム Hadoop ファイル システムを作成することはできません。つまり、以下はサポートされていません。
import org.apache.hadoop.fs.Path val path = new Path("dbfs:/Volumes/main/default/test-volume/file.txt") val fs = path.getFileSystem(sc.hadoopConfiguration) fs.listStatus(path)
ボリュームは、Azure Government リージョンまたは FedRAMP 準拠のワークスペースでは使用できません。
Azure Data Factory ライブラリ構成パネルでは、
dbfs:/
スキームのパス形式を使う必要があります。 たとえば、dbfs:/Volumes/<catalog-name>/<schema-name>/<volume-name>/file
です。