Unity Catalog Volumes lets you govern files that cannot be structured as Delta Lake tables — raw CSV/JSON/Parquet files, images, ML model artifacts, configuration files, and so on. You can apply UC permission control, auditing, and lineage to the non-table files that used to be managed via DBFS or direct cloud-storage mounts.
This article walks through an overview of Volumes, the difference between Managed and External, SQL/Python examples for creating and operating them, a comparison with DBFS, the permission model, and the points the exam tends to test.
A Volume is an object in the Unity Catalog namespace (Catalog → Schema → Volume) and acts as a container for files. While tables manage structured data as rows and columns, Volumes manage files and directories.
/Volumes/<catalog>/<schema>/<volume>/<path>| Comparison | Managed Volume | External Volume |
|---|---|---|
| Storage management | Managed automatically by Unity Catalog | Cloud storage path specified by the user |
| Data on DROP | Data is deleted as well | Only metadata is removed; data remains |
| External Location | Not required | Must be created beforehand |
| Storage Credential | Not required | Required via the External Location |
| Ingesting existing data | Files must be copied | Existing paths can be referenced as-is |
| Recommended use case | Managing new files or temporary files | Bringing an existing data lake under UC governance |
-- Create a Managed Volume
CREATE VOLUME prod.raw.landing_files
COMMENT 'Managed Volume for landing CSV and JSON files';
-- Create an External Volume
-- An External Location and Storage Credential must exist first
CREATE EXTERNAL VOLUME prod.raw.external_landing
LOCATION 's3://my-bucket/landing/'
COMMENT 'External Volume pointing at an existing S3 bucket';
-- Check the Volume
SHOW VOLUMES IN prod.raw;
-- Volume details
DESCRIBE VOLUME prod.raw.landing_files;
-- Drop the Volume
DROP VOLUME prod.raw.landing_files;Files inside a Volume can be operated on via SQL, dbutils, or the Python API.
-- SQL: list files
LIST '/Volumes/prod/raw/landing_files/2026/03/';
-- SQL: upload a file (from a notebook)
PUT '/Volumes/prod/raw/landing_files/config.json'
OVERWRITE;
-- SQL: delete a file
REMOVE '/Volumes/prod/raw/landing_files/old_data.csv';# Python / dbutils: list files
files = dbutils.fs.ls("/Volumes/prod/raw/landing_files/")
for f in files:
print(f.name, f.size)
# Python: read a file
df = spark.read.csv(
"/Volumes/prod/raw/landing_files/sales_2026.csv",
header=True,
inferSchema=True
)
# Python: write a file
df.write.mode("overwrite").parquet(
"/Volumes/prod/raw/landing_files/output/"
)
# Python: copy a file
dbutils.fs.cp(
"/Volumes/prod/raw/landing_files/config.json",
"/Volumes/prod/raw/landing_files/backup/config.json"
)| Comparison | DBFS | Volumes |
|---|---|---|
| Governance | None (workspace ACLs only) | Controlled by Unity Catalog permissions |
| Access control | Per workspace | Per catalog/schema/volume |
| Audit logs | Limited | All operations recorded in the audit log |
| Path format | dbfs:/mnt/... or /dbfs/... | /Volumes/catalog/schema/volume/... |
| Cross-workspace access | Not possible (confined to a workspace) | Possible (within the same Metastore) |
| Future direction | Being phased out | Recommended (new features land on Volumes) |
Permissions on a Volume are granted at the volume level. You cannot set per-file permissions; READ/WRITE at the volume level is the finest granularity.
-- Grant read access
GRANT READ VOLUME ON VOLUME prod.raw.landing_files TO `data-analysts`;
-- Grant write access
GRANT WRITE VOLUME ON VOLUME prod.raw.landing_files TO `data-engineers`;
-- Grant the privilege to create Volumes (schema level)
GRANT CREATE VOLUME ON SCHEMA prod.raw TO `data-engineers`;
-- Check the privileges
SHOW GRANTS ON VOLUME prod.raw.landing_files;READ VOLUME allows reading and listing files, while WRITE VOLUME allows writing and deleting files. Note that these are independent of the table SELECT permission: reading files via a Volume requires READ VOLUME, and querying a table requires SELECT.
Data Engineer Associate
Question 1
A data engineer wants to store CSV files received daily from an external vendor under Unity Catalog and build a pipeline that ingests them with Auto Loader. They created a Managed Volume as the landing target. Six months later, they run DROP SCHEMA to migrate the schema to a different catalog. What happens to the CSV files?
Correct answer: A
Managed Volume has Unity Catalog manage the storage lifecycle, so data is deleted alongside the schema or volume on DROP. Use External Volume if you want the data to remain. DROP SCHEMA CASCADE cascades the deletion to objects including volumes.
When should I choose Managed Volume vs External Volume?
Managed Volume has Unity Catalog manage storage automatically, so data is deleted when the catalog or schema is dropped. It fits small-to-medium file management or cases where you want the catalog to own the lifecycle. External Volume references an existing S3/ADLS/GCS path, so data remains even after a DROP. It fits placing an existing data lake under UC governance or sharing files with external systems.
What is the difference between Volumes and DBFS?
Volumes is a governance mechanism for files under Unity Catalog, supporting READ VOLUME/WRITE VOLUME permissions, audit logs, and lineage tracking. DBFS is a legacy per-workspace file system that does not respect UC permissions and cannot be managed across workspaces. Volumes is recommended for new development, while DBFS is being phased out.
How do I access files stored in Volumes from Spark?
Files inside Volumes are accessed via the path /Volumes/<catalog>/<schema>/<volume>/<path>. You can read them directly with the DataFrame API, e.g. spark.read.csv('/Volumes/prod/raw/landing/sales.csv'). dbutils.fs.ls('/Volumes/prod/raw/landing/') also lists files. Unity Catalog permissions apply at the path level, so users without READ VOLUME cannot read the files.
Practice with certification-focused question sets
Try free questionsNicheeLab Editorial Team
NicheeLab editorial team focused on data engineering and cloud certification learning. Content is structured around practical study needs and official exam domains.
Databricks Certifications: All 7 Exams, Difficulty & Study Plan (2026)
Complete guide to all 7 Databricks certifications — Data Eng...
Databricks Exam Difficulty Ranking: All 7 Certs Compared (2026)
Every Databricks certification ranked by difficulty, with st...
Databricks Study Guide: Fastest Pass Route & Time Estimates (2026)
How to pass Databricks certifications efficiently. Official ...
Databricks Data Engineer Associate: Complete Guide (2026)
Domain-by-domain breakdown of the Databricks Certified Data ...
Databricks Data Engineer Professional: Complete Guide (2026)
Tactics for the Databricks Certified Data Engineer Professio...