June 19, 2026
Why StarRocks Is Better Than DuckDB for Data Warehousing and the Modern Data Stack in a Box
The use case: DuckDB as the warehouse at the center of a βdata stack in a boxβ

By Mark Anderson
6 min read
The use case: DuckDB as the warehouse at the center of a "data stack in a box"
One of DuckDB's most talked-about use cases in 2026 is acting as the data warehouse itself β the analytical core of a lean, low-cost "modern data stack in a box." The pattern has a real following: pair an ingestion tool like dlt, let DuckDB hold and transform the data, run dbt's dbt-duckdb adapter on top for modeling, and you have a complete analytics stack that fits on a single machine and costs a fraction of Snowflake or BigQuery. Vendors have leaned into it hard β MotherDuck positions itself as "the cloud data warehouse built on DuckDB" and pitches cutting cloud-warehouse costs by 70% or more.
The appeal is obvious. DuckDB is genuinely fast on a single box, installs in seconds, reads Parquet and CSV directly, and removes an enormous amount of operational overhead. For a solo analyst, a small team, or a local development loop, treating DuckDB as "the warehouse" is a legitimately good idea β and for that scope this post is not an argument against it.
The trouble starts when "data stack in a box" graduates into "the warehouse our whole company runs on": many analysts and dashboards hitting it at once, data that has to stay fresh through the day, models that need to be updated rather than rebuilt, and SLAs measured in seconds. That is precisely the seam where a single-node embedded engine starts fighting its own success β and where StarRocks, a distributed MPP analytical database built to be a production warehouse, is the better foundation.
Where DuckDB-as-the-warehouse hits a wall
It is single-node by design. This is the structural fact everything else follows from. DuckDB is an embedded, in-process engine. A warehouse, on the other hand, eventually outgrows one machine β in data volume, in concurrent users, or in ingest throughput β and a single node gives you no horizon beyond "buy a bigger VM." When Intuit evaluated engines for real-time analytics at 100,000 transactions per second, it looked at ClickHouse, Druid, Pinot, and DuckDB and concluded that DuckDB's "single-node architecture was an operational non-starter." That verdict isn't about DuckDB being slow; it's about the deployment model being wrong for a shared, always-on warehouse.
Concurrency is the wrong shape for a multi-user warehouse. DuckDB's default model is single-writer, multiple-reader within one process. If a second session tries to write while a write is in progress, it blocks or fails, and DuckDB was never meant to scale to many concurrent writers and readers across many hosts. A warehouse is the opposite of that: dozens of analysts, scheduled dbt runs, BI dashboards, and ingestion jobs all hitting the same data at the same time. The usual fix β hand each concurrent user their own DuckDB instance (MotherDuck literally recommends "one Duckling per concurrent user") β only papers over the gap; you are now running a fleet of single-node databases and inheriting the job of keeping them consistent.
Keeping data fresh means rebuilding, not updating. DuckDB over Parquet/CSV is fundamentally a read engine over files. There is no native, transactional path for streaming updates, deletes, and upserts that every subsequent query sees consistently. Late-arriving facts, CDC streams, and corrections get handled by external pipelines that rewrite files β which is exactly the toil a warehouse is supposed to absorb for you. In the modern-data-stack-in-a-box pattern this shows up as dbt jobs that fully rematerialize tables on a schedule rather than continuously updating them.
Multi-table joins at scale force denormalization. Real warehouse workloads are joins β facts against many dimensions, models built on models. Single-node engines under load push teams toward denormalizing data to keep queries fast, which inflates storage, complicates the dbt DAG, and makes the "lean" stack steadily less lean. Intuit's evaluation flagged exactly this class of problem (poor multi-table join performance forcing denormalization workarounds) as a reason single-node and narrowly-scoped engines didn't fit.
Scaling and availability are your problem, not the engine's. A production warehouse needs horizontal scale-out, isolation between competing workloads (so a heavy dbt run doesn't starve the BI dashboards), and resilience if a node dies. None of that is in scope for an embedded single-node engine. You either accept the ceiling or rebuild distributed-systems machinery around DuckDB by hand β at which point you are reimplementing the very thing a real warehouse already is.
How StarRocks approaches the same job
StarRocks is an open-source, MySQL-compatible distributed MPP database designed to be the warehouse β and it keeps much of what makes the lean stack attractive (open formats, dbt compatibility, cheap object storage) without the single-node ceiling.
Distributed MPP execution as the default. StarRocks spreads data and query work across nodes with a cost-based optimizer and a fully distributed execution engine, so joins, shuffles, and aggregations run in parallel across the cluster instead of being constrained to one box. Multi-table joins are a first-class capability, which means you can keep a normalized, star-schema warehouse model rather than denormalizing to survive β the exact thing that pushed Intuit toward StarRocks.
Real high concurrency on shared data. StarRocks is built for many concurrent users hitting the same tables β the canonical high-concurrency BI and customer-facing analytics workload. One cluster serves the whole team against one copy of the data, with a shared cache and an optimizer so the hundredth and thousandth concurrent query benefit from work the cluster already has hot, instead of fanning out to a fleet of isolated single-node instances you have to keep in sync.
Native real-time ingestion and upserts. StarRocks supports primary-key tables with native real-time upserts, so streaming data, CDC feeds, and corrections land in the table and are immediately queryable with a consistent view β no external file-rewriting pipeline. In the Intuit migration this helped take end-to-end data freshness to roughly two seconds and cut data-aggregation time by about 98% at 100K events per second. A warehouse that updates continuously is a different thing from one that fully rebuilds on a schedule.
Computeβstorage separation for lean-stack economics β at warehouse scale. In its shared-data mode, StarRocks keeps data in object storage (S3 or any S3-compatible store) as the single source of truth while stateless compute nodes do the work, backed by a local-disk/memory cache so hot data is served at near-local speed. You get the cheap-object-storage, scale-compute-to-fit economics that draw people to a "lean" warehouse, plus the ability to spin up multiple isolated compute groups β for example, separating ingestion and dbt transforms from interactive BI β so workloads don't fight each other.
Open lakehouse and dbt-friendly, so you don't lose the ecosystem. StarRocks queries open formats and lakehouse tables (Apache Iceberg, Hudi, Delta, Hive) directly and works within the same open-source data ecosystem β Superset, dbt, Airflow β that the modern data stack is built on. You can adopt it as the warehouse without abandoning the tools the lean stack was assembled from.
Standard SQL over the MySQL wire protocol. StarRocks speaks the MySQL protocol, so existing BI tools, drivers, ORMs, and SQL clients connect out of the box. There is no custom API layer to build around your engine β the database is the endpoint, which keeps "easy to adopt" intact while removing the single-node ceiling.
A practical comparison
When DuckDB is still the right call
This is not an argument that DuckDB is a bad warehouse choice everywhere. For a single analyst, a small team, a local development and testing loop, dbt model prototyping, or a genuinely small dataset that fits comfortably on one machine, the data-stack-in-a-box is elegant, cheap, and fast to stand up β and spinning up a distributed cluster would be overkill. DuckDB's zero-ops simplicity is a real advantage at that scale, and the right tool for that job.
The line to watch is the transition from "my warehouse" to "our warehouse." Once many people depend on it at once, data has to stay fresh through the day, models need updating instead of full rebuilds, joins span a real star schema, and answers carry an SLA, you have outgrown the single-node model. At that point you are either capped by one machine or hand-building distributed-systems glue around DuckDB β and StarRocks already is the distributed warehouse, with the open-format, dbt-friendly, cheap-storage economics that made the lean stack appealing in the first place.
Bottom line
DuckDB as "the modern data stack in a box" is attractive because it collapses a warehouse into a single fast, cheap, zero-ops engine. That works beautifully right up to the point where the warehouse has to be shared. StarRocks delivers the same lean-stack instincts β open formats, dbt and BI compatibility, object-storage economics β inside a real distributed database: MPP instead of single-node, high-concurrency instead of one-instance-per-user, real-time upserts instead of scheduled rebuilds, and distributed joins instead of forced denormalization. For a company-wide, always-on warehouse, that's the difference between a clever box and a platform you can build the business on.