Pick the wrong warehouse and you find out slowly. The bill creeps. Queries that were fast in the demo crawl on your data. And the migration you scoped for one quarter is still limping into the next, with the CFO asking why last year's numbers don't reconcile. That's the real stakes of a cloud data warehouse migration: not the logo you end up with, but whether the move quietly drains a year of engineering budget.
Most teams land on the same four candidates: Snowflake, Amazon Redshift, Google BigQuery and Databricks. They all promise faster analytics, elastic scale, and no more 2am capacity fires. They get there with very different trade-offs in cost, cloud coupling and lock-in. The cost section below is grounded in the most painful migration I've run: re-engineering 800+ stored procedures off Sybase onto Redshift for a tier-1 bank, which eventually cut roughly half the operating cost. Most of what I learned was about the parts that don't show up on the pricing page.
First, the decision that frames everything
Before you compare price-per-credit, settle one question: are you building a SQL warehouse, or a lakehouse?
A warehouse is optimised for structured data and BI: clean tables, fast SQL, dashboards. A lakehouse keeps data in open formats (Parquet, Delta, Iceberg) on cheap object storage and runs both SQL and machine learning over it. Snowflake, Redshift and BigQuery start as warehouses; Databricks starts as a lakehouse. Everyone is converging toward the middle, but their centre of gravity still shapes the developer experience and the bill.
Snowflake: the zero-ops standard
Snowflake won the last five years by making the warehouse boring, in the best way. Storage and compute are fully separated, so you scale them independently. You spin up isolated "virtual warehouses" per team so a heavy data-science query never starves the finance dashboard. There are no indexes to tune and no vacuuming to schedule.
Its real edge is neutrality: it runs on AWS, Azure and GCP, so it doesn't tie your data strategy to one cloud vendor. Data sharing and the marketplace make it easy to exchange live datasets without copying. The cost model is per-second compute on top of cheap storage. Elegant, but easy to overspend if idle warehouses aren't auto-suspended.
Amazon Redshift: best if you live in AWS
If your stack is already AWS, Redshift's gravity is hard to argue with. RA3 nodes separate compute from managed storage, Redshift Serverless removes cluster sizing, and Spectrum lets you query data sitting in S3 without loading it first. The killer feature isn't a feature. It's adjacency: IAM, S3, Glue, Kinesis and your VPC are right there, so data never leaves your security perimeter and egress costs stay near zero.
The trade-off is that you're choosing AWS for the long haul, and historically Redshift rewarded teams who understood distribution keys and sort keys. Serverless has softened that, but it's still less hands-off than Snowflake.
Google BigQuery: serverless and analytics-native
BigQuery is the most "serverless" of the four. There's no cluster to size at all. You load data and query it, and Google handles the rest. It shines for ad-hoc analytics at scale: massive scans, nested/JSON data, and built-in ML (BigQuery ML) that lets analysts train models in SQL.
The pricing model is the thing to understand before you migrate. On-demand billing charges per terabyte scanned, which is wonderful for spiky, occasional workloads and dangerous for a SELECT * culture. Capacity (slot-based) pricing fixes that for steady, heavy use. Either way, partitioning and clustering your tables is the difference between a cheap warehouse and a surprising invoice.
Databricks: the lakehouse challenger
Databricks comes at the problem from the data-lake side. Your data stays in open formats (Delta Lake, increasingly Iceberg) on object storage, and Databricks runs Spark for engineering/ML and Databricks SQL for BI on the same copy. Unity Catalog handles governance and lineage across it all.
For organisations where machine learning, streaming and large-scale transformation are first-class rather than afterthoughts, this unified model is powerful, and the open formats are the strongest hedge against vendor lock-in on this list. The cost is conceptual surface area: it's a platform, not just a warehouse, and smaller BI-only teams can find it heavier than they need.
Side-by-side comparison
| Dimension | Snowflake | Redshift | BigQuery | Databricks |
|---|---|---|---|---|
| Core model | SQL warehouse | SQL warehouse | Serverless warehouse | Lakehouse |
| Cloud | AWS · Azure · GCP | AWS only | GCP only | AWS · Azure · GCP |
| Ops overhead | Lowest | Low–medium | Lowest | Medium |
| Pricing shape | Per-second compute | Node / serverless | Per-TB scanned or slots | DBU compute |
| ML / data science | Snowpark | Add-on (SageMaker) | BigQuery ML | Best-in-class |
| Open formats / lock-in | Moderate | Moderate | Moderate | Open (Delta/Iceberg) |
| Best fit | Multi-cloud default | AWS-native shops | Bursty GCP analytics | ML-heavy platforms |
What a cloud data warehouse migration actually costs
The pricing calculators answer the wrong question. They model the platform's compute bill, which is rarely the expensive part of a migration. The real cost is the engineering effort and risk of moving. From experience, that breaks down into:
- Schema & code conversion. DDL, and especially stored procedures and SQL dialect differences. This is where 800+ procedures eat months, not weeks. (Standing up fresh staging tables from JSON extracts? My free JSON-to-SQL schema generator writes the
CREATE TABLEDDL for you.) - Historical backfill. Bulk-loading years of data through a staging layer, plus any egress to move it.
- Validation & reconciliation. Proving the new numbers match the old ones, table by table. Trust is the deliverable.
- Parallel running. You pay for both systems while you validate the new one.
- Team retraining. New SQL quirks, new tooling, new cost-control habits.
The good news: most of this cost is one-time, and a clean migration is where the ongoing savings come from, like the 50% operating-cost reduction above. The lever that pays back most is portability: keep transformations in dbt or plain SQL rather than platform-specific procedures, and your next move costs a fraction of this one.
-- A dbt model is warehouse-agnostic: the same transformation logic
-- runs on Snowflake, Redshift, BigQuery or Databricks. Portability
-- like this is the cheapest insurance against vendor lock-in.
select
date_trunc('day', order_ts) as order_date,
region,
sum(amount) as revenue,
count(*) as orders
from {{ ref('stg_orders') }}
group by 1, 2A pragmatic migration strategy (5 phases)
A reliable data warehouse migration strategy is phased, not heroic. This is the sequence I run, and it keeps the business calm because there's always a working system underneath.
- Assess & plan. Inventory every table, job and downstream consumer. Map dependencies and define what "done and correct" means before you touch anything.
- Convert schema & code. Translate DDL and re-platform SQL/stored procedures, ideally into dbt models you can test, version and reuse. If you're also choosing the orchestrator that will run those dbt models, the Dagster vs Airflow vs Prefect guide covers that decision in detail.
- Backfill data. Bulk-load history via an object-storage staging layer (S3 / GCS / ADLS) and verify row counts and checksums.
- Parallel run & reconcile. Run old and new side by side, compare outputs, and fix drift until the numbers match. This is where trust is earned.
- Cutover & decommission. Repoint BI and pipelines, watch closely, then retire the legacy system to stop paying for two.
So which should you actually choose?
Choose Snowflake for multi-cloud, zero-ops simplicity, the safe default for most teams.
Choose Redshift if your stack is already on AWS and you want analytics close to your data.
Choose BigQuery for serverless, pay-per-query analytics on Google Cloud.
Choose Databricks when ML, Spark, and open data formats are as important as SQL.
There's no universally best warehouse. There's only the best fit for your cloud, your team and your workload. A simple decision path:
- Databricks if ML, streaming and open formats are central, not bolted on.
- Redshift if you're committed to AWS and want analytics inside your existing perimeter.
- BigQuery if you're on Google Cloud and value true serverless, bursty analytics.
- Snowflake as the safe, multi-cloud, low-ops default when the above don't decide it for you.
Frequently asked questions
Is Snowflake better than Redshift?
It depends on your cloud. Snowflake is more hands-off and runs on any cloud, which suits multi-cloud or low-ops teams. Redshift is usually the better choice when you're already on AWS and want analytics next to your data with minimal egress. Neither is universally "better." The deciding factor is your existing platform and how much operational tuning you want to own.
How long does a data warehouse migration take?
For a mid-size warehouse, plan on a few months end to end. The variable isn't loading data. It's converting stored procedures and SQL dialects, then validating that the new numbers match the old ones. Migrating one domain at a time and running both systems in parallel adds calendar time but dramatically reduces risk.
What is the difference between a data warehouse and a lakehouse?
A warehouse stores structured data in a proprietary, query-optimised format for fast SQL and BI. A lakehouse keeps data in open formats (Parquet, Delta, Iceberg) on cheap object storage and runs both SQL and machine learning over it. Snowflake, Redshift and BigQuery are warehouse-first; Databricks is lakehouse-first, though all four are converging.
How do you migrate from on-premise Sybase or Oracle to the cloud?
Phase it: inventory and map dependencies, convert schema and stored procedures (ideally into dbt), backfill history through an object-storage staging layer, run old and new in parallel to reconcile, then cut over and decommission. Re-engineering legacy stored procedures is the heaviest part, so budget for it explicitly.
Which cloud data warehouse is cheapest to start with?
For low or spiky workloads, BigQuery's on-demand pricing (pay per TB scanned, nothing at idle) is the cheapest entry point. Redshift and Snowflake both have minimum cluster costs at low utilisation. For high, predictable volume, Snowflake reserved capacity and Redshift Reserved Instances can undercut BigQuery's on-demand rate substantially.
Conclusion
A cloud data warehouse migration isn't a contest for the objectively best platform — it's a fit between the warehouse's worldview and your cloud, team and workload. Snowflake optimises for zero-ops neutrality, Redshift for AWS adjacency, BigQuery for serverless analytics, Databricks for open, ML-heavy lakehouses. Decide which of those describes your world, keep your transformations portable, and migrate one domain at a time.
The pipelines that feed and transform your warehouse are just as important as the warehouse itself — the ETL orchestration comparison (Dagster vs Airflow vs Prefect) is the natural companion read for that half of the stack.
If you're planning a migration and want it done without the 2am surprises, that's the work I do. See how I scope and price migrations, explore my data engineering case studies, or get in touch and let's scope it.
Mirza Hammad Tariq
AWS Data Engineer with 5+ years building production-grade ETL pipelines, cloud data warehouses, and scalable data architectures in Python, SQL, Dagster, and AWS.