Delta Lake is an append-only history sink with no catalog plane. A table is simply a directory containing Parquet files and a _delta_log transaction log side by side, under a warehouse location you own. Every change is a new row; nothing is collapsed or upserted.
Prerequisites
- A warehouse location that exists and is writable — scheme and trailing slash included, e.g.
s3://bucket/prefix/. Fabric creates the table directories; it does not create the bucket. - Credentials with read, write, and delete on that prefix. Delete is needed for vacuum and pipeline resets.
- Conditional-put support on the object store for S3-compatible backends. Delta commits are atomic conditional puts; a store without that support fails the commit rather than writing unsafely.
- A single writer per table. Do not point an external writer, such as a Spark job, at the same Delta table.
Connection fields
| Field | Required | Default | Notes |
|---|---|---|---|
| Name | Yes | — | Destination label. |
| Storage | Yes | MinIO | Amazon S3, MinIO, Cloudflare R2, custom S3-compatible, Azure Data Lake, or Google Cloud Storage. |
| Warehouse location | Yes | — | Must contain a scheme and end with /. |
| Vacuum retention (hours) | Yes | 168 | Seven days, Delta's safety floor. A lower value disables that guardrail. |
The rest of the form is storage-specific. S3/MinIO/R2/custom take an endpoint, access key, secret, region, and a path-style switch (real S3 derives its endpoint and uses virtual-hosted addressing). Azure takes a connection string, or account name and key. GCS takes a service-account credential.
How tables land
A sync's namespace and table name join onto the warehouse: <warehouse><namespace>/<table>/, with the namespace defaulting to raw. Listing the warehouse shows one directory per table.
- On the first non-empty batch, the table is created from data; an empty or heartbeat-only flush never creates a directory.
- Schema evolution is additive — a new column is added, an existing one is never retyped. A case-collision against an existing column is quarantined before the write.
- Maintenance runs
compact(bin-pack small files) andvacuum(expire old files), both enabled by default. - A pipeline reset deletes the whole table prefix, data and log together. This is S3-compatible only; Azure and GCS resets must be cleaned up manually.
Gotchas
Watch out
- The warehouse must end with
/and include a scheme, or the tables bad-join. The form and API both reject it. - On GCS, the Delta path needs a JSON service-account credential. An HMAC key and secret pair is not supported on this path.
- For Azure, supply a connection string or an account name and key; neither leaves the storage options unusable.
- Consumers must merge on their side: deletes are tombstones, and an insert after a delete appends rather than removing the row.