Data Vault families
Twelve families write the vault layer. This page documents seven of them:
vault-entity, vault-control, and the five load families.
The other five render the combined load, which emits one artifact per source
rather than one per vault object: vault-combined-load
(databricks/data_vault/sql/combined_load.jinja, roots source, tiers,
load and behavior) and the four include-only pieces it composes,
vault-piece-hub, vault-piece-link, vault-piece-satellite and
vault-piece-link-satellite, each taking a single object root. They are
indexed on the
overview page
and their field-by-field sections are still to be written. The combined load
is generated but not yet routed into a build, so a change you make in those
five does not reach a deployed pipeline until that wiring ships.
Vault templates split by how the object loads, not by what it is called: hubs
and links share the keyed insert, all three satellite kinds share the versioned
insert, and reference, bridge, and point-in-time each have their own. Two
conventions hold across all five load families: this is the vault object
being written (the catalog row passed through whole, with the fully qualified
name dialect-cased and a snake-cased name added), and bridge and point-in-time
carry no source roots at all. That last one is deliberate: they rebuild from
the whole raw vault, and their own bridge.steps[] and pit.satellites[]
already name every table they read.
Shared ghost-record block (ghost), where a family carries it:
| Field | Type | Meaning |
|---|---|---|
ghost.enabled | boolean | Whether the ghost-row flow renders; defaults to true when ghost handling is unset. |
ghost.zeroKeySql | string | The all-zeros hash-key literal, UNHEX(REPEAT('0', ...)) at the hash algorithm’s width. |
ghost.loadDateSql | string | The epoch load date stamped on ghost rows: TIMESTAMP '1970-01-01 00:00:00'. |
ghost.recordSource | string | The SYSTEM record-source constant stamped on ghost rows. |
vault-entity
Section titled “vault-entity”Templates: databricks/data_vault/link.jinja
Roots: this, cdc, source, sources, hubHashKeys,
dependentChildColumns (conditional), ghost
The streaming link entity definition. The link’s own columns are derived from
the keys and hash-key roots rather than enumerated, so this.columns is empty
and honest.
| Field | Type | Meaning |
|---|---|---|
this.name | string | The link’s logical name. |
this.fqn | string | The link’s fully qualified name. |
this.physicalName | string | The finished physical table name (the link prefix applied to the snake-cased name). |
this.description | string | The link’s documentation text. |
this.columns | array | Empty and honest: the link’s columns come from the key roots. |
this.linkConfig.hashKeyColumn | string | The link’s own hash-key column. |
this.linkConfig.loadDateColumn | string | The link’s load-date audit column. |
this.linkConfig.recordSourceColumn | string | The link’s record-source column. |
this.linkConfig.hubFqns | string[] | Fully qualified names of the participating hubs, in declared order. |
this.linkConfig.hubHashKeyColumns | string[]? | Per-hub hash-key names stamped at decompose time; wins over pattern derivation when it length-matches hubFqns. |
this.linkConfig.dependentChildColumns | string[]? | Dependent-child column source names designated on the link itself. |
cdc.keys | string[] | The change-feed KEYS clause: the link’s hash key. |
cdc.sequenceBy | string | The change-feed SEQUENCE BY column. |
source / sources | table ref + nameSnakeCase | The streaming source, named rather than enumerated (columns empty); source.nameSnakeCase precomputed. sources holds the identical object. |
hubHashKeys | string[] | Participating hub hash-key column names, in hubFqns order (the stored stamp, or pattern-derived for legacy rows). |
dependentChildColumns | string[] | Conditional: dependent-child columns resolved to their persisted physical names; absent entirely when none are designated. |
ghost | object | The shared ghost-record block above. |
vault-control
Section titled “vault-control”Templates: databricks/data_vault/control.jinja
Roots: source, tiers, threadCount
The per-source control notebook that runs a source’s vault loads in tiers. References, business vault, point-in-time, and bridge are deliberately absent: they run in the vault workflow’s pre-stage and post-stage, not in a source’s control notebook.
| Field | Type | Meaning |
|---|---|---|
source.name | string | Leaf name of the staging source this control notebook drives. |
source.fqn | string | Dialect-cased fully qualified name of that source. |
tiers[] | array | Ordered execution tiers; an empty tier is filtered out before render. |
tiers[].label | string | Tier heading: hubs and links (tier one), satellites and link satellites (tier two). |
tiers[].steps[].name | string | The load’s leaf name, for example hub_customer. |
tiers[].steps[].notebookPath | string | Relative path to the load notebook, ../loads/<leaf>. |
threadCount | number | Parallelism for the tier’s thread pool; the Build emits 4. |
vault-load-keyed
Section titled “vault-load-keyed”Templates: databricks/data_vault/loads/keyed_insert_load.jinja
Roots: kindLabel, this, keyColumn, source (conditional), sources,
ghost, ghostHashKeyColumns, sequenceColumn, recordSourceColumn
The idempotent insert for the four keyed kinds: hub, link, business hub, business link. The one vault family whose columns carry ghost sentinels.
| Field | Type | Meaning |
|---|---|---|
kindLabel | string | Human label for the header comment: Hub, Link, Business hub, or Business link. |
this | object | The vault object being written: the catalog row spread whole, fqn dialect-cased (replacing the raw one), nameSnakeCase added. |
this.columns[].ghostSentinelSql | string | Per-column null-safe sentinel for the ghost row, by data type: 0 numeric, false boolean, DATE '1900-01-01', TIMESTAMP '1900-01-01 00:00:00', X'' binary, '' otherwise. |
this.hubConfig / .linkConfig / .bhubConfig / .blinkConfig | object or null | The kind’s configuration payload; each carries recordSourceColumn. |
keyColumn | string | The object’s own hash-key column, which the insert keys on. |
source | table ref? | Conditional: sources[0], identical object; absent when the resolver returned none. |
sources[] | table ref[] | Every upstream staging table feeding this load, in resolver order; columns ordinal-sorted, empty when unresolvable. |
ghost | object | The shared ghost-record block. |
ghostHashKeyColumns | string[] | Every hash-key column taking the zero key on the ghost row: the object’s own keys, then the participating hub hash keys (links only, so a link ghost points at hub ghost rows). |
sequenceColumn | string | The column the merge sequences on. |
recordSourceColumn | string | The record-source column from whichever configuration payload the row carries; empty when none. |
vault-load-versioned
Section titled “vault-load-versioned”Templates: databricks/data_vault/loads/versioned_insert_load.jinja
Roots: kindLabel, this, source (conditional), sources,
keyColumns, sequenceColumn
The versioned insert for the three satellite kinds. No ghost roots by design: a versioned load emits no ghost row.
| Field | Type | Meaning |
|---|---|---|
kindLabel | string | Satellite, Link satellite, or Business satellite. |
this | object | Same shape as the keyed family’s this, except columns are raw (no ghost sentinels). |
source / sources | table ref | Identical semantics to the keyed family. |
keyColumns | string[] | The parent hub or link hash-key column(s) the versioning partitions by. |
sequenceColumn | string | The merge sequence column; when the change-feed default _commit_timestamp resolves for a satellite kind, the vault load-date column substitutes. |
vault-load-reference
Section titled “vault-load-reference”Templates: databricks/data_vault/loads/reference_upsert_load.jinja
Roots: this, codeColumn, source (conditional), sources
| Field | Type | Meaning |
|---|---|---|
this | object | The reference table being written; same shape as the versioned family’s this. |
codeColumn | string | The reference table’s code column: the upsert’s match key. Empty when absent. |
source / sources | table ref | Identical semantics to the keyed family. |
vault-load-bridge
Section titled “vault-load-bridge”Templates: databricks/data_vault/loads/bridge_rebuild_load.jinja
Roots: this, bridge
The bridge rebuild. No source roots (the ratified exception): the traversal below carries every table the load reads.
| Field | Type | Meaning |
|---|---|---|
this | object | The bridge table being written. |
bridge.anchor.fqn | string | The anchor hub (or business hub) the traversal starts from. |
bridge.anchor.hashKeyColumn | string | The anchor’s hash-key column. |
bridge.steps[] | array | Ordered traversal steps, each link joined to its far hub. |
bridge.steps[].alias | string | SQL alias for the step’s link. |
bridge.steps[].linkFqn / .linkHashKeyColumn | string | The step’s link and its hash-key column. |
bridge.steps[].hubFqn / .hubHashKeyColumn | string | The far hub this step reaches and its hash-key column. |
bridge.steps[].joinFromTableAlias / .joinFromHashKeyColumn | string | The alias this step joins from (the anchor, or an earlier step’s hub) and the hash-key column on it. |
vault-load-pit
Section titled “vault-load-pit”Templates: databricks/data_vault/loads/pit_snapshot_load.jinja
Roots: this, pit
The point-in-time snapshot rebuild. No source roots, same exception as bridge.
| Field | Type | Meaning |
|---|---|---|
this | object | The point-in-time table being written. |
pit.anchor.fqn | string | The anchor hub or link supplying the spine’s keys. |
pit.anchor.hashKeyColumn / .loadDateColumn | string | The anchor’s hash-key and load-date columns. |
pit.satellites[].fqn | string | A satellite the snapshot reaches back into. |
pit.satellites[].columnPrefix | string | Output column prefix, de-duplicated when the satellite’s name already carries it (never sat_sat_customer_detail). |
pit.snapshotDateColumn | string | The snapshot spine’s date column. |
pit.cadenceIntervalSql | string | The spine cadence as an INTERVAL literal: 1 HOUR, 1 DAY, 7 DAY, or 1 MONTH (daily when unset). |
pit.satLoadDateColumn | string | The load-date audit column every satellite is scanned at-or-before. |