Skip to content

Shared shapes

Four record shapes repeat across the template families. Learn them once and most of every family’s contract is already familiar.

Every loading-family root that names a table (this, source, sources[], target) conforms to one shape: the table reference. Two rules hold everywhere it appears: columns is always an array (empty rather than omitted when genuinely unresolvable, so your template can iterate unconditionally), and source is always the identical object to sources[0], never a copy. Optional members appear only when the builder resolved real data; a builder never fabricates a value to fill a slot.

FieldTypeMeaning
namestringThe table’s name. Always present.
fqnstringThe table’s fully qualified name (catalog.schema.name). Always present.
columns[]arrayThe table’s columns. Required as [] rather than omitted, so iteration never needs a guard.
columns[].namestringColumn name.
columns[].dataTypestringDeclared data type.
columns[].isPrimaryKeybooleanWhether the column is part of the primary key.
columns[].isNullablebooleanWhether the column permits NULL.
columns[].customobject?Org-defined custom attribute values at column grain. Conditional: present only when resolved; keys without a live definition never appear.
ulidstring?Conditional: present only when the reference resolved to a cataloged table.
layerstring?Conditional: functional layer slug (source, landing, staging, persistentStaging, and so on).
parts.catalogstringConditional: the fully qualified name decomposed; emitted only by producers whose templates read it. Source-system tables never carry parts: they have no honest catalog, and fabricating one is forbidden.
parts.schemastringSchema component.
parts.namestringTable-name component.
primaryKeysstring[]?Conditional: primary-key column names, when the producer supplies them.
businessKeysstring[]?Conditional: business-key column names, when the producer supplies them. On the staging family this member is column objects instead; see that section.
customobject?Conditional: org-defined custom attribute values at table grain.

The staging family’s column objects carry more than the plain table-reference column: they are the full modeling-grade column, including keys, transformations, lineage, and profiling. Wherever a staging root exposes columns, businessKeys, diffAttributes, or systemColumns, the elements are this shape.

FieldTypeMeaning
namestringColumn name.
dataTypestringDeclared data type.
ordinalnumberColumn position; also the emitted sort order.
isPrimaryKeybooleanPrimary-key flag.
isBusinessKeybooleanBusiness-key flag.
isNullablebooleanNullability; drives NOT NULL in staging DDL.
isSystembooleanDurable system-column marker set at write time.
ulidstring?Column identifier, when the row carries one.
transformationstring?Literal SQL transformation template, placeholders preserved.
transformationArgstring?Resolved separator for a concatenated business-key column.
businessKey.separatorstring?Present only on a business-key column: the separator between constituents.
businessKey.constituents[].columnUlidstringConstituent identity and order for the composed key.
isIgnoredboolean?Excludes the column from emission.
changeTypestring?Change-tracking behavior marker (the legacy Ignore value also excludes).
referenceColumnobject?Foreign-key target: columnUlid, columnFqn, columnExternalId, relationshipType.
sourceColumns[]array?Lineage mirror: the upstream columns this one derives from, each with an optional transform.
profileobject?Resolved column statistics: stats, rowCount, profiledAt, measuredOn (tableFqn, layer), hops, crossedTransform. Unset until a profile exists on the lineage chain.
externalIdstring?External identifier, when imported with one.
customobject?Org-defined custom attribute values at column grain.

Wherever a context carries a ready-to-emit CREATE TABLE block (the DDL family’s per-platform blocks, the Fabric staging load models), each column line is precomputed and aligned so the rendered DDL lines up without any template arithmetic. Emit definition and you get the finished line; the parts are there when you want to compose your own.

FieldTypeMeaning
namestringThe raw column name, unchanged.
safestringThe sanitized name: everything outside letters, digits, underscore, and hyphen stripped.
quotedstringThe sanitized name wrapped in the platform’s identifier delimiters.
dataTypestringThe rendered platform data type.
paddedNamestringquoted right-padded to the block’s name width.
paddedDataTypestringdataType right-padded to the block’s type width.
isNullablebooleanNullability as a truthiness test: an absent source flag reads as NOT NULL.
definitionstringThe finished, right-trimmed column line: indent, padded name, padded type, and NOT NULL where applicable.

The enclosing block also carries alignment.nameWidth (longest sanitized name plus the two delimiter characters) and alignment.dataTypeWidth (longest rendered type): the pad budgets the lines were built with.

The build root is the organization’s (or project’s) build settings as one flat record. Every key is always present; a value that was never configured is the empty string, so templates test emptiness rather than existence.

FieldTypeMeaning
build.jobClusterstringOrchestration: the job cluster specification.
build.gitSourcestringOrchestration: git source for the generated job.
build.assetBundlePathstringOrchestration: asset bundle path.
build.buildOutputPathstringEnvironment: root output path for generated artifacts.
build.repositoryNamestringEnvironment: target repository name.
build.notebookPathstringEnvironment: notebook base path.
build.appendNotebookNamestringEnvironment: whether (and what) to append to a generated notebook name.
build.tempTableSchemastringEnvironment: schema used for temp tables.
build.tableOwnerstringEnvironment: default table owner; the fallback for options.tableOwner.
build.tablePropertiesstringEnvironment: default table properties clause.
build.readFilesOptionsstringEnvironment: default read_files options.
build.copyFormatOptionsstringEnvironment: default COPY INTO format options.
build.copyOptionsstringEnvironment: default COPY INTO copy options.
build.displayTimeZonestringEnvironment: display time zone; the source of options.targetDisplayTimeZone.
build.dataTimeZonestringEnvironment: time zone the stored data is in.
build.stagingModestringData loading behavior: default staging mode before validation (a per-table override wins).
build.notebookLanguagestringData loading behavior: default notebook language (python or sql), used to select the notebook sibling.