メインコンテンツまでスキップ

Unity Catalog ボリュームとは

ボリュームは、表形式以外のデータセットに対するガバナンスを可能にする Unity Catalog オブジェクトです。 ボリュームは、クラウド・オブジェクト・ストレージ・ロケーション内のストレージの論理ボリュームを表します。 ボリュームは、ファイルへのアクセス、保存、管理、および整理の機能を提供します。

テーブルは表形式のデータセットに対するガバナンスを提供しますが、ボリュームは非表形式のデータセットに対するガバナンスを追加します。 ボリュームを使用して、構造化データ、半構造化データ、非構造化データなど、任意の形式のファイルを格納し、アクセスすることができます。

Databricks では、すべての非表形式データへのアクセスを管理するためにボリュームを使用することを推奨しています。 テーブルと同様に、ボリュームはマネージドまたは外部にすることができます。

important

ボリュームをテーブルのロケーションとして使用することはできません。 ボリュームは、パスベースのデータアクセスのみを目的としています。 Unity Catalog で表形式データを操作する場合は、テーブルを使用します。

次の記事では、ボリュームの操作に関する詳細情報を提供します。

注記

ボリュームを操作する場合は、カタログ エクスプローラーなどのDatabricksのUI を使用していない限り、SQLウェアハウスあるいはDatabricks Runtime LTS13.3 以上を実行しているクラスターを使用する必要があります。

管理ボリュームとは何ですか?

管理ボリューム は、含まれているスキーマの管理されたストレージの場所内に作成された、Unity Catalog によって管理されるストレージボリュームです。「Unity Catalog で管理されたストレージの場所を指定する」を参照してください。

マネージドボリュームを使用すると、外部ロケーションやストレージ資格情報のオーバーヘッドなしで、ファイルを操作するためのマネージドストレージを作成できます。 マネージドボリュームの作成時にロケーションを指定する必要はなく、マネージドボリューム内のデータに対するすべてのファイルアクセスは、Unity Catalog によって管理されるパスを介して行われます。

外部ボリュームとは何ですか?

外部ボリュームは、 Unity Catalog管理のストレージ資格情報を使用して外部ロケーション内のディレクトリに対して登録された、Unity Catalog管理のストレージ ボリュームです。

Unity Catalog では、外部ボリューム内のファイルのライフサイクルとレイアウトは管理されません。 外部ボリュームをドロップしても、Unity Catalog は基になるデータを削除しません。

ボリューム内のファイルにアクセスするためにどのパスが使用されますか?

ボリュームは、Unity Catalog の 3 レベル名前空間 (catalog.schema.volumeの 3 番目のレベルにあります。

ボリュームに焦点を当てた Unity Catalog オブジェクト モデル図

ボリュームへのアクセスパスは、Apache Spark、SQL、Python、またはその他の言語やライブラリのいずれを使用する場合でも同じです。 これは、Databricks ワークスペースにバインドされたオブジェクト ストレージ内のファイルに対する従来のアクセス パターンとは異なります。

ボリューム内のファイルにアクセスするためのパスは、次の形式を使用します。

/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>

Databricks では、Apache Spark を使用する場合、オプションの dbfs:/ スキームもサポートされているため、次のパスも機能します。

dbfs:/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>

パス内のシーケンス /<catalog>/<schema>/<volume> は、ファイルに関連付けられている 3 つの Unity Catalog オブジェクト名に対応します。 これらのパス要素は読み取り専用であり、ユーザーが直接書き込むことはできないため、ファイルシステム操作を使用してこれらのディレクトリを作成または削除することはできません。 これらは自動的に管理され、対応する Unity Catalog エンティティと同期されます。

注記

また、クラウドストレージのURIを使用して、外部ボリューム内のデータにアクセスすることもできます。

ボリューム用のリザーブドパス

ボリュームでは、ボリュームへのアクセスに使用される次の予約済みパスが導入されています。

  • dbfs:/Volumes
  • /Volumes
注記

パスは、 Apache Spark APIsおよび dbutils からのこれらのパスの潜在的なタイポのために予約されており、dbfs:/ が先行するかどうかに関係なく、/volumes/Volume/volume が含まれます。 パス /dbfs/Volumes も予約されていますが、ボリュームへのアクセスには使用できません。

ボリュームは、Databricks Runtime 13.3 LTS 以降でのみサポートされます。 Databricks Runtime 12.2 LTS 以前では、/Volumes パスに対する操作は成功する可能性がありますが、コンピュート クラスターにアタッチされたエフェメラル ストレージ ディスクにのみデータを書き込むことができます。これは、期待どおりにデータを Unity Catalog ボリュームに永続化するのではなく、コンピュート クラスターにアタッチされています。

important

DBFSルートの予約済みパスに既存のデータが保存されている場合は、サポート チケットを提出して、このデータに一時的にアクセスし、別の場所に移動できます。

制限

Unity CatalogUnity Catalogボリュームを操作するには、 対応コンピュートを使用する必要があります。ボリュームは、すべてのワークロードをサポートしているわけではありません。

次の表は、Databricks Runtime のバージョンに基づく Unity Catalog のボリューム制限の概要を示しています。

Databricks Runtimeのバージョン

制限事項

14.3 LTS以上

  • 専用アクセス・モード (旧シングル・ユーザー・アクセス・モード) のコンピュートでは、 Scalaのスレッドおよびサブプロセスからボリュームにアクセスすることはできません。

14.2 以下

  • 標準アクセス モード (以前の共有アクセス モード) で構成されたコンピュートでは、UDF を使用してボリュームにアクセスすることはできません。

    • Python と Scala はどちらもドライバーから FUSE にアクセスできますが、エグゼキューターからはアクセスできません。
    • I/O 操作を実行する Scala コードは、ドライバーでは実行できますが、エグゼキューターでは実行できません。
  • 専用アクセスモードで構成されたコンピュートでは、 Scalaでの FUSE、ボリュームパスを使用してデータにアクセスする Scala IO コード、または Scala UDF はサポートされていません。 Python UDFs は、専用アクセスモードでサポートされています。

サポートされているすべての Databricks Runtime バージョン

  • ボリュームは dbutils.fs エグゼキューターに配布されるコマンドをサポートしていません。
  • Unity Catalog UDF は、ボリューム ファイル パスへのアクセスをサポートしていません。
  • RDD からボリュームにアクセスすることはできません。
  • spark-submit は、ボリュームに格納された JAR では使用できません。
  • wheel または JAR ファイル内のボリュームパスを介してアクセスされるほかのライブラリへの依存関係を定義することはできません。
  • /Volumes/<catalog-name> パターンや /Volumes/<catalog-name>/<schema-name> パターンを使用して Unity Catalog オブジェクトを一覧表示することはできません。ボリューム名を含む 完全修飾パス ( Volumes/<catalog-name>/<schema-name>/<volume-name>の形式) を使用する必要があります。例えば dbutils.fs.ls("/Volumes/MyCatalog/MySchema/MyVolume")
  • REST API の DBFS エンドポイントは、ボリューム パスをサポートしていません。
  • クラスター・ログ配信の宛先としてボリュームを指定することはできません。
  • %sh mv は、ボリューム間でのファイル移動はサポートされていません。 代わりに dbutils.fs.mv または %sh cp を使用してください。
  • ボリュームを持つカスタム Hadoop ファイルシステムは作成できません。 たとえば、 new Path("dbfs:/Volumes/main/default/test-volume/file.txt") を使用して org.apache.hadoop.fs.path オブジェクトを作成することはできません。