Quick verdict
Choose DuckDB when the data fits on one machine and you want to iterate on queries without a per-query bill: local compute is free, and repeated exploration of the same Parquet files costs nothing extra. Choose BigQuery when data is too large or too shared for one machine, when many users and BI tools need governed access, or when your data already lives in Google Cloud. BigQuery's sandbox lets you try it with no credit card, within limits. A common hybrid is to keep the shared tables in BigQuery and pull a filtered extract into DuckDB for exploration, via the Storage Read API or Parquet exports.
DuckDB is an in-process analytical (OLAP) SQL database. It runs inside a host program with no server, uses a columnar, vectorised engine, and queries Parquet, CSV and JSON files directly on local disk or object storage, including Google Cloud Storage through its S3-compatible interface. It is free under the MIT License. duckdb.org lists 1.5.6 (28 September 2026) as the latest stable release and 1.4.5 as the current LTS release, with 2.0.0 scheduled for 21 October 2026.
BigQuery is Google Cloud's serverless data warehouse. Google describes a "serverless architecture" with "zero infrastructure management" and separate compute and storage layers. It supports open table formats such as Apache Iceberg, Delta and Apache Hudi through BigLake, and BigQuery Omni can query data held in AWS and Azure. You do not size or start clusters: you send SQL (GoogleSQL) and pay either for the bytes each query processes or for reserved slot capacity.
For DuckDB against another warehouse with a different billing model (credits for running virtual warehouses), see DuckDB vs Snowflake. This page focuses on what is specific to BigQuery: per-byte billing, the sandbox and reading BigQuery data from DuckDB.
Side by side
| Aspect | DuckDB | BigQuery |
|---|---|---|
| What it is | Embedded analytical engine (a library); no server | Serverless cloud data warehouse on Google Cloud |
| Where compute runs | Your own machine, server, container or browser | Google-managed; no clusters to size, start or stop |
| How you pay for queries | Nothing beyond your hardware | On-demand: per TiB processed (first 1 TiB per month free); or capacity: slots in Standard, Enterprise or Enterprise Plus editions |
| Free way to try | Always free (MIT License) | BigQuery sandbox: no credit card, 10 GiB storage, 1 TiB of queries per month, tables expire after 60 days |
| Scale and sharing | One machine; one writing process per database file; no users | Many concurrent users with Google Cloud IAM permissions |
| SQL dialect | Close to PostgreSQL, plus extensions such as GROUP BY ALL | GoogleSQL |
| Reading the other | Community bigquery extension reads BigQuery tables through the Storage Read API | Loads or queries Parquet files that DuckDB writes to Cloud Storage |
| Main trade-off | Limited to one machine; sharing and governance are yours to build | Every on-demand query has a cost, and badly written queries can scan far more than needed |
Key differences
Paying per byte scanned versus free local compute
BigQuery's on-demand model charges for the number of bytes each query processes, with the first 1 TiB per month free. Google's pricing page adds details that matter for exploratory work: charges are rounded up to the nearest MB, with a minimum of 10 MB per table referenced and 10 MB per query; queries that error or that return cached results are not charged; and cancelling a running query may still incur charges up to the full cost. Google's cost guide also warns that on a non-clustered table, adding LIMIT does not reduce the data read. A SELECT * over a wide table therefore costs the same whether you look at ten rows or ten million.
BigQuery gives you tools to control this: a dry run returns the estimated bytes without charge, and a maximum bytes billed setting makes a query fail, without charge, if its estimate is over the limit. The alternative is capacity pricing, where you pay for slots (virtual CPUs) over time in the Standard, Enterprise or Enterprise Plus edition, which suits steady, heavy use better than bursts.
With DuckDB the compute is the machine you already have, so running the same query fifty times while you refine it costs nothing extra. In our view this is the main practical reason people reach for DuckDB alongside BigQuery: iterative exploration of a dataset that fits on a laptop, without watching the bytes counter.
The BigQuery sandbox versus DuckDB as a learning tool
Both are free ways to start. The BigQuery sandbox needs no credit card or billing account. Google lists its limits: a lifetime 10 GiB of storage (not refunded when you delete data), 1 TiB of processed query data per month (the same as the free tier), and a default 60-day expiry on all tables, views and partitions. It does not support streaming data, DML statements (INSERT, UPDATE, DELETE, MERGE) or the BigQuery Data Transfer Service.
DuckDB has no such limits beyond your disk and memory, supports DML, and works offline. The sandbox, on the other hand, gives you BigQuery's public datasets, its console and GoogleSQL, which matters if the job you are preparing for uses BigQuery. For learning SQL itself, either works; for learning BigQuery, use the sandbox. To practise, see the SQL exercises.
Reading BigQuery data from DuckDB
DuckDB can read BigQuery tables through the bigquery community extension. It is community-maintained (by hafenkran), MIT licensed, and not an official DuckDB or Google project. It reads native tables through the BigQuery Storage Read API with projection and filter pushdown, can run GoogleSQL in BigQuery with bigquery_query(), and supports Linux, macOS and Windows (amd64) builds but not WebAssembly. Authentication can use Google Application Default Credentials.
-- DuckDB: read a BigQuery table, then keep a local Parquet extract
INSTALL bigquery FROM community;
LOAD bigquery;
ATTACH 'project=my_gcp_project' AS bq (TYPE bigquery, READ_ONLY);
COPY (
SELECT order_id, region, amount
FROM bq.sales.orders
WHERE order_date >= DATE '2026-09-01'
) TO 'orders_sept.parquet' (FORMAT parquet);Reads through the Storage Read API are billed by BigQuery, not by DuckDB: Google lists a free allowance of 300 TiB of bytes read per month per billing account, after which reads are charged per TiB, and network egress charges apply to data leaving Google Cloud, for example to your laptop. Queries passed through bigquery_query() run in BigQuery and are billed like any other query. The extension's README itself reminds users that BigQuery is a paid service and suggests budget alerts.
The other direction uses open formats. DuckDB writes Parquet that BigQuery can load or query from Cloud Storage, and DuckDB's iceberg extension documents Google Cloud BigLake among the Iceberg REST catalogs it can attach.
Serverless at scale versus a single machine
"Serverless" means different things here. BigQuery is serverless in the cloud sense: Google allocates compute for each query from a shared pool (or your reserved slots), so the size of the data is not limited by any one machine you own, and many users can query at once with Google Cloud IAM controlling access. DuckDB is serverless in the embedded sense: there is no server process at all, and the limit is the CPU, memory and disk of the machine running it, with documented spilling to disk for large joins, aggregations and sorts.
Editorially, DuckDB is usually enough when one person or process analyses data that fits on one machine and access can be controlled through files or buckets. BigQuery earns its cost when data is shared across a team, too large for one machine, or already flowing into Google Cloud from other services.
Pricing and licensing
DuckDB is free and open source under the MIT License, with no paid edition. Costs are your own hardware plus any cloud storage reads and egress. Extended LTS support is offered commercially by DuckDB Labs; prices are not published. MotherDuck, a separate company, sells a hosted service built on DuckDB; see DuckDB vs Snowflake for its plans.
BigQuery has two compute pricing models. On-demand is listed on Google's pricing page in October 2026 at USD 6.25 per TiB processed in US regions such as Iowa (us-central1), with the first 1 TiB per month free per billing account; prices differ by location. Capacity pricing bills slot-hours in the Standard, Enterprise or Enterprise Plus edition, with optional one- or three-year commitments in Enterprise and Enterprise Plus. Storage is billed separately per GiB (logical or physical, active or long-term), with the first 10 GiB per month free. The Storage Read API has its own per-TiB charge after a free 300 TiB per month, and network egress is charged separately. The sandbox is free without a billing account, within the limits above.
Prices exclude tax and change; use Google's pricing calculator for estimates.
Pricing checked on the vendors' official pages on 7 October 2026. Prices change; confirm before buying.
Where each one leads
DuckDB strengths
- Free local compute, so repeated exploratory queries add no cost
- No account, project or billing setup: install a package and query files
- Supports DML and works offline, without sandbox-style limits
- Can read BigQuery tables through the community bigquery extension and keep local Parquet extracts
- Reads Iceberg tables, including through a Google Cloud BigLake catalog
BigQuery strengths
- Serverless at cloud scale: no clusters to size, start or stop
- Many concurrent users with Google Cloud IAM permissions
- Sandbox with no credit card, and a free 1 TiB of on-demand queries per month
- Dry runs and maximum bytes billed settings to control on-demand costs
- BigLake support for Iceberg, Delta and Hudi, and BigQuery Omni for data in AWS and Azure
Limitations
DuckDB limitations
- Limited to one machine's CPU, memory and disk
- Only one process can write a database file; no users, permissions or network service
- The BigQuery extension is community-maintained, not an official DuckDB or Google project
- Fast release cadence, with 2.0.0 scheduled for 21 October 2026
BigQuery limitations
- On-demand queries are billed by bytes processed, with a 10 MB minimum per table and per query
- LIMIT does not reduce bytes read on non-clustered tables, so careless queries can be costly
- Sandbox has no DML or streaming, 10 GiB lifetime storage and 60-day table expiry
- Runs only as a Google Cloud service, with GoogleSQL as its dialect
When to choose each
Choose DuckDB if
- You explore data repeatedly and do not want each query to have a cost
- The data fits on one machine, or you can work from a filtered extract
- You want to analyse Parquet or Iceberg data without loading it into a warehouse
- You want to prototype transformations locally before running them in BigQuery
Choose BigQuery if
- Data is shared across a team and needs IAM-controlled, concurrent access
- Data volume is beyond what one machine handles comfortably
- Your data already lands in Google Cloud from other services
- You want to learn BigQuery itself, starting with the free sandbox
When neither is right
- You are choosing between cloud warehouses: see Snowflake vs BigQuery and BigQuery vs Redshift.
- You need a self-hostable server for real-time analytics: see ClickHouse vs BigQuery.
- Your analytics are modest and your data sits in an application database: PostgreSQL may be enough; see BigQuery vs PostgreSQL and DuckDB vs PostgreSQL.
- You need a local database for an application rather than analysis: see DuckDB vs SQLite.
Final recommendation
The decision between DuckDB and BigQuery is largely about where compute runs and who pays for it. BigQuery is the shared, serverless warehouse for data that is large, shared or already in Google Cloud, and its on-demand model charges for the bytes each query processes. DuckDB is free compute on your own machine, best for iterative, single-user analysis of data that fits there. Many teams use both: BigQuery as the system of record for analytics, and DuckDB for local exploration of extracts read through the Storage Read API or exported as Parquet, keeping an eye on BigQuery's read and egress charges.
Frequently asked questions
Can DuckDB query BigQuery directly?
Yes, through the community-maintained bigquery extension (INSTALL bigquery FROM community;). It attaches a Google Cloud project and reads tables through the BigQuery Storage Read API, or runs GoogleSQL in BigQuery with bigquery_query(). BigQuery bills those reads and queries as usual.
Is BigQuery free?
Partly. Each billing account gets 1 TiB of on-demand query processing and 10 GiB of storage free per month. The BigQuery sandbox lets you use BigQuery without a credit card, with 10 GiB of lifetime storage, 1 TiB of queries per month, 60-day table expiry and no DML or streaming.
Why does a query with LIMIT 10 still scan the whole table in BigQuery?
Google's cost guide says that for non-clustered tables a LIMIT clause does not affect the amount of data read, and on-demand billing is based on bytes processed. Select only the columns you need, use partitioned or clustered tables, and check the estimate with a dry run first.
Is DuckDB cheaper than BigQuery?
DuckDB itself is free, so for work that fits on one machine the compute cost is your own hardware. That is not the same as being cheaper overall: if many people need shared, governed access, or the data does not fit one machine, the work of building that around DuckDB has its own cost. We make no general cost claim.
Does DuckDB support GoogleSQL?
No. DuckDB's dialect closely follows PostgreSQL. Simple queries usually carry over, but functions, date handling and data types often need changes. The bigquery extension's bigquery_query() function sends GoogleSQL to BigQuery to run there.
Sources
- DuckDB: Release calendar
- DuckDB community extension: bigquery
- duckdb-bigquery repository (README and licence)
- DuckDB: Iceberg REST catalogs
- BigQuery: Introduction
- BigQuery pricing
- BigQuery: Sandbox
- BigQuery: Estimate and control costs
Checked October 2026.
How we research comparisons: our editorial method.