The operating question is not “does SELECT still return the row?” It is “what, exactly, can we prove was removed, from which storage scope, without breaking readers that still depend on older files?” A row can become logically invisible before the Parquet file containing its old value is rewritten, and a rewritten file can become obsolete before retention allows physical removal.
Databricks: Deletion vectors in Databricks (updated September 11, 2026) describes deletion-vector changes as soft deletes. Databricks: Remove unused data files with vacuum (updated September 11, 2026) separates that rewrite from later file deletion.
This runbook is for data engineers, platform owners, security reviewers and data stewards operating Databricks on AWS against a Unity Catalog managed Delta table, using a declared compatible Databricks Runtime and the default FULL vacuum path. It does not generalize Databricks SQL commands to every Delta implementation. It also does not certify universal erasure: backups, exports, object-store versions, caches and other copies require their own evidence.
The output is a scoped purge-evidence record: a chain from authorization, to current-table state, to rewrite completion, to retention eligibility, to obsolete-file cleanup, with residual work left visible rather than implied away. The documentation cited here was checked on September 16, 2026; its September 11 update date is a documentation timestamp, not a feature-launch date.
State exactly what a purge decision must prove
Start with an authorized request, not with a maintenance command. A useful example is: “Remove the synthetic subject SYNTH-0042 from sandbox_governance.purge_demo.customer_events, then provide evidence about the current table and obsolete Delta data files.” That sentence defines a target and a table, but it does not authorize deletion of unrelated exports, backups, clones or cloud-object versions. Those are distinct assets with distinct owners.
The evidence chain should separate four claims that are often collapsed into one. Databricks DELETE FROM removes rows that match a predicate from the table’s logical state; when deletion vectors are active, row changes can be represented as metadata-backed soft deletes rather than immediate Parquet rewrites. REORG TABLE ... APPLY (PURGE) rewrites files containing soft-deleted data. The old files can still remain afterward until they become eligible for VACUUM.
Proof claim | Evidence owner | What it can prove | What it cannot prove | Decision |
Deletion was authorized | Data steward / requester | Approved subject, dataset, scope and reason | That any technical deletion occurred | Hold without approval |
Row is absent from current query result | Data engineer | Current snapshot no longer returns the target predicate | That old Parquet files or external copies are gone | Proceed to rewrite evidence |
Soft-deleted values are no longer in current active files | Platform engineer | Completed REORG ... APPLY (PURGE) against the in-scope table | That obsolete files have been physically deleted | Proceed to retention review |
Eligible obsolete table files were removed | Platform owner | Successful VACUUM evidence plus candidate/operation reconciliation | That backups, exports, versions, caches or other systems were erased | Pass only for declared scope |
Proposed operating control: assign one evidence ID to all four stages and refuse to close the request if any stage is represented only by a screenshot, a verbal statement or a current SELECT. A purge record is strong when every claim names the artifact that supports it and the boundary that artifact does not cross.
Separate logical state from the physical file lifecycle
Delta Lake is transactional, but the transaction log and the data-file lifecycle answer different questions. A new table version records what the current snapshot should reference. It does not mean every byte from older versions is immediately removed. Databricks states that each modifying operation creates a new table version and that table history can support auditing and time travel only while the required data files remain available.
Table-history retention and data-file retention are separate controls. Databricks: Work with table history (updated September 11, 2026) gives a default 30-day log-retention setting, while the vacuum guidance gives a default seven-day data-file retention threshold.
This is the narrow operational extension of broader data lake and warehouse management foundations: storage organization and governance are prerequisites, but purge proof requires tracking which version changed visibility, which operation rewrote files and which later operation removed obsolete files.
Stage | Current query state | Active data files | Older/obsolete data files | What has changed |
Before DELETE | Target row visible | May contain target value | Historical files may also contain it | Nothing yet |
After logical DELETE with DV use | Target row hidden | May still physically contain target value, interpreted through deletion-vector metadata | Earlier files may contain target value | Logical table state |
After REORG ... APPLY (PURGE) | Target row hidden | Affected current files are rewritten without the soft-deleted row | Replaced files can still contain it | Current active-file representation |
After retention-aware VACUUM | Target row hidden | Current files remain | Eligible obsolete files removed from table storage scope | Physical cleanup of eligible obsolete table files |
Deletion vectors and the active table snapshot
Do not infer that deletion vectors are enabled because the workspace or runtime supports them. Databricks says Delta tables must explicitly have deletion vectors enabled, and DESCRIBE DETAIL can report table properties, protocol versions and tableFeatures. The same deletion-vector documentation warns that enabling the feature upgrades the table protocol and that clients without deletion-vector support cannot read the table afterward. Databricks: Review table details with DESCRIBE DETAIL (updated September 11, 2026) is therefore an evidence source, not a convenience command.
For this runbook, record actual feature state before you explain a deletion as “soft.” If deletion vectors are absent, the physical path of DELETE can differ. The invariant remains: current-row absence is a logical-state claim, and physical purge requires file-level lifecycle evidence. Do not add a protocol-changing command merely to make the example resemble the documentation.
Rewritten files, obsolete files and historical versions
REORG TABLE ... APPLY (PURGE) rewrites only files containing soft-deleted data and is documented as idempotent. Databricks also states that the soft-deleted values may still remain in the old files after the rewrite and that VACUUM is the operation that later removes eligible old files. An OPTIMIZE or compaction event is not an equivalent purge certificate because the deletion-vector guide says compaction does not strictly guarantee that every deletion-vector change is physically applied.
Likewise, a history entry is not proof that the underlying version remains readable. Databricks explicitly separates table-history retention from time-travel availability and warns not to treat table history as long-term archival backup. The completion record should therefore distinguish “history metadata exists” from “required historical data files still exist.”
Inventory table scope, owners and dependent readers
Before any state-changing step, create a scope ledger. For the worked example, the declared platform scope is Databricks on AWS, Unity Catalog managed Delta, default FULL VACUUM, no unverified direct writer to the managed storage location. The actual runtime must be recorded from the compute that performs the work. Databricks documents REORG TABLE for Databricks SQL and Databricks Runtime 11.3 LTS and above, while its deletion-vector guidance recommends Databricks Runtime 14.3 LTS and above to write deletion-vector tables with all optimizations and 12.2 LTS and above for reads.
Use ownership explicitly. The platform administrator may have technical permission to run maintenance, but that does not create business authorization to erase data. This is where data engineer and DBA ownership boundaries are useful background: operational roles overlap, but the data owner, platform owner and security reviewer still need named responsibilities for this request.
Inventory field | Example value | Evidence source | Owner | Stop condition |
Qualified table | sandbox_governance.purge_demo.customer_events | Catalog record | Data engineer | Name is ambiguous or points to production unexpectedly |
Table type | Unity Catalog managed Delta | DESCRIBE DETAIL / catalog metadata | Platform engineer | External vs managed status unresolved |
Storage location | Recorded location from table metadata | DESCRIBE DETAIL | Platform owner | Location cannot be tied to table identity |
Runtime / SQL warehouse | Actual version used for each write | Job/compute evidence | Platform owner | Reader/writer compatibility not established |
Table features | Actual tableFeatures and properties | DESCRIBE DETAIL | Platform engineer | Deletion-vector state assumed rather than observed |
Readers and writers | Batch, streaming, SQL, sharing, external connectors | Workload inventory | Service owners | Any critical client version untested |
Long-running operations | Maximum supported duration, not an average | Scheduler/owner evidence | Service owners | Duration exceeds approved retention window |
Clone relationships | Source/target, managed/external | Unity Catalog inventory | Table owners | Relationship unresolved |
External copies | Export, backup, object versions, cache, downstream extract | Separate copy register | Respective copy owners | Scope owner missing |
DESCRIBE DETAIL <qualified_table> is a read-only inspection command documented to return table format, location, partitions, properties, protocol versions and enabled features. Capture its result under the evidence ID before the delete so later reviewers can tell what table and feature state the runbook actually addressed.
Set the retention and evidence contract before executing
A purge request needs a retention contract before deletion, because the cleanup stage intentionally destroys some time-travel capability. Databricks says the default data-file retention threshold for VACUUM is seven days and strongly recommends at least seven days; it warns that too-short retention can delete uncommitted files from long-running jobs. Separately, table history has a default 30-day log-retention setting, but that does not keep data files alive for time travel after vacuum.
The local contract should be stricter than “use the default.” It should name the approved retention basis and the longest supported reader or writer interval. Proposed local control: set R = max(vendor safety floor, organization recovery requirement, longest supported operation window plus margin). This is an operating model, not a Databricks formula. In the hypothetical example below, R = 7 days only because the scenario declares that the organization has approved the documented default and no supported operation approaches seven days.
Approval field | Required value | Why it matters | Acceptance rule |
Request ID | Synthetic ticket ID | Joins technical evidence to authorization | Present and approved |
Target predicate | Exact subject/business key | Prevents scope drift | Reviewed before DELETE |
Table identity | Catalog, schema, table and storage metadata | Prevents wrong-table operation | Matches preflight evidence |
Recovery requirement | Required time-travel/restore expectation | Retention is a recovery trade-off | Compatible with planned cleanup |
Retention R | Approved duration and basis | Sets earliest cleanup eligibility | At least vendor-recommended floor unless separate exception process exists; this runbook does not use exceptions |
Maintenance window | Start/end and change owner | Coordinates readers and writers | Approved |
Residual-copy owners | Backup/export/cache/object-version owners | Prevents table cleanup being misrepresented as universal erasure | Named or escalated |
Reader safety and the retention clock
For deletion-vector purge evidence, start the critical cleanup clock at the rewrite completion, not at the original business request and not merely at the DELETE. Databricks explains that REORG ... APPLY (PURGE) creates a new table version and that older files used by prior versions remain until they have expired according to VACUUM retention. The vacuum guide explicitly says the vacuum must be delayed after the REORG so older files can expire.
There is a wording tension worth preserving. The deletion-vector page says to run VACUUM “with the retention threshold set to the purge completion timestamp,” while the vacuum guide explains eligibility as a retention interval and says to wait after REORG. This runbook does not translate the first wording into an absolute-timestamp syntax or a zero-hour vacuum. Operationally, record rewrite time T1, retain the approved interval R, and schedule candidate review no earlier than T1 + R.
Scope limits and residual-copy decisions
The table cleanup record should enumerate residual locations without inventing their behavior. Databricks documents that VACUUM removes eligible unused table data files and does not govern transaction-log cleanup; it also warns that disk cache can temporarily contain data from Parquet files already deleted by vacuum until the cluster is restarted. That cache behavior is inside documented scope and should be recorded if relevant.
Backups, exports, object-store versions, copied datasets, downstream extracts and recovery systems are different. The cited Delta documentation does not establish the lifecycle for every such copy. Therefore mark each as verified separately, out of scope by approval, or unresolved/escalated. Do not infer “purged” or “retained” merely from the Delta table operation.
Validate the logical deletion without overstating it
Use a disposable nonproduction table for executable examples. The following example assumes sandbox_governance.purge_demo.customer_events already exists, contains only synthetic data, and has been authorized for the exercise. DELETE FROM is state-changing; Databricks documents it for Delta Lake tables and says the predicate determines which rows are removed.
-- Read-only precheck on a disposable synthetic table.
SELECT COUNT(*) AS target_rows_before
FROM sandbox_governance.purge_demo.customer_events
WHERE subject_id = 'SYNTH-0042';
-- STATE-CHANGING: execute only under the approved synthetic request.
DELETE FROM sandbox_governance.purge_demo.customer_events
WHERE subject_id = 'SYNTH-0042';
-- Read-only logical validation.
SELECT COUNT(*) AS target_rows_after
FROM sandbox_governance.purge_demo.customer_events
WHERE subject_id = 'SYNTH-0042';
A successful result is not “zero rows therefore purged.” It is “the current table snapshot no longer returns the approved predicate.” Capture at least one unchanged control predicate as well, so an empty result caused by deleting the entire table or querying the wrong environment cannot pass unnoticed.
Logical-deletion check | Hypothetical expected result | What it proves | What it does not prove |
Target rows before | 1 | Request maps to a row in the disposable dataset | Physical storage state |
Target rows after | 0 | Target is absent from current snapshot | Old file deletion |
Control rows before/after | Same count | Scope likely remained bounded | Full semantic correctness of every row |
DESCRIBE HISTORY entry | A DELETE write with timestamp/user evidence | A table operation was committed | Whether deletion vectors were used in every affected file |
Databricks documents DESCRIBE HISTORY as returning provenance fields such as version, timestamp, user, operation, parameters and operation metrics. Its history schema lists delete metrics including numDeletedRows, numAddedFiles and numRemovedFiles, but availability can vary by write path and operation details. Treat those metrics as supporting evidence, not a substitute for the predicate check.
Inspect feature and client compatibility before rewriting
A table feature is also a reader contract. Databricks warns that enabling deletion vectors upgrades the table protocol and can make unsupported clients unable to read the table. The current compatibility table states that Databricks Runtime 12.2 LTS and above can read deletion-vector tables; write support varies by Photon and operation, and Databricks Runtime 14.3 LTS and above is the documented recommendation for writing with all optimizations. Open-source Delta clients have their own version floors.
Do not convert those platform statements into “our connector is compatible.” The actual inventory must include every supported reader and writer, including scheduled jobs, streaming queries, SQL warehouses, sharing recipients and third-party engines. A client/version that has not been tested against the table feature is an unresolved dependency, even when another client from the same ecosystem is documented as compatible.
Client / workload | Actual version | Role | Vendor-documented minimum | Local evidence | Decision |
Databricks Runtime job | Hypothetical 14.3 LTS | Writer / maintenance | 14.3 LTS recommended for all DV write optimizations | Job spec + controlled validation | Pass if observed |
Databricks SQL warehouse | Record actual | Reader | Must support table protocol/features | Query validation | Hold if unknown |
OSS Delta reader | Record actual | Reader | DV read support documented from OSS Delta 2.3.0 | Compatibility test for actual connector | Hold if untested |
OpenSharing recipient | Record actual | Reader | Databricks recipient runtime 14.1+; open-source sharing client has its own floor | Recipient-owner evidence | Escalate if unsupported |
Long-running stream | Record runtime and duration | Reader/writer | Environment-specific | Owner confirms supported window | Hold if duration conflicts with retention |
The stop rule is simple: untested critical reader = hold. Do not add ALTER TABLE protocol changes, drop features or upgrade features solely to make the purge runbook proceed. Those are separate changes with separate compatibility impact.
For evidence, capture DESCRIBE DETAIL <qualified_table> before REORG and record tableFeatures, reader/writer protocol fields and properties. Databricks notes that the DESCRIBE DETAIL schema can vary by runtime and enabled features, so store the raw result rather than relying on a fixed hand-built parser that assumes every field is present.
Run a scoped REORG and capture its completion evidence
Once the logical delete and compatibility review pass, force the soft-deleted rows out of the current active files. Databricks documents the syntax REORG TABLE <table> APPLY (PURGE) and says it rewrites files containing soft-deleted data. It is idempotent: running the same purge again against an unchanged dataset has no effect. Databricks SQL: REORG TABLE (updated September 11, 2026) also states that old files may still contain the data afterward.
-- STATE-CHANGING: rewrites affected files in the authorized Delta table.
REORG TABLE sandbox_governance.purge_demo.customer_events APPLY (PURGE);
-- Read-only evidence capture after the rewrite.
DESCRIBE HISTORY sandbox_governance.purge_demo.customer_events;
Do not write WHERE subject_id = 'SYNTH-0042' onto REORG. The documented WHERE form for APPLY (PURGE) accepts only predicates involving partition key attributes. If you need to limit maintenance by partition, first prove that the predicate uses actual partition columns; otherwise run the table-scoped purge or redesign the maintenance window.
REORG evidence | Capture | Acceptance rule |
Table identity | Qualified name plus pre/post table metadata | Must match approved table |
Command form | APPLY (PURGE) with no invented subject filter | Must match documented syntax |
Start/end context | Job/run ID and compute version | Must be attributable |
Completion boundary T1 | Committed history timestamp / operation evidence | Required before retention clock starts |
Post-rewrite logical check | Target still absent; controls unchanged | Must pass |
Exceptions | Full error text and retry decision | Any unresolved error = hold |
The operation record belongs in the same evidence chain as the request. This resembles the discipline in database administration automation: repeatable changes need versioned, attributable execution evidence. Here, however, the critical artifact is not “automation ran”; it is the table version and timestamp that establish the new retention boundary.
Wait for eligibility and review the deletion candidates
REORG completion is the start of a waiting period, not permission to vacuum immediately. Databricks says data files are deleted only after they expire under the vacuum retention period and explicitly instructs operators to delay VACUUM after REORG. The documented default data-file threshold is seven days, and Databricks strongly recommends at least seven days because long-running jobs can otherwise lose uncommitted files. This runbook does not recommend RETAIN 0 HOURS and does not disable the retention safety check.
There is also a documentation-stage issue around VACUUM LITE. The vacuum guide marks LITE Public Preview in Databricks Runtime 16.4 LTS and above, while the SQL reference says FULL/LITE applies in Runtime 16.1 and above. Because those live pages differ on the runtime floor, and because LITE has extra prerequisites and can omit files not represented in the log, this core runbook uses the default FULL path only. That unresolved documentation difference should be rechecked before adopting LITE.
Retention-aware scheduling after the rewrite
Assume the hypothetical REORG commits at T1 = 2026-09-16 10:00 UTC and the approved retention is R = 7 days. The earliest candidate-review time is 2026-09-23 10:00 UTC, subject to reader/writer safety and any longer organization policy. This is an invented timeline, not a test result. The business request might have been approved days earlier; that does not move T1 backward.
Timeline point | Hypothetical time | Meaning | Decision |
T0 logical delete | Sep 16, 09:20 UTC | Current snapshot changed | Not yet physically purged |
T1 REORG commit | Sep 16, 10:00 UTC | Affected active files rewritten | Start retention clock |
T1 + R | Sep 23, 10:00 UTC | Earliest candidate-review point for R=7d | Revalidate workload safety |
Candidate approval | Sep 23, 11:00 UTC | Reviewer accepts candidate scope | Authorizes cleanup window |
Cleanup | Sep 23, 12:00 UTC | VACUUM attempts physical deletion | Verify operation outcome |
Proposed local control: before candidate review, reconfirm that no supported operation has a runtime or retry window approaching R, and freeze the evidence if a new long-running workload was introduced after approval. The seven-day default is a product default and recommendation, not proof that seven days is safe for every organization.
Dry-run evidence and candidate reconciliation
Databricks documents VACUUM <table> DRY RUN as a preview that does not delete files. The SQL reference says DRY RUN returns a list of up to 1,000 files to be deleted, so the preview can be truncated and must not be treated as a complete manifest for a table with more candidates.
-- READ-ONLY PREVIEW: does not remove files.
VACUUM sandbox_governance.purge_demo.customer_events DRY RUN;
Candidate-review field | Evidence to retain | Pass condition | Escalate when |
Preview timestamp | Query/job record | At or after T1 + R | Run too early |
Candidate output | Raw DRY RUN result | Paths belong to in-scope table location | Unexpected location/prefix |
Candidate cardinality | Returned count plus “up to 1,000” limitation | Reviewer understands truncation risk | Exactly 1,000 or evidence suggests more |
Table identity recheck | Fresh DESCRIBE DETAIL | Same table/location as approved | Table replaced or moved |
Reader/writer recheck | Current workload owner attestations | No conflicting long-running operation | Unknown activity |
Clone review | Current Unity Catalog relationship state | No unreviewed dependency | Relationship changed |
A dry run is a proposal, not a receipt. Preserve it before actual cleanup so reviewers can compare intended candidate scope with the later operation metrics. If the preview contains a surprising path, stop. “It is old” is not sufficient authorization.
Execute cleanup and verify the bounded physical result
When the candidate review passes, run the documented default VACUUM against the qualified Delta table. This is state-changing: eligible obsolete files are removed. Databricks says Delta data files are deleted according to when they were logically removed from the transaction log plus the retention duration, not according to object-storage modification timestamps. The operation also reduces available time-travel history because older table versions may no longer have their required files.
-- STATE-CHANGING: removes eligible obsolete files under the table's configured retention.
VACUUM sandbox_governance.purge_demo.customer_events;
-- Read-only audit evidence.
DESCRIBE HISTORY sandbox_governance.purge_demo.customer_events;
For Unity Catalog managed tables, Databricks says vacuum audit information is committed to the transaction log and can be queried with DESCRIBE HISTORY. The history-metrics reference lists numDeletedFiles, numVacuumedDirectories and numFilesToDelete for VACUUM. Capture the actual operation result and history row; do not fabricate a reclaimed-byte number or infer that every candidate succeeded if the command failed or was interrupted.
Cleanup verification | Evidence | Pass / hold rule |
VACUUM execution | Successful job/query state with start/end timestamps | Failure or cancellation = hold |
History audit | Matching table, actor, timestamp and vacuum metrics where available | Missing/ambiguous evidence = escalate |
Post-cleanup logical query | Target remains absent; controls intact | Logical regression = escalate |
Candidate reconciliation | Compare preview context to actual vacuum metrics, respecting 1,000-file preview limit | Unexplained mismatch = hold |
Storage-level inspection | Only if authorized and platform/storage semantics are understood | Access denied is not proof of absence |
Do not turn a storage permission error into a deletion claim. “Cannot list this prefix” proves only that the observer lacks access. Likewise, a clean SELECT after vacuum proves the current snapshot, not the fate of every backup or cache. Databricks also warns that disk cache can retain data from deleted Parquet files until the cluster is restarted, so cache disposition must be handled as a separate residual-control item when that feature is relevant.
Evaluate clones and historical readers on their own terms
Unity Catalog shallow clones require special treatment because they deliberately share source data files rather than copying them. The live Databricks page marks Unity Catalog shallow clones as Public Preview, requires different runtime floors for managed and external tables, and says source/clone relationships expand the set of files considered valid for vacuum. Databricks: Shallow clone for Unity Catalog tables (updated September 11, 2026) is the authority for this runbook’s clone behavior.
The important correction to a common oversimplification is explicit: Databricks says running VACUUM on the source of a Unity Catalog shallow clone does not break the cloned table because Unity Catalog tracks the relationship and protects files still required by the source or any shallow clone. Only files no longer valid for any tracked source/clone state are removed. Managed and external tables differ in where a vacuum can remove source data files.
Dependency | Documented behavior / question | Runbook decision |
UC managed shallow clone | Valid-file calculation includes source and clones; vacuum on source or target may delete source files only when not valid for any tracked table | Inventory clone and accept retained dependencies |
UC external shallow clone | Vacuum removes source-table files only when run against the source; valid-file protection still considers clone references | Treat separately from managed case |
Dropped shallow clone | Databricks retains relationship context for about seven days to support UNDROP behavior | Do not assume immediate file release |
Historical query | History metadata and data-file availability use different retention controls | Do not promise time travel after cleanup |
Backup/export reader | Not governed by clone rules | Assign separate owner/evidence |
Do not delete a clone merely to meet a purge deadline. Clone deletion is a separate destructive decision with its own owner and business impact. If an authorized clone legitimately keeps a file valid, the table purge can be held or scoped rather than forcing an unsafe dependency break.
Historical readers need the same discipline. Databricks says VACUUM removes data files needed for versions older than the retention window even though log history may remain longer. Therefore, “version 123 still appears in history” is not a recovery guarantee. Time travel is a reader capability contingent on both log and data retention, not an unconditional rollback plan.
Work a hypothetical purge request through the ledger
The following trace is entirely hypothetical. No command was executed as part of this research, and no file counts or storage savings are claimed. The table is the synthetic Unity Catalog managed Delta table used throughout; the approved retention R is seven days because this invented scenario declares that seven days satisfies both the Databricks recommendation and the local recovery requirement. In a real estate, R should be longer whenever workload or policy requires it.
Evidence event | Hypothetical record | Proof claim | Status |
Request approved | PURGE-DEMO-2026-0916-01, subject SYNTH-0042 | Authorized scope | Pass |
Precheck | Target 1, control 125 | Predicate maps to expected synthetic row | Pass |
T0 DELETE | Sep 16 09:20 UTC | Current snapshot changes | Pass |
Post-delete | Target 0, control 125 | Logical deletion | Pass |
Feature/client review | DV present; declared maintenance runtime compatible; no unresolved critical reader | Reader safety before rewrite | Pass |
T1 REORG | Sep 16 10:00 UTC | Current affected files rewritten | Pass |
Earliest review | Sep 23 10:00 UTC | Retention elapsed from rewrite | Pass after recheck |
DRY RUN | Sep 23 11:00 UTC | Candidate proposal captured | Pass only after scope review |
FULL VACUUM | Sep 23 12:00 UTC | Eligible obsolete table files targeted for physical removal | Pass if operation succeeds |
External copies | Backup/export owners still reviewing | Universal erasure not proven | Pending handover |
The recovery and retention context around this example is adjacent to multicloud database recovery and retention responsibilities, but the evidence here remains specifically about Databricks Delta table files.
The decisive point is that the business request at T0 does not start the physical purge eligibility clock for rewritten files. T1 does. After vacuum, the completion claim is still bounded: “eligible obsolete Delta table files were removed according to the successful platform operation and recorded retention basis.” It is not “all copies everywhere are erased.”
Handle failure without erasing the evidence
A reliable purge process must make failure durable. Do not overwrite a failed run with a clean rerun and then present only the successful event. Preserve the first error, the table version at which it occurred, the candidate preview used, and the decision that allowed or blocked a retry. Databricks documents REORG ... APPLY (PURGE) as idempotent, so a repeat against the same dataset is a documented safe execution property; that does not mean every surrounding workflow step is automatically idempotent.
Failure / exception | Immediate status | Action | Recovery boundary |
Critical reader incompatible or untested | Hold | Upgrade/test reader or rescope maintenance | No destructive cleanup until resolved |
REORG errors or no trustworthy completion boundary | Hold | Preserve error; investigate; rerun documented REORG only after cause is understood | Do not start retention clock until successful commit |
DRY RUN shows unexpected path/scope | Escalate | Stop and verify table identity/location and candidate semantics | Do not vacuum |
DRY RUN returns exactly 1,000 entries | Escalate | Treat preview as potentially truncated; use operation-level controls rather than assuming complete manifest | Preview alone cannot prove full candidate set |
Permission failure during VACUUM | Hold | Capture error; fix authorization through change process; rerun | Access denial does not prove file absence |
Clone dependency retains files | Hold or scoped pass | Confirm legitimate clone owner and retention requirement | Do not delete clone without separate approval |
VACUUM fails or is cancelled | Hold | Preserve partial-operation evidence and rerun only after understanding platform state | Never label complete from a post-failure SELECT |
Required historical recovery after file removal | Escalate | Use separately governed backup/recovery path if available | Time travel is not guaranteed after vacuum |
A bounded recovery plan has two phases. Before physical cleanup, pause, correct the issue and use the retained Delta history/files only within the verified retention capabilities. After successful physical cleanup, do not claim that RESTORE or time travel can recreate files that vacuum has removed. Databricks explicitly warns that the ability to query older versions is lost when required data files are vacuumed.
The handover packet for a failed case should contain the request ID, latest safe table version, failed command/job reference, error text, last successful proof claim, unresolved dependency owner and the next authorized action. That preserves accountability without pretending that a rerun erases operational history.
Build data engineering judgment through verifiable artifacts
This runbook is less about memorizing three SQL commands than about learning to separate evidence domains. A mature data engineer can say which artifact proves authorization, which proves current-table state, which proves compatibility, which proves file rewrite, which establishes retention eligibility and which remains outside the table boundary.
Skill | Artifact to practice producing | Engineering judgment it demonstrates |
Storage and table lineage | Qualified table + location + feature snapshot | You know what object a command will affect |
Pipeline dependency analysis | Reader/writer/client matrix | You treat table features as compatibility contracts |
Permission governance | Named approver, executor and reviewer | You separate authority from technical capability |
Retention reasoning | T1, R, longest-operation evidence and eligibility calculation | You do not use the oldest convenient date |
Auditability | History rows, dry-run output, operation result and exception log | You can distinguish proposed, attempted and completed work |
Residual-copy governance | Backup/export/cache/clone ownership register | You do not overclaim the scope of a table-level purge |
For broader sequencing of foundational skills, the data engineering learning roadmap covers the wider learning path. The live program page also lists storage provisioning, data pipelining, Spark/Hadoop, batch and streaming ingestion, encryption and data-governance topics, with a three-month, 12–14-hours-per-week structure for learners working toward a bachelor’s or higher-level degree.
For readers building those foundations in a structured format, Refonte Learning’s Data Engineering Program publishes coverage of data storage, pipelines, ETL/warehousing, Spark/Hadoop, batch and streaming processing, encryption and governance. Treat that as foundational preparation; the page does not establish that Databricks-specific deletion-vector, REORG or VACUUM purge labs are included.
Issue a scoped completion record and residual-work handover
Close only the claims that have evidence. For the in-scope Databricks table, a pass requires authorized scope, successful logical validation, observed feature/client compatibility, a trustworthy REORG completion boundary, elapsed approved retention from that rewrite, reviewed vacuum candidates, successful cleanup evidence and a final current-table validation. A hold means the process is incomplete but safely paused. Escalate means a policy owner, platform specialist or copy owner must decide something the runbook cannot infer.
Completion-record field | Required evidence | Final state |
Request and authorization | Request ID, approver, target predicate, scope | Pass / hold |
Table identity | Catalog/schema/table, managed/external classification, location, feature snapshot | Pass / escalate |
Runtime and clients | Maintenance runtime plus dependent reader/writer matrix | Pass / hold |
Logical deletion | Pre/post target and control checks, DELETE history evidence | Pass / hold |
Rewrite boundary | REORG operation evidence and T1 | Pass / hold |
Retention basis | Approved R, vendor floor, longest supported operation window | Pass / hold |
Candidate review | DRY RUN timestamp/output, 1,000-entry limitation acknowledged, reviewer | Pass / escalate |
Physical cleanup | Successful VACUUM evidence and history metrics where available | Pass / hold |
Clone/history impact | Clone inventory and accepted time-travel loss | Pass / hold |
Residual copies | Backup/export/object-version/cache owners and statuses | Closed separately / pending / out of scope |
Final disposition | PASS, HOLD or ESCALATE, with signer and timestamp | Mandatory |
A recommended completion sentence is deliberately narrow: “PASS for the declared Unity Catalog managed Delta table scope: the approved row is absent from the current snapshot; affected current files were rewritten by a completed REORG ... APPLY (PURGE); the approved retention interval elapsed from the rewrite boundary; and a subsequent successful FULL VACUUM removed eligible obsolete table files according to Databricks’ table-maintenance semantics. Backups, exports, object-store versions and other declared residual copies remain governed by the statuses listed below.” The product behavior underlying that sentence is documented; the approval model and evidence threshold are proposed local controls.
For handover, list each residual asset with owner, system, expected disposition, evidence due date and status. Do not leave “backup team” or “security” as a generic owner. If cache risk is relevant, record the cluster/cache control performed or the reason it remains open. If a shallow clone still legitimately references data files, record that dependency instead of claiming a failed purge.
Does a SELECT returning zero rows prove deletion? It proves only that the target predicate is absent from the current table snapshot. With deletion vectors, old values can still be represented in current Parquet files until rewritten, and older files can remain after the rewrite.
Does REORG TABLE ... APPLY (PURGE) alone remove the old files? No. Databricks states that the old files may still contain the soft-deleted data after REORG; VACUUM removes eligible old files later.
Does the default seven-day retention prove safety for every job? No. Seven days is the documented default and recommended minimum, but Databricks specifically warns operators to consider long-running jobs. Your supported workload window can require a longer retention period.
Does source cleanup always invalidate Unity Catalog shallow clones? No. Databricks documents the opposite for Unity Catalog shallow clones: tracked source/clone relationships expand valid-file protection, and source vacuum does not simply break the clone. Managed and external behaviors still differ, so the relationship must be evaluated in its actual table type and runtime context.
