Short enough to read between meetings
Every issue is a 10-minute read: one tactic, one pattern, one answered question.
DBFS mounts are a deprecated pattern — and the deprecation is now a hard break. Mounts don't work on serverless compute or Unity Catalog, bypass UC governance entirely, and don't exist on workspaces provisioned after September 30, 2026. This issue's six-step ladder migrates /mnt/ paths to Unity Catalog volumes.
Every issue is a 10-minute read: one tactic, one pattern, one answered question.
Copy-paste PySpark and SQL checked against official Databricks docs.
Claims link to primary sources — official docs and verified community deep-dives; no invented benchmarks.
DBFS mounts are a deprecated pattern — and the deprecation is now a hard break. Mounts don't work on serverless compute or Unity Catalog, bypass UC governance entirely, and don't exist on workspaces provisioned after September 30, 2026. This issue's six-step ladder migrates /mnt/ paths to Unity Catalog volumes.
Find mounts, FileStore dependencies, init scripts, libraries, notebooks, and code before target compute finds them for you.
Read Issue 028 →Use an external volume for existing cloud data, copy DBFS-root files, and cut reads over to governed paths.
Read Issue 028 →Serverless and new UC-only workspaces do not provide the legacy mount your notebook expects.
Read Issue 028 →Last verified against official Databricks documentation: October 16, 2026. Correction history: none (new issue).
Continue: Read the full Issue 028 article →
Run a mount inventory BEFORE your next workspace or serverless move: list every mount with dbutils.fs.mounts(), then grep your notebooks and jobs for /mnt/, dbfs:/FileStore, and dbfs:/databricks/init. Rule of thumb: /mnt/ data becomes a Unity Catalog volume; notebooks and code become workspace files or Git folders; JARs and wheels become volumes too. Init scripts move to volumes on classic compute — but serverless doesn't run init scripts at all, so a serverless move means switching to serverless environments instead.
Continue: Read the full Issue 028 article →
dbutils.fs.mounts(); grep notebooks, jobs, and libraries for /mnt/, dbfs:/FileStore, and dbfs:/databricks/init.CREATE EXTERNAL VOLUME IF NOT EXISTS main.data.raw_files LOCATION 's3://my-bucket/csv-files/'; — LOCATION takes a full cloud-storage URI (the external location from step 2 must cover that path). When files already live in cloud storage, no data movement is needed. For brand-new file collections, a managed volume (no LOCATION) is the simpler choice.dbutils.fs.cp("dbfs:/FileStore/…", "/Volumes/<cat>/<sch>/<vol>/…"); large sets go through the Databricks CLI fs cp -r or a distributed Spark copy./Volumes/<catalog>/<schema>/<volume>/… and grant USE CATALOG + USE SCHEMA + READ VOLUME (writers also need WRITE VOLUME).dbutils.fs.ls("/Volumes/<cat>/<sch>/<vol>/") from serverless or the new workspace), then clean up: dbutils.fs.unmount("/mnt/oldpath") — and lock down or delete the moved DBFS-root data. Do not keep the same cloud storage prefix both mounted and registered.Also: JARs and Python wheels move to UC volumes; notebooks and code move to workspace files or Git folders — not to volumes. Init scripts are compute-scoped: on classic UC compute, store them in UC volumes — but serverless compute does not run init scripts at all, so a serverless move replaces them with serverless environments (a base environment or notebook dependencies).
Recommended learning: DataCamp Databricks courses · DataCamp data engineering
Full walkthrough: Read Issue 028 →
Replace the mount with a governed volume path, then verify it on target compute before cutting over.
Because the mount doesn't exist there. Mounts are incompatible with serverless compute, and workspaces provisioned after September 30, 2026 aren't provisioned with DBFS root or mounts at all — the /mnt/... path your notebook references simply has nothing behind it on that compute. The fix is the migration: register the bucket prefix as an external volume, re-point reads to /Volumes/<catalog>/<schema>/<volume>/…, and grant USE CATALOG + USE SCHEMA + READ VOLUME. Verify with dbutils.fs.ls() on the volume path from the target compute before cutting over.
Full walkthrough: Read Issue 028 →
Last verified against official Databricks documentation: October 16, 2026. Correction history: none (new issue). Official documentation — Upgrade a Databricks workspace to Unity Catalog, DBFS mounts, DBFS and Unity Catalog best practices, and Unity Catalog privileges reference (READ VOLUME, WRITE VOLUME, USE CATALOG, and USE SCHEMA). Practitioner case study — not core documentation: From HMS to Unity Catalog: A Self-Service Migration Playbook.
Jump straight to the permanent issue pages for each topic.
Issues, newest first.
28 issues
DBFS mounts are a deprecated pattern — and the deprecation is now a hard break. Mounts don't work on serverless compute or Unity Catalog, bypass UC governance entirely, and don't exist on workspaces provisioned after September 30, 2026. This issue's six-step ladder migrates /mnt/ paths to Unity Catalog volumes.
Deletion vectors make DELETE, UPDATE, and MERGE fast by marking rows as modified in metadata instead of rewriting whole Parquet files — but every read must apply those deletion-vector entries at query time. That read-time merge is the hidden bill. The Auto-Enable rollout is flipping the default to "All new tables", so check your tables — then run the purge runbook below.
One session setting let every write silently widen every Delta table it touched — no ALTER TABLE, no error. Schema enforcement is the gate; evolution should be a deliberate per-write opt-in, never a session-wide config.
Auto Loader silently quarantines unknown columns, type mismatches, and case mismatches in _rescued_data as JSON while the load stays green. Detect every rescue with WHERE _rescued_data IS NOT NULL, then route, triage, and promote or quarantine deliberately.
The engine re-delivers the same batch_id when a micro-batch fails after committing — and a plain append writes it all twice. The documented fix: txnAppId + txnVersion bound to batch_id on Delta targets, batch_id-keyed idempotency for external sinks, and a fresh txnAppId for every new checkpoint lineage.
The restarted job reads committed offsets from its checkpoint — but Kafka retention may have deleted them, and the query dies with KAFKA_DATA_LOSS. startingOffsets is ignored on restart; the three documented recoveries, the never-hand-edit rule, and how to prevent the trap.
SHALLOW CLONE copies metadata only — num_copied_files is 0 and the data files stay in the source directory. One scheduled VACUUM on the source ends the lease with a FileNotFoundException; the repair, the Unity Catalog caveats, and when to deep-clone instead.
Metadata-only renames and drops via column mapping — id mode on new tables, name mode on existing — plus the streaming, partition-directory, and CDF breakage the docs warn about, and the full-rewrite price of turning it back off.
DROP TABLE on a managed table marks its data files for deletion — on an external table it only unregisters metadata. The type gate, the UNDROP runbook, and why pipelines should use CREATE OR REPLACE instead of drop + recreate.
Structured Streaming accepts append inputs only — one UPDATE, DELETE, MERGE, or OVERWRITE fails the stream. Change data feed is the documented fix when corrections must reach downstream, but it records changes only from enablement onward.
Time travel and RESTORE expire when deleted data files are vacuumed (7 days by default) even though the log keeps 30 days of history — audit both windows and set them before you need the rewind.
Measure average file size from DESCRIBE DETAIL, repair existing fragmentation with idempotent OPTIMIZE bin-packing, then prevent recurrence with optimized writes and auto compaction.
A watermark placed after dropDuplicates never reaches the dedup operator, and even with the right order the state store stays unbounded unless the event-time column is in the dedup keys. Two traps, one fix.
A converted CASE mapped LOC → 0.75 while the SAS ground truth said 1.00 — with perfect row counts. The six-layer ladder: inventory, counts, schema contract, exceptAll comparison, epsilon aggregates, and enforced gates.
COPY INTO skips files it has already loaded — even modified ones. Force re-reads without deduping; the repair is delete-by-business-key then force, or better: versioned drop filenames.
A CDC change window is an ordered timeline per key. Rank to the latest event, filter NULL keys, then MERGE with explicit delete, update, and insert branches; never infer deletion from a key's absence in the window.
INSERT OVERWRITE defaults to static mode and, without a PARTITION clause, truncates all table data — the legacy dynamic-mode escape hatch is not supported on SQL warehouses or serverless. The compute-independent fix: REPLACE USING, plus the full WHERE/USING/ON menu.
Delta's enforced-vs-informational split: which constraints actually block writes, the RELY optimizer foot-gun, and the pipeline-code enforcement pattern.
No issues match — try the Resources page
Ask a Databricks implementation question. Answers are grounded in Lakehouse Digest issues and linked sources.
Answers may be incomplete. Check the linked official documentation before changing production workloads.
Contact: sbogale@sb9tech.com
Lakehouse Digest is a short, practical newsletter for Databricks engineers, published by the Lakehouse Digest team. Each issue delivers one tactic to try, one production pattern to understand, and one hard developer question answered with code and primary-source links. It is an independent publication and is not affiliated with Databricks, Inc.
Topic-led learning paths for readers who want to turn this issue’s tactics into repeatable Databricks practice.
Strengthen the platform basics behind notebooks, jobs, data workflows, and collaborative development.
Browse DataCamp Databricks courses →Inventory legacy paths, register existing cloud data as governed volumes, and verify the cutover on target compute before unmounting.
Read Issue 028 →Practice the platform skills: Databricks · Data engineering
Pipelines, orchestration, and streaming practice that turn this issue's tactics into repeatable habits.
Browse DataCamp data engineering →Partner links: we may earn a commission if you enroll through these recommendations, at no extra cost to you.
Seven diagnostics from Issues 001–009 in one Databricks notebook: small-file detection, VACUUM safety, skew checks, MERGE dedupe validation, streaming checkpoint recovery, driver-memory safety, and failed-job repair. Import it into your workspace and run it against your own tables.
A technical audience of Databricks engineers, reading implementation notes they can test the same day.
Launch inventory is one clearly labeled, problem-first placement per issue — built for products that help data teams build, govern, observe, or ship more reliably.
Sponsor Lakehouse Digest →