Data warehouse pricing: on-demand vs provisioned
Short answer: a data warehouse stores structured data for analysis. The big clouds sell several ways to pay for it, and the right one depends on how steadily you query. Pay per data scanned when use is light or irregular. Reserve capacity when many people query all day.
Key points
- Three models: per data scanned, per compute time, provisioned capacity.
- On-demand has no idle cost. Provisioned has predictable cost.
- Storage is billed separately and is usually small next to compute.
- Dashboards that refresh often multiply scans.
- Partitioning and columnar formats cut scanned bytes.
Which services are there?
| Cloud | Common warehouse services |
|---|---|
| AWS | Redshift (provisioned and serverless), Athena for queries on files |
| Azure | Synapse Analytics, Microsoft Fabric |
| Google Cloud | BigQuery |
| Oracle | Autonomous Data Warehouse |
Athena and BigQuery’s on-demand mode price by data scanned. See serverless SQL pay per scan.
What are the three billing models?
- Per data scanned. You pay for bytes read by each query. No idle cost. A query that reads a huge table costs the same however fast it is. Best for light or irregular use.
- Per compute time. You pay for the seconds a serverless engine runs, in units of capacity. Cost follows how long and how big your queries are.
- Provisioned capacity. You pay for a cluster by the hour, or reserve slots, whether or not it is busy. Best for steady, heavy use, with predictable cost.
Storage is billed separately in each case.
What does a worked example look like?
Made-up round numbers to show the method, not real prices. A table holds 2 TB. A dashboard runs 20 queries on refresh, each scanning 200 GB, and refreshes 40 times a day.
- Scanned per day: 20 x 200 GB x 40 = 160,000 GB = 160 TB.
- Scanned per month (30 days): 4,800 TB.
| Model | Calculation (made up) | Monthly cost |
|---|---|---|
| Per data scanned | 4,800 TB x 6.00 per TB | 28,800 |
| Provisioned cluster | 730 h x 12.00 per hour | 8,760 |
| Per data scanned, after partitioning to read 10 GB per query | 4,800 TB / 20 = 240 TB x 6.00 | 1,440 |
The unpartitioned dashboard is wildly expensive on a scan-priced service. A provisioned cluster tames it, and partitioning tames it much more. The fix is the data layout, not the pricing model. With 5 queries a day instead of 800, the scan model costs 5 x 200 GB x 30 = 30 TB x 6.00 = 180, and the cluster at 8,760 is the wrong choice. Both directions of mistake are expensive.
How should I choose?
| Pattern | Leans toward |
|---|---|
| A few queries a day, unpredictable | Per data scanned |
| Many analysts all day | Provisioned or reserved |
| Short bursts of heavy work | Serverless compute time |
| Dashboards refreshing often | Provisioned, or caching, since refreshes repeat the same scan |
What makes the bill grow?
- Selecting all columns when you need three.
- Missing partitions, so every query reads every row. See partitioning and Parquet.
- Dashboards that rerun queries on every view.
- Copies of the same data in several formats.
- Data leaving the cloud. See data transfer costs.
Which mistakes are common?
- Using a scan-priced service for an always-on dashboard without caching.
- Provisioning a cluster for ten queries a day.
- Storing data as CSV when columnar files would scan far less.
- No cost cap per query or per user.
Decision checklist
- How many queries a day and how much does each scan?
- Do dashboards refresh automatically?
- Are tables partitioned and columnar?
- Is there a per-query or per-user limit?
Next steps
Use the data platform estimator to price storage, scanned queries and transforms across clouds, then compare with a provisioned quote from the vendor’s page. Data lake cost basics covers the surrounding pieces.
Frequently asked questions
How is BigQuery priced?
It offers an on-demand mode that bills by data scanned per query and a capacity mode that reserves compute slots. Storage is billed separately. Check Google's page for the current terms.
What is the difference between on-demand and provisioned?
On-demand bills per query or per second with no idle cost. Provisioned reserves a cluster or capacity by the hour whether or not it is busy, for predictable cost at steady, heavy use.
Which is cheaper for a small team?
On-demand usually, since a few queries a day cost less than an always-on cluster. Move to provisioned when many analysts query all day.
Why do dashboards cost so much?
Each refresh reruns queries and scans data again. Many users refreshing often multiply the scans, so caching or a provisioned model helps.
How do I lower scan costs?
Select only the columns you need, partition tables so queries read a slice, use columnar formats and avoid duplicate copies.