Feature catalog for dbt projects, built for ML teams.
Project description
dbt-features
Feature catalog for dbt projects, built for ML teams.
Install
pip install dbt-features
For warehouse enrichment (freshness, row counts, null %), install the extra for your warehouse:
pip install 'dbt-features[duckdb]' # local / dbt-duckdb
pip install 'dbt-features[postgres]' # Postgres
pip install 'dbt-features[redshift]' # Redshift
pip install 'dbt-features[snowflake]' # Snowflake
pip install 'dbt-features[bigquery]' # BigQuery
Requires Python 3.10+. The base install does not depend on dbt-core.
Quickstart
Try it with no setup - bundled sample data, served on a free port:
dbt-features demo
On your dbt project:
dbt parse
dbt-features build --connection my_profile --output ./catalog
dbt-features serve --output ./catalog
In CI, gate on the metadata with the linter:
dbt-features lint --strict # fail on errors and warnings
dbt-features lint --entity-catalog entities.yml # also enforce entity names
For production (with type inference and correct schemas):
dbt docs generate # populates catalog.json with column types
dbt-features build \
--manifest target/manifest.json \
--catalog target/catalog.json \
--connection my_profile --target prod \
--output ./catalog
See Production setup for details.
What it does
- Reads your dbt manifest and finds models marked
is_feature_table: true. - Renders a static HTML site: feature groups, features, lineage, ML model consumers.
- With
--connection, pulls freshness, row counts, null %, and cardinality from the warehouse.
Read-only. No backend, no database.
Python API
Downstream tools can build on the parsed catalog instead of re-reading
manifest.json:
from dbt_features import parse_project
catalog = parse_project("path/to/dbt/project")
for group in catalog.feature_groups:
for feature in group.features:
print(feature.name, feature.consumers_derived, feature.consumers_declared)
Stability: parse_project, Catalog, FeatureGroup, Feature,
ExposureInfo, and LineageRef (all re-exported from dbt_features) are the
public, provisional surface. They are intended to be stable but are not
yet semver-locked — the resolved data model is still settling as the linter
(v0.5) and column-level lineage (v0.6) land, so expect only additive
changes, called out in the changelog, until it freezes at v0.6. Anything
prefixed _, the renderer/enrichment internals, and the HTML layout are
internal and may change at any time. Feature.used_by is deprecated in
favour of consumers_derived / consumers_declared and will be removed in
v0.6.
Docs
- Metadata schema - how to mark a model as a feature table
- Warehouse enrichment - freshness, row counts, profile examples
- dbt package - compile-time validation
- Deploying the catalog - GitHub Pages, S3, Netlify
Development
git clone https://github.com/gauthierpiarrette/dbt-features
cd dbt-features
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest
License
Apache 2.0. Not affiliated with dbt Labs.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dbt_features-0.5.1.tar.gz.
File metadata
- Download URL: dbt_features-0.5.1.tar.gz
- Upload date:
- Size: 1.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
44b9e41715aeaeaa7f3edf9a5eb1122475edc33f4c1a55de26f23b06d5900586
|
|
| MD5 |
c7a725ecaf191cae226a1f3b5f5023aa
|
|
| BLAKE2b-256 |
b4f0c74d50a7e7b63daf4181a7c72f3b009a693ea660f768fdeff074a31c21d5
|
Provenance
The following attestation bundles were made for dbt_features-0.5.1.tar.gz:
Publisher:
release.yml on gauthierpiarrette/dbt-features
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dbt_features-0.5.1.tar.gz -
Subject digest:
44b9e41715aeaeaa7f3edf9a5eb1122475edc33f4c1a55de26f23b06d5900586 - Sigstore transparency entry: 1704666524
- Sigstore integration time:
-
Permalink:
gauthierpiarrette/dbt-features@3d2221beb20913e609cf90ab07962323d30f3b99 -
Branch / Tag:
refs/tags/v0.5.1 - Owner: https://github.com/gauthierpiarrette
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3d2221beb20913e609cf90ab07962323d30f3b99 -
Trigger Event:
push
-
Statement type:
File details
Details for the file dbt_features-0.5.1-py3-none-any.whl.
File metadata
- Download URL: dbt_features-0.5.1-py3-none-any.whl
- Upload date:
- Size: 1.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff3d5ab249a89d9cc9bfc229f026fd513ae7f2cb7a15e5cdf79e81f9ee3acdb5
|
|
| MD5 |
36c1aa26387941b05ad0d3876ed60dee
|
|
| BLAKE2b-256 |
f42a37ba0341d2934a0f471983464b9bcf22e32a249aa9da5599db4b2c394f6c
|
Provenance
The following attestation bundles were made for dbt_features-0.5.1-py3-none-any.whl:
Publisher:
release.yml on gauthierpiarrette/dbt-features
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dbt_features-0.5.1-py3-none-any.whl -
Subject digest:
ff3d5ab249a89d9cc9bfc229f026fd513ae7f2cb7a15e5cdf79e81f9ee3acdb5 - Sigstore transparency entry: 1704666530
- Sigstore integration time:
-
Permalink:
gauthierpiarrette/dbt-features@3d2221beb20913e609cf90ab07962323d30f3b99 -
Branch / Tag:
refs/tags/v0.5.1 - Owner: https://github.com/gauthierpiarrette
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3d2221beb20913e609cf90ab07962323d30f3b99 -
Trigger Event:
push
-
Statement type: