Defining an asset
Place Python files underassets/ and decorate functions with @asset:
AssetContext and returns through ctx.result(...).
Materialization
Assets record whether they actually produced an artifact viamaterialized:
materialized=True- the artifact was produced this run.materialized=False- the asset ran but produced nothing (e.g. it only observed state). This is not a skip; the node still succeeded.
materialized; tasks do not.
Dependencies
Assets declare dependencies withdepends_on (a single function, tuple, or list), and may depend on tasks, assets, and loaders:
Columns and column lineage
Assets can declare a schema for catalog and lineage purposes. This does not enforce anything at runtime; it describes the artifact:columns- column declarations withname, optionaltype,nullable,description, andmeta.column_lineage- maps each asset column to upstream{node, column}references, surfaced in the DAG artifact and integrations.
columns or column_lineage.
Skipping and retries
Assets support the samectx.skip(...) and retry behavior as tasks:
Decorator parameters
| Parameter | Description |
|---|---|
name | Override the node name (defaults to the function name) |
depends_on | Upstream nodes (function, tuple, or list); model()/source() for read-only SQL refs |
columns | Column declarations for the produced artifact |
column_lineage | Map of asset column to upstream {node, column} references |
tags | Labels for selection and grouping |
group | Display/catalog grouping |
description | Docs (defaults to docstring) |
meta | Freeform JSON metadata |
retry | A RetryPolicy |
Running assets
sqb build. Use --no-python to suppress read-side assets while still loading sources.
