Databricks

DBFS と Volumes の違いと移行ガイド|5軸比較・移行SQL・廃止スケジュール

2026-03-26
更新: 2026-03-27
NicheeLab編集部

Databricksで非テーブルファイル(CSV、JSON、画像、設定ファイル等)を扱うとき、 従来はDBFS(Databricks File System)が使われてきました。しかしUnity Catalogの登場以降、 Volumesが新しい標準として推奨されています。この記事では、DBFSとVolumesの違いを5つの軸で比較し、 既存DBFSからVolumesへの具体的な移行手順を解説します。

DBFS(Databricks File System)概要

DBFSはDatabricksワークスペースに組み込まれたファイルシステム抽象レイヤーです。 クラウドストレージ(S3 / ADLS / GCS)をdbfs:/パスでマウントし、 ローカルファイルシステムのようにアクセスできます。

  • DBFS Root: ワークスペース作成時に自動的に用意される既定のストレージ
  • DBFS Mount: 外部のクラウドストレージをdbfs:/mnt/...にマウントして使う方式
  • パス形式: dbfs:/mnt/data/sales.csv または /dbfs/mnt/data/sales.csv

DBFSの最大の問題はガバナンスの欠如です。DBFSはワークスペースACLで管理されるため、 Unity Catalogの権限(GRANT/REVOKE)が適用されず、誰がどのファイルにアクセスしたかの 詳細な監査も困難です。

Volumes概要

VolumesはUnity Catalogの名前空間に属するファイルストレージです。/Volumes/<catalog>/<schema>/<volume>/のパスで、 Unity Catalogの権限制御・監査・リネージがファイルにも適用されます。

  • Managed Volume: ストレージのライフサイクルをUCが管理(DROP時にデータ削除)
  • External Volume: 既存のクラウドストレージパスを参照(DROP時はメタデータのみ削除)
  • パス形式: /Volumes/prod/raw/landing/sales.csv

5軸比較表

比較軸DBFSVolumes
ガバナンスなし。ワークスペース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の具体的な制約

  • ワークスペースを横断したファイル共有ができない
  • マウントの認証情報がワークスペースに紐づくため、Credentialのローテーション時に全マウントの再設定が必要
  • DBFS Rootに書き込まれたデータは暗号化キーの管理がユーザー側で困難
  • Unity Catalogのリネージにファイル操作が反映されない
  • 同一マウントにアクセスする全ユーザーに同じ権限が適用されるため、最小権限の原則が実現しにくい

移行手順

ステップ1: 現在のDBFS利用状況の棚卸し

# 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())

ステップ2: 移行先Volumeの作成

-- 既存の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';

ステップ3: ファイルのコピー(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")

ステップ4: パイプラインのパス書き換え

# 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")

ステップ5: 権限の設定

-- 読み取り権限
GRANT READ VOLUME ON VOLUME prod.raw.new_landing TO `data-analysts`;

-- 書き込み権限
GRANT WRITE VOLUME ON VOLUME prod.raw.new_landing TO `data-engineers`;

ステップ6: DBFSマウントの解除

# 移行完了後にマウントを解除
dbutils.fs.unmount("/mnt/old-landing")

レガシーDBFSの段階的廃止

Databricksは2024年以降、DBFS Rootへのデフォルトアクセスを制限する方向で進めています。 新規ワークスペースではDBFS Rootの書き込みがデフォルト無効になるケースが増えています。

  • DBFS Rootの書き込み制限: 新規ワークスペースではデフォルト無効(管理者が有効化可能)
  • マウントの非推奨化: External VolumeまたはExternal Locationへの移行を推奨
  • dbutils.fs.mount()の将来的な廃止: 具体的な廃止日は未定だが、移行計画の策定を推奨

試験で問われるポイント

  • DBFSパスとVolumesパスの形式の違い
  • VolumesがDBFSより推奨される理由(ガバナンス・監査・ワークスペース横断)
  • External VolumeでDBFSマウントを置き換えられること
  • DBFS RootにUC権限が適用されないこと
  • 移行時にdbutils.fs.cpでファイルをコピーする手順

問題で確認

Data Engineer Associate

問題 1

セキュリティチームから「S3バケットにマウントされたCSVファイルへのアクセスをUnity Catalogの権限で制御したい」と要望があった。現在はdbfs:/mnt/s3-data/でマウントされている。最も適切な対応はどれか。

  1. External Volumeを作成してS3バケットのパスを指定し、READ VOLUME / WRITE VOLUME権限で制御する
  2. DBFSマウントの権限をdbutils.fs.setPermission()で変更する
  3. S3バケットのIAMポリシーでユーザーごとにアクセス制御する
  4. DBFS Root上にサブディレクトリを作成し、ワークスペースACLで制御する

正解: 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/のパス形式の違い」です。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Databricks

Databricks資格一覧|全7試験・難易度・勉強法

Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...

Databricks

Databricks試験の難易度ランキング|全7資格を徹底比較

Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...

Databricks

Databricks資格の勉強方法|最短合格ルートと学習時間の目安

Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...

Databricks

Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略

Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...

Databricks

Databricks Data Engineer Professional完全解説|上級試験の攻略法

Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...

Databricksの記事一覧 (105件)
© 2026 NicheeLab All rights reserved.