Databricksで非テーブルファイル(CSV、JSON、画像、設定ファイル等)を扱うとき、 従来はDBFS(Databricks File System)が使われてきました。しかしUnity Catalogの登場以降、 Volumesが新しい標準として推奨されています。この記事では、DBFSとVolumesの違いを5つの軸で比較し、 既存DBFSからVolumesへの具体的な移行手順を解説します。
DBFSはDatabricksワークスペースに組み込まれたファイルシステム抽象レイヤーです。 クラウドストレージ(S3 / ADLS / GCS)をdbfs:/パスでマウントし、 ローカルファイルシステムのようにアクセスできます。
dbfs:/mnt/data/sales.csv または /dbfs/mnt/data/sales.csvDBFSの最大の問題はガバナンスの欠如です。DBFSはワークスペースACLで管理されるため、 Unity Catalogの権限(GRANT/REVOKE)が適用されず、誰がどのファイルにアクセスしたかの 詳細な監査も困難です。
VolumesはUnity Catalogの名前空間に属するファイルストレージです。/Volumes/<catalog>/<schema>/<volume>/のパスで、 Unity Catalogの権限制御・監査・リネージがファイルにも適用されます。
/Volumes/prod/raw/landing/sales.csv| 比較軸 | DBFS | Volumes |
|---|---|---|
| ガバナンス | なし。ワークスペースACLのみで、UC権限は非適用 | Unity Catalog管理。GRANT/REVOKEで宣言的に制御 |
| アクセス制御 | ワークスペース管理者がマウント設定。ファイル単位の制御は不可 | READ VOLUME / WRITE VOLUMEでボリューム単位の制御 |
| マウント | dbutils.fs.mount()でクラウドストレージをマウント | マウント不要。External Volumeで既存パスを直接参照 |
| パス形式 | dbfs:/mnt/... または /dbfs/mnt/... | /Volumes/catalog/schema/volume/... |
| 推奨度 | レガシー。新規開発での使用は非推奨 | 推奨。新機能はVolumesに実装される |
# DBFSマウントの一覧を取得
mounts = dbutils.fs.mounts()
for m in mounts:
print(f"Mount: {m.mountPoint} -> {m.source}")
# DBFS Root のファイル一覧
files = dbutils.fs.ls("dbfs:/")
for f in files:
print(f.name, f.size, f.isDir())-- 既存のS3パスをExternal Volumeとして登録(データコピー不要)
CREATE EXTERNAL VOLUME prod.raw.legacy_mount
LOCATION 's3://my-legacy-bucket/data/'
COMMENT 'DBFSマウントから移行したExternal Volume';
-- 新規ファイル用にManaged Volumeを作成
CREATE VOLUME prod.raw.new_landing
COMMENT '新規パイプライン用のManaged Volume';# DBFSからVolumesへファイルをコピー
dbutils.fs.cp(
"dbfs:/mnt/old-landing/sales/",
"/Volumes/prod/raw/new_landing/sales/",
recurse=True
)
# コピー結果の確認
files = dbutils.fs.ls("/Volumes/prod/raw/new_landing/sales/")
print(f"Copied {len(files)} files")# Before: DBFSパス
df = spark.read.csv("dbfs:/mnt/old-landing/sales/2026/*.csv")
# After: Volumesパス
df = spark.read.csv("/Volumes/prod/raw/new_landing/sales/2026/*.csv")-- 読み取り権限
GRANT READ VOLUME ON VOLUME prod.raw.new_landing TO `data-analysts`;
-- 書き込み権限
GRANT WRITE VOLUME ON VOLUME prod.raw.new_landing TO `data-engineers`;# 移行完了後にマウントを解除
dbutils.fs.unmount("/mnt/old-landing")Databricksは2024年以降、DBFS Rootへのデフォルトアクセスを制限する方向で進めています。 新規ワークスペースではDBFS Rootの書き込みがデフォルト無効になるケースが増えています。
Data Engineer Associate
問題 1
セキュリティチームから「S3バケットにマウントされたCSVファイルへのアクセスをUnity Catalogの権限で制御したい」と要望があった。現在はdbfs:/mnt/s3-data/でマウントされている。最も適切な対応はどれか。
正解: A
Unity Catalogの権限でファイルアクセスを制御するにはVolumesが必要です。External VolumeでS3パスを参照すれば、データのコピーなしにREAD/WRITE VOLUME権限で制御できます。DBFSにはdbutils.fs.setPermission()メソッドは存在しません。IAMポリシーはUC管理外です。DBFS RootにもUC権限は適用されません。
DBFSマウントは今すぐ廃止すべきですか?
即座に廃止する必要はありませんが、新規開発ではVolumesを使うべきです。既存パイプラインのDBFSマウントは段階的にVolumesへ移行するのが現実的です。Databricksは新しいワークスペースでのDBFS Root書き込みをデフォルト無効にするなど、段階的にDBFSの利用を制限する方向です。移行計画を立てておくことを推奨します。
DBFS上のファイルをVolumesに移行する最も簡単な方法は?
dbutils.fs.cp()でDBFSパスからVolumesパスにコピーするのが最も簡単です。大量ファイルの場合は、Sparkのバッチ処理でコピーするか、クラウドプロバイダーのストレージ間コピーツール(AWS CLI、azcopy等)を使います。External Volumeで既存のS3/ADLSパスを直接参照する方法であれば、ファイルのコピー自体が不要です。
試験でDBFS vs Volumesはどう出題されますか?
Data Engineer Associate/Professionalの両方で出題されます。主な出題パターンは「ガバナンスが必要な非テーブルファイルの保存先としてどちらが適切か」(→ Volumes)、「DBFSマウントの欠点は何か」(→ UC権限が効かない、ワークスペース横断不可)、「/Volumes/と/dbfs/のパス形式の違い」です。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...