dbt-feldera
dbt enables data analysts and engineers to transform their data using the same practices that software engineers use to build applications.
Feldera is a streaming SQL engine powered by
the DBSP incremental computation engine. It automatically incrementalizes
every SQL query without watermarks, scans, or MERGE. When input data
changes, only affected output rows are recomputed.
Key features
- Automatic incremental view maintenance (IVM) — Feldera's DBSP engine incrementalizes any SQL query out of the box. No manual merge logic or watermark tuning required.
- Continuous pipeline deployment —
dbt runcompiles and starts a long-running Feldera pipeline; it does not execute one-shot queries. - Connector integration — attach Kafka, Delta Lake, S3, and HTTP connectors directly to models via configuration.
- Easy setup — pure Python adapter with no ODBC driver needed.
Installation
pip install dbt-feldera
or with uv:
uv add dbt-feldera
Requires Python 3.10+ and dbt-core ~1.9.
Configuration
Add a Feldera target to your profiles.yml:
my_project:
target: dev
outputs:
dev:
type: feldera
host: "http://localhost:8080"
api_key: "apikey:..." # optional — for authenticated instances
database: "default"
schema: "my_pipeline" # maps to the Feldera pipeline name
compilation_profile: dev # dev | unoptimized | optimized
workers: 4
timeout: 300
Concept mapping
Feldera uses different terminology than traditional databases. Here's how dbt concepts map to Feldera. Every materialization contributes SQL to a continuously running pipeline — nothing is executed as a one-shot batch query.
| dbt concept | Feldera concept | Description |
|---|---|---|
database |
(unused) | Set to any string (e.g. "default") |
schema |
Pipeline name | Each dbt schema maps to one Feldera pipeline (a continuously running SQL program) |
table materialization |
Input table | External data source (Kafka, HTTP, S3) |
view materialization |
View | SQL view inside the continuous pipeline (all views are incrementally maintained) |
view + stored: true |
Materialized view | Queryable via ad-hoc queries |
seed |
Table + HTTP push | Schema registered, data pushed via HTTP ingress |
Configuration options
| Option | Default | Description |
|---|---|---|
host |
http://localhost:8080 |
Feldera API base URL |
api_key |
(none) | API key for authenticated Feldera instances |
schema |
(required) | Pipeline name in Feldera |
compilation_profile |
dev |
SQL compilation profile: dev (fast compile), unoptimized, or optimized (best runtime performance) |
workers |
4 |
Number of pipeline worker threads |
timeout |
300 |
Max wait (seconds) for pipeline compilation + startup |
Materializations
view — Intermediate transform / Materialized view
Creates a CREATE VIEW in the pipeline. Use for intermediate transformations
that don't need to be queried directly or connected to an output.
-- models/orders_enriched.sql
{{ config(materialized='view') }}
SELECT o.id, o.total, c.name AS customer_name
FROM {{ ref('orders') }} o
JOIN {{ ref('customers') }} c ON o.customer_id = c.id
Set stored: true to promote to a CREATE MATERIALIZED VIEW — a view backed
by persistent storage, enabling ad-hoc queries:
-- models/sales_summary.sql
{{ config(
materialized='view',
stored=true,
connectors=[{'transport': {'name': 'my_delta_connector'}}]
) }}
SELECT
region,
product_category,
SUM(amount) AS total_sales,
COUNT(*) AS order_count
FROM {{ ref('orders') }}
GROUP BY region, product_category
On --full-refresh, the pipeline is stopped, all stored state (including
connector offsets) is cleared, and the pipeline is redeployed from scratch.
table — Input source
Creates a CREATE TABLE — an input source for external data ingress. The model
SQL defines the column schema, not a SELECT query. Attach connectors for
Kafka, S3, HTTP, or other input sources.
-- models/raw_events.sql
{{ config(
materialized='table',
connectors=[{
'transport': {
'name': 'kafka_in',
'config': {
'bootstrap.servers': 'redpanda:29092',
'topics': ['events']
}
},
'format': {'name': 'json'}
}]
) }}
event_id BIGINT NOT NULL,
event_type VARCHAR NOT NULL,
payload VARCHAR,
created_at TIMESTAMP NOT NULL
incremental — Unsupported
streaming_pipeline — Full pipeline as a single model
Deploys an entire Feldera pipeline as one dbt model. The model SQL is the
complete pipeline program — containing CREATE TABLE and CREATE VIEW
statements. Useful for complex multi-table, multi-view pipelines managed as a
single unit.
-- models/my_pipeline.sql
{{ config(materialized='streaming_pipeline') }}
CREATE TABLE orders (
id BIGINT NOT NULL,
customer_id BIGINT NOT NULL,
amount DECIMAL(10, 2) NOT NULL
);
CREATE TABLE customers (
id BIGINT NOT NULL,
name VARCHAR NOT NULL
);
CREATE MATERIALIZED VIEW enriched_orders AS
SELECT o.id, o.amount, c.name AS customer_name
FROM orders o
JOIN customers c ON o.customer_id = c.id;
seed — Reference data via HTTP push
Seeds register a CREATE TABLE and push row data via Feldera's HTTP ingress
API after the pipeline is deployed. Use for small reference datasets (CSVs).
dbt seed # push seed data
dbt seed --full-refresh # stop, clear storage, redeploy, then push
Summary
| Materialization | Feldera SQL | Best for |
|---|---|---|
view |
CREATE VIEW |
Incrementally maintained intermediate transforms |
view + stored: true |
CREATE MATERIALIZED VIEW |
Queryable outputs |
table |
CREATE TABLE |
External input sources (Kafka, S3, HTTP) |
streaming_pipeline |
Full program | Multi-table/view pipelines as a single unit |
seed |
CREATE TABLE + data push |
Small reference datasets (HTTP ingress; any connector can also be attached) |
Documentation
- Feldera documentation — platform docs, SQL reference, connectors
- Pipelines (continuous queries) — how Feldera compiles SQL into an incremental dataflow
- Ad-hoc queries — one-shot DataFusion queries for debugging materialized state
- Materialized tables and views — prerequisite for ad-hoc query access
- dbt documentation — general dbt usage and concepts
Contributing
See CONTRIBUTING.md for development setup, testing, and project layout.
License
Apache-2.0 — see LICENSE for details.
Metadata
Release files for dbt-feldera 0.345.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dbt_feldera-0.345.0.tar.gz | 35.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dbt_feldera-0.345.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 77.0 kB
Release files / dbt_feldera-0.345.0.tar.gz
| Download URL | dbt_feldera-0.345.0.tar.gz |
|---|---|
| Size | 35.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
42fb8b305f6a1507c61df0d63f3538b87f4db3b91481283ce7e2406ce26fad37
|
|
BLAKE2b-256 checksum How to use checksums |
0676327ce191e002464bd49d14bb1eec37adfef7b4871e3012517258b9af74e4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.
Transparency logRelease files / dbt_feldera-0.345.0-py3-none-any.whl
| Download URL | dbt_feldera-0.345.0-py3-none-any.whl |
|---|---|
| Size | 41.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0952b72e1a23aa25a2412ef298309bdab0d3638b9603ca2438e7fdd7476d4a5e
|
|
BLAKE2b-256 checksum How to use checksums |
7f35e4ce960cfccd12742763afb42ed583f3054021bc87af826e1298aff6deb6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.
Transparency log