How Ronja replaces your stack
If your team runs a modern data stack, you already know the shape: a replication tool lands raw data (Fivetran), a warehouse stores and queries it (Snowflake), a transformation framework turns raw tables into modeled ones and tracks lineage (dbt), and a BI tool puts numbers in front of people (Power BI). Four tools, four bills, four sets of glue code, and — usually — a data team in the middle who are the only people allowed to touch any of it.
Ronja collapses that stack shape into one system, and this page is the map of how — written for the person whose job is to evaluate it. Everything here is grounded in how the platform actually works, so it holds up when you dig in.
The one-to-one map
Section titled “The one-to-one map”| Your stack | Ronja’s equivalent | Verdict |
|---|---|---|
| Fivetran — ingest + CDC | Connector framework + log-based CDC + a Parquet push API | Yes — connectors, real CDC, and a push API for anything else. |
| Snowflake — storage + query | Columnar Parquet in S3, queried by DuckDB on serverless compute, with a Postgres partition ledger as the source of truth | Yes for the storage-and-query model. |
| dbt — SQL transforms, DAG, lineage | Derived tables (SQL models with {{ ref() }}), an event-driven rebuild DAG, and computed lineage |
Yes — the strongest one-to-one mapping. |
| Power BI — analysis + delivery | Conversational analysis, charts, and data apps you build by describing them | Yes — dashboards become data apps: simpler to build, and far more flexible. |
Fivetran → connectors, CDC, and a push API
Section titled “Fivetran → connectors, CDC, and a push API”Ronja pulls data in with a connector framework, and every sync lands as columnar Parquet in S3 — the same physical format everything else in Ronja reads. For databases it does real log-based change data capture: logical replication (via wal2json) for Ronja-managed Postgres, and binlog CDC for MySQL. Both do an initial snapshot and then stream changes, at-least-once (you get duplicates on a crash, never silent data loss). There’s also a manual push path: you can PUT Parquet directly and make it queryable, with no connector at all.
On coverage. Ronja ships first-party connectors plus a growing set of OAuth service mappings, and the long tail is covered without waiting for a pre-built connector: the agent’s generic HTTP tool can pull from any REST API, and the Parquet push API lets you land data directly. Log-based CDC keeps MySQL and Ronja-managed Postgres continuously in sync; other databases sync incrementally on a schedule. See Connect a data source for the flow, and Managed databases for the Ronja-hosted Postgres you can build on and mirror via CDC.
Snowflake → Parquet-in-S3 + DuckDB, no warehouse to load
Section titled “Snowflake → Parquet-in-S3 + DuckDB, no warehouse to load”There is no load-into-warehouse step. Every table is Parquet in S3 under a deterministic per-table key prefix, and the query engine is DuckDB — embedded, columnar, vectorized — reading those Parquet files directly off S3. Compute is AWS Lambda or AWS Batch, sized to the data, escalating automatically to a bigger container if a job runs out of memory or time. The authoritative record of a table’s current file set is a Postgres partition ledger, not an open-table-format catalog. Safe snapshot-swap and version history are implemented in Postgres plus S3 versioning, giving a 30-day recovery window.
The real differentiator here is zero idle cost: there’s no always-on cluster keeping data hot in RAM, so you pay only when a query actually runs. That’s a genuine trade — it means a query is a serverless invocation rather than a sub-second hit against a warm cluster. The data platform covers the storage and query model in depth.
dbt → derived tables + an event-driven rebuild DAG
Section titled “dbt → derived tables + an event-driven rebuild DAG”This is the cleanest mapping of the four. A derived table is a SQL model: DuckDB SQL that references upstream tables with dbt-style {{ ref('tableID') }}, materialized to Parquet. Ronja tracks the dependency DAG from those refs, and when an upstream table changes, the derived tables that depend on it are re-materialized automatically — and their dependents after them, propagating transitively down the DAG. Full lineage is computed from those real reference edges, not guessed, and surfaced both to you and to the agent.
Every model is version-controlled: edits land as drafts, get reviewed, and publish as a new version with full history — so you can see what changed, who changed it, and roll back if you need to. Create tables with Ronja is the hands-on recipe, and The data platform has the rebuild-cascade mechanics.
Power BI → conversational analysis + data apps
Section titled “Power BI → conversational analysis + data apps”Ronja’s delivery surface is a conversation: you ask a question, the agent writes and executes SQL or Python, and you get the engine’s actual output — tables, charts, and data apps your team can open on their own. Business users go deep into the data themselves without waiting on a data-team ticket.
Where Power BI has dashboards, Ronja has data apps — and you build them the same way you do everything else: by describing what you want. Instead of dragging tiles onto a fixed canvas, you tell Ronja “show dealers by country as a bar chart with a country filter” and it builds a real, interactive app. That makes them both simpler to build — no visual-authoring learning curve — and far more flexible: a data app is real code, so it can do anything a web page can (custom interactions, multiple linked views, inputs that write back), not just the chart types a report builder happens to offer. See Build a data app.
And because the agent never invents numbers — it writes code, a real engine runs it, and every answer is reproducible from the exact query — this holds up under scrutiny in a way a chatbot that guesses figures never could. That guarantee is in Deterministic by design.
The headline
Section titled “The headline”Ronja is a genuine Parquet-and-DuckDB lakehouse with dbt-style transforms, a real dependency-DAG rebuild engine, version-controlled models, computed-not-guessed answers, and log-based CDC for Postgres and MySQL. It collapses the four-tool stack shape into one system — and the payoff is one system instead of four, dramatically less glue, serverless economics (you pay only when a query runs), and business users who can answer their own questions, and build their own data apps, without a data-team bottleneck.