How It Works
Four steps from stream to feature
Link data sources, write standard SQL, deploy an incremental pipeline, and deliver fresh features to your models.
Connect your sources
Set Kafka topics, Postgres replication slots, MySQL binlog connections, or S3 paths as inputs. Credentials stay encrypted and never enter query configs.
sources:
- name: transactions
type: kafka
config:
bootstrap_servers: "broker-host:9092"
topic: "txn-events"
group_id: "feldera-pipeline-1"
schema_format: json
# credentials resolved from secrets store
Write your SQL
Write SELECT, GROUP BY, JOIN, and window functions as usual. Feldera parses the query into an incremental operator plan, with no new DSL.
CREATE VIEW fraud_features AS
SELECT
card_id,
SUM(amount) AS spend_1h,
COUNT(*) AS txn_count_1h,
AVG(amount) AS avg_txn
FROM transactions
WHERE event_time > NOW() - INTERVAL '1 hour'
GROUP BY card_id;
Deploy incrementally
Run one CLI command or use the web UI to push the pipeline. Feldera initializes operator state from current data, then changes to incremental mode. No downtime required.
$ feldera pipeline deploy fraud-features.yaml
Bootstrapping operator state... [████████████████] 100%
Switching to incremental mode... done
Pipeline live. Latency: <100ms
Serve features to models
Call the feature API endpoint from model serving. Features remain current within the pipeline's update latency. Lookups stay point-in-time correct for training and inference.
$ curl -s \
-H "Authorization: Bearer $FELDERA_API_KEY" \
"https://api.example.com/features/fraud-features/card_1234"
{
"card_id": "card_1234",
"spend_1h": 360.22,
"txn_count_1h": 2,
"avg_txn": 180.11,
"updated_at": "2026-08-07T14:23:09Z"
}
Full Walkthrough
Pipeline config reference
A full pipeline uses one YAML config file and a SQL query. Below is the structure for a fraud-feature pipeline with Kafka input and REST API output.
pipeline:
name: fraud-features
description: Transaction velocity features for fraud scoring
sources:
- name: transactions
type: kafka
config:
bootstrap_servers: "$KAFKA_BROKERS"
topic: "txn-events"
group_id: "feldera-fraud"
queries:
- name: fraud_features
sql: |
SELECT card_id,
SUM(amount) AS spend_1h,
COUNT(*) AS txn_count
FROM transactions
WHERE event_time > NOW() - INTERVAL '1 hour'
GROUP BY card_id
outputs:
- name: feature-api
type: rest
config:
key_field: card_id
latency_slo_ms: 100
Get started
Build your first pipeline?
The quickstart guide gets you to a working pipeline in under 10 minutes. Open-source self-hosting needs no credit card.