These are the 8 best cloud data warehouses ranked by query shape and meter, not by logo size:
- Tinybird
- Snowflake
- Google BigQuery
- Amazon Redshift
- Databricks SQL
- Firebolt
- Microsoft Fabric
- ClickHouse® Cloud
A cloud data warehouse is rented analytical compute on object storage. Credits, bytes scanned, RPUs, DBUs, FBUs, Fabric CUs, and vCPU-seconds produce opposite monthly numbers for identical SQL. This ranking uses 5 production query shapes: a 1-hour rollup tile, a high-cardinality breakdown, a join to a ~1M-row dimension, a 90-day scan, and an idle-then-poke resume. Full SQL and official list prices are below the 8 writeups.
Tinybird is on the list because those 5 shapes are often product APIs, not Looker seats. A warehouse can run the SQL. It still bills a resume minimum and has no per-request token. Self-hosted Spark, Trino, or ClickHouse® still exist. They are not what most RFPs mean by cloud data warehouse. Who you contract with is a different question: data warehousing vendors.
The 8 Best Cloud Data Warehouses
1. Tinybird for product APIs
Tinybird is managed ClickHouse plus the serving layer the other 7 warehouses leave on the roadmap: the Events API, a Kafka connector, SQL pipes as .datasource / .pipe files or TypeScript (@tinybirdco/sdk), and HTTP endpoints with resource-scoped tokens. Same 5 queries as the rest of this post. Q1 is an API, not a JDBC session against a virtual warehouse that might be asleep.
Ingest does not wait for a COPY job or a Firehose buffer. POST JSON at 1K+ events/sec is a normal starting envelope; data is queryable in seconds. Kafka is optional when the producer is already on a topic. Schema changes go through FORWARD_QUERY / ALTER on deploy instead of a weekend warehouse migration. Local npx tinybird dev matches production SQL. npx tinybird preview spins an ephemeral branch per PR. npx tinybird deploy is the production cut.
Q1 as a published pipe, tenant-scoped:
NODE tile
SQL >
SELECT
toStartOfMinute(ts) AS minute,
path,
count() AS requests,
quantile(0.95)(duration_ms) AS p95_ms
FROM events
WHERE tenant_id = {{ String(tenant, required=True) }}
AND ts >= now() - INTERVAL 1 HOUR
GROUP BY minute, path
ORDER BY minute, path
TYPE ENDPOINT
The app calls that endpoint with a token that can only read this pipe. There is no warehouse resume, so Q5 (idle then poke) does not add a 60-second billable minimum. Resend publishes product analytics at 62 ms p90 on this shape with hundreds of thousands of active users. Factorial shipped 12 dashboards on the same pattern. Those are serving SLAs, not BI refresh times.
Pricing is a monthly Developer plan ($25 to $799 for 0.25 to 8 baseline vCPUs) plus extra compute at $0.0002 per vCPU-second. S-4 and S-8 burst to 2x before HTTP 429 on reads; ingest is not blocked. SaaS plans go to 32 vCPUs on shared infrastructure. Enterprise is dedicated ClickHouse with a 99.9% uptime SLA, SOC 2 Type II, HIPAA, and GDPR. The meter grows with bytes processed per query and concurrency, not with a warehouse left on 24/7.
Q2 (high-cardinality country breakdown) is the same pipe with a different GROUP BY, as long as country is a column. Q3 (join to a 1M-row tenants table) belongs in a second pipe or a dimension datasource, not in an ad-hoc Looker explore. Q4 (90-day scan) should hit a materialized 1-day rollup, not raw events. Tinybird expects those serving queries to be declared. 40 unmodeled Salesforce tables belong on Snowflake or BigQuery. Looker seats on overnight grain do not need this product. That is why those two still appear below.
2. Snowflake
Snowflake is the independent multi-cloud warehouse: micro-partitions, virtual warehouses, Time Travel, Zero-Copy Cloning, Secure Data Sharing. Architecture is one more warehouse for ELT, BI, and data science isolation.
An XS virtual warehouse burns 1 credit per hour while awake. Each size step doubles that (S=2, M=4, L=8). Snowflake's Service Consumption Table lists on-demand credits in AWS US East (N. Virginia) at $2.00 Standard, $3.00 Enterprise, $4.00 Business Critical. Storage is separate, commonly cited near $23/TB-month on capacity contracts and closer to $40/TB-month on demand. Resume has a 60-second minimum. A 4-second tile after idle is billed as a minute. A Medium warehouse left on 24/7 is 2,920 credits/month before multi-cluster.
Sharing is the feature competitors still copy poorly: live data to a customer without an export job. Business Critical is $4/credit in us-east-1. That rate applies to every credit in the account, not only the regulated schema.
Embedding Snowflake JDBC in a user-facing app produces resume delay, credit burn, and no per-request token model. Snowflake alternatives is the product-level exit when that ticket lands. If the deployment is already on 1 cloud and shares are unused, the independence argument is weaker.
3. Google BigQuery
BigQuery is Dremel as a service. Slots or on-demand scan, Colossus storage, a SQL dialect analysts already know, federated reads into GCS. BI Engine caches hot aggregates. BigQuery ML keeps simple models in-SQL.
Google's on-demand list is $6.25 per TiB scanned after the first 1 TiB/month free. Slot editions flip the meter: Standard $0.04, Enterprise $0.06, Enterprise Plus $0.10 per slot-hour (US pay-as-you-go). On-demand penalizes wide SELECT * and unclustered tables. Slot editions make sense once the same dashboard SQL runs all day.
Audit before arguing with FinOps:
SELECT
user_email,
query,
total_bytes_billed / POW(1024, 4) AS tib_billed,
total_slot_ms / 1000 / 60 / 60 AS slot_hours
FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
AND job_type = 'QUERY'
AND state = 'DONE'
ORDER BY total_bytes_billed DESC
LIMIT 50;
That query is how to catch the Looker explore that scans 80 GB every 30 seconds. BI Engine is not a global low-latency API. Capacity is limited and eviction is real. BigQuery alternatives covers the serving gap. If the estate is not on GCP and a second identity plane is unwanted, BigQuery is the wrong shortlist.
4. Amazon Redshift
Redshift is MPP Postgres-flavored SQL inside an AWS account. RA3 separates managed storage from compute. Spectrum hits S3. Serverless sells RPU-seconds. VPC, IAM, and KMS are why regulated teams stay.
AWS lists about $0.375 per RPU-hour in us-east-1, with a 4 RPU floor ($1.50/hour of active time) and a 60-second minimum. 1 RPU is 16 GB of memory. The 4-RPU SKU caps managed storage around 32 TB and 100 columns per table. After a scale-up, capacity can stay at the higher RPU level. Set a max RPU hours guardrail. RA3 is a different product: nodes (ra3.xlplus is on the order of $1/hour on-demand in us-east-1) and operator-owned pause/resume.
Distribution styles (KEY, EVEN, ALL) still punish a wrong join key on day 1:
CREATE TABLE events (
ts TIMESTAMP,
tenant_id VARCHAR(32),
path VARCHAR(128),
status SMALLINT,
duration_ms INTEGER
)
DISTSTYLE KEY
DISTKEY (tenant_id)
SORTKEY (tenant_id, ts);
KEY on tenant_id keeps the rollup tile and the dimension join local if tenants is DISTKEY (id) or ALL. EVEN on a 90-day fact plus KEY on the dimension is a shuffle every refresh. Vacuum and sort-key maintenance did not fully disappear in Serverless.
Spectrum is S3 scan with warehouse semantics, not a real-time layer. Amazon Redshift alternatives if latency is the complaint. Adding Redshift because the account is already on AWS, next to Snowflake-on-AWS, is a second warehouse. Redshift vs ClickHouse is the engine-level split when the workload moved from finance marts to continuous serving.
5. Databricks SQL
Databricks SQL is Photon on Delta or Iceberg in the account bucket, Unity Catalog for grants, and the same workspace as Spark jobs and MLflow. Serverless SQL warehouses exist. Classic warehouses still need warmup.
On AWS Premium in US East, published rates sit at about $0.22/DBU Classic, $0.55 Pro, $0.70 Serverless. Serverless includes the instance. Classic does not. A Serverless Small warehouse is 12 DBU/hour ($8.40/hour while up). A Medium is 24 DBU/hour ($16.80/hour). 12 hours/day, 22 days, for that Medium warehouse is about $4,435/month before storage and jobs compute. Quotes that show only the DBU line on Classic are incomplete.
Unity Catalog is the lock-in that matters: identity and lineage, not the SQL dialect. Photon is fast for BI. It is not a request-path database with a 200 ms SLO and per-tenant tokens. Databricks alternatives when the lakehouse program outgrew the serving job. If there is no Spark or ML footprint and the requirement was a warehouse, the purchase was a platform.
6. Firebolt
Firebolt forked ClickHouse years ago and rebuilt a cloud warehouse around sparse indexing, isolated engines, and object-storage decoupling. The commercial pitch is sub-second BI at warehouse concurrency without Snowflake credit theater.
Standard US compute is $0.23 per FBU-hour. A compute-optimized Small is 4 FBU ($0.92/hour). A storage-optimized Small is 8 FBU ($1.84/hour). Billing is per second while the engine is running. Storage is pass-through object storage (Firebolt's public calculator uses about $0.0264/GB-month). A compute-optimized Small left running 24/7 is ~$672/month compute plus storage.
The primary index is sparse: 1 key per granule (8,192 rows by default). Filters that align with that index prune by binary search. Filters that do not become tablet scans.
CREATE TABLE events (
ts TIMESTAMP,
tenant_id TEXT,
path TEXT,
status INTEGER,
duration_ms INTEGER
)
PRIMARY INDEX tenant_id, ts;
Engines are the product. FBU = node FBU × nodes × clusters. Isolation is the feature: 1 engine per workbook. An idle engine left running rebuilds the idle-warehouse problem with different names. Firebolt is not an ingest-plus-API platform. Kafka-to-HTTP is still a stub. ClickHouse vs Firebolt is the engine comparison.
7. Microsoft Fabric
Fabric bundles OneLake, a SQL analytics endpoint, Data Factory, Spark, and Power BI on a shared capacity. The warehouse is 1 SKU in a Microsoft estate, not a specialist engine.
US West 2 pay-as-you-go is about $0.18 per CU-hour. An F2 is $0.36/hour (~$263/month always-on). An F64 (the SKU that drops per-viewer Power BI Pro licenses) is $11.52/hour, ~$8,410/month always-on, or about $5,000 reserved. Warehouse SQL, Spark, and Power BI refresh share that pool. Reservations keep charging when the capacity is paused.
OneLake shortcuts look like no copy, then caching and format translation appear. T-SQL familiarity is real. ClickHouse-class p95 is not the design center. Buying Fabric to fix a user-facing latency ticket is buying a suite. If Azure is not already a political requirement, this is the wrong shortlist.
8. ClickHouse Cloud
The vendor-operated ClickHouse service: shared-merge-tree style separation, official SQL, native integrations. Compute is metered per minute in 8 GiB / 2 vCPU units. AWS us-east-1 public figures: about $0.22 Basic, $0.30 Scale, $0.39 Enterprise per unit-hour, plus storage near $25.30/TB-month. A Scale-tier pair of 16 GiB replicas around the clock lands near $900/month compute in the public examples, plus storage and egress.
ORDER BY, partitions, and projections are still the team's job. The 1-hour tile with ORDER BY (tenant_id, path, ts) is a range read. The same tile with ORDER BY (ts) is a partition scan. The HTTP layer, auth, and branch deploy are still built unless Tinybird or an in-house gateway is added.
ClickHouse Cloud is the right buy when the team already writes ClickHouse SQL and wants the vendor console, not a warehouse credit model. Treating it like BigQuery (no sort key, SELECT *, hope) fails immediately. ClickHouse Cloud alternatives if the requirement was APIs more than a cluster UI.
The 5 queries the ranking uses
Export 14 days of events the product actually groups. Do not start from a vendor notebook.
Q1. Rollup tile (homepage chart, 50 concurrent tenants):
SELECT
toStartOfMinute(ts) AS minute,
path,
count() AS requests,
quantile(0.95)(duration_ms) AS p95_ms
FROM events
WHERE tenant_id = 't_9f3a'
AND ts >= now() - INTERVAL 1 HOUR
GROUP BY minute, path
ORDER BY minute, path;
Q2. High-cardinality breakdown:
SELECT
country,
count() AS requests,
countIf(status >= 500) / count() AS error_rate
FROM events
WHERE tenant_id = 't_9f3a'
AND ts >= now() - INTERVAL 24 HOUR
GROUP BY country
ORDER BY requests DESC
LIMIT 20;
Q3. Dimension join (~1M-row tenants table):
SELECT
t.plan,
count() AS requests
FROM events e
INNER JOIN tenants t ON e.tenant_id = t.id
WHERE e.ts >= now() - INTERVAL 7 DAY
GROUP BY t.plan;
Q4. Last-90-days scan:
SELECT
toStartOfDay(ts) AS day,
count() AS requests
FROM events
WHERE ts >= now() - INTERVAL 90 DAY
GROUP BY day
ORDER BY day;
Q5. Idle then poke. Leave the warehouse unused for 20 minutes. Fire Q1 at peak concurrency. Record resume delay and the billable minimum, not only wall-clock.
If a platform wins Q4 and loses Q1 at 50 concurrent callers, it is a BI warehouse.
Write this formula before opening a pricing calculator:
monthly $ ≈ meter × QPS × bytes_per_query × idle_policy
If Q1's bytes and QPS cannot be plugged into that formula, the comparison is still a slide deck.
A 7-day bake-off
Day 1. Land 14 days of production-shaped events in all shortlisted platforms. Same schema. Same timestamps.
Day 2. Implement Q1-Q4 in each dialect. No vendor-provided optimized demo tables unless the raw version also runs.
Day 3. Replay ingest at peak events/sec, not daily average. Watch part, segment, or file creation and merge or compaction lag.
Day 4. Hit Q1 at peak concurrent users. Record p50 and p95. Ignore a single EXPLAIN.
Day 5. Run Q5. Write down resume delay and billable minimum.
Day 6. Change 1 column on the fact table. Time the migration and the read-repair.
Day 7. Price the week using each official meter, not the AE discount.
The warehouse that wins TPC-H and loses Day 4 is the wrong warehouse.
Worked monthly cost for Q1 after rollups
Assume the tile has been reduced to 200 MB touched per refresh. 20 concurrent tiles, refresh every 30 seconds, 12 hours/day, 22 days/month.
Scan volume if every tile full-reads those 200 MB: 0.2 GB × 20 × 2/sec × 12 × 3,600 × 22 ≈ 760 TB/month.
On-demand BigQuery: 760 TiB-class scan at $6.25/TiB is roughly $4,700/month before storage and before ad-hoc analyst jobs. Dashboards on scan pricing need materialized views or a different engine.
Snowflake: a Small warehouse (2 credits/hour) awake 12 hours/day is 528 credits/month. At a $3 blended Enterprise rate that is about $1,600 compute, plus multi-cluster when 20 tiles collide. Resume minimums add noise on Q5.
Redshift Serverless: if the workgroup stays at 8 RPU for those 12 hours, 8 × $0.375 × 12 × 22 ≈ $792 compute. The 4 RPU floor is cheaper and often too small once Q3 joins land.
Databricks SQL Serverless Small: $8.40/hour × 12 × 22 ≈ $2,218 for that warehouse.
Tinybird / ClickHouse Cloud: size vCPU for the p95 of those 20 tiles on a pre-aggregated table. For this shape that is often a mid-tier Developer plan (S-2 at $199, S-4 at $399) plus modest vCPU overage, or a small always-on ClickHouse Cloud service. The work is modeling the rollup once.
The lesson is not that Tinybird is cheaper in every case. Refresh rate × bytes × concurrency explodes scan meters and only mildly grows serving meters.
Which warehouse matches which query shape
If Day 4 p95 is over 2 seconds and the queries are product APIs, buy Tinybird, or ClickHouse Cloud plus an API layer. If analysts share live data with customers, Snowflake's share graph is the product. If the estate is GCP with Looker and spiky exploration, BigQuery on-demand or slots. If VPC and IAM are non-negotiable and the rest of the estate is already AWS, Redshift. If Spark jobs and SQL must sit on the same Delta, Databricks SQL. If isolated engines for BI concurrency matter and a primary index will be designed, Firebolt. If Power BI and Azure already won the EA, Fabric. If the team already writes MergeTree SQL and will own the HTTP layer, ClickHouse Cloud.
Fastest database for analytics is the latency companion when Day 4 dies on p95.
Do not pick a warehouse because a survey said it was first. Pick the meter that matches how often Q1 runs.
Frequently Asked Questions (FAQs)
Is Tinybird a cloud data warehouse?
Tinybird is managed ClickHouse with streaming ingest and published HTTP APIs. It appears on warehouse shortlists because teams ask for a cloud analytical store. The meter is vCPU on a monthly plan, not credits or bytes scanned. It wins when the consumer is an application. It loses when the consumer is an analyst joining 40 unmodeled tables.
How do Snowflake credits compare to BigQuery scan?
They do not convert 1:1. A Snowflake Small warehouse awake 12 hours/day is 528 credits/month (~$1,600 at a $3 blended rate) regardless of bytes read, plus resume minimums. BigQuery on-demand charges $6.25/TiB scanned. The same 200 MB tile at 20 concurrent refreshes every 30 seconds is ~760 TB/month, or about $4,700, unless materialized views or slots change the meter. Compare both against the same Q1-Q5 workload.
Can a warehouse serve user-facing APIs?
JDBC or a BI tool in front of Snowflake, BigQuery, Redshift, Databricks SQL, Firebolt, or Fabric will run the SQL. Resume delay, scan cost, and the absence of per-request tokens are why that path fails a 100 ms SLO at 50 concurrent tenants. Serving OLAP (Tinybird or ClickHouse Cloud plus a gateway) is the usual fix.
Warehouse or lakehouse?
Databricks SQL and Fabric sit on open table formats in the account bucket. Snowflake, BigQuery, and Redshift can read the lake and still sell a warehouse meter. The ranking above is about the serving and billing engine, not whether the files are Iceberg. If the requirement is Spark jobs and SQL on the same Delta, Databricks SQL. If the requirement is a 62 ms product API, the file format is secondary.
