SnowflakeBigQuery

Migrate from Snowflake
to BigQuery

Migrating from Snowflake to BigQuery is appropriate when Snowflake's compute-warehouse pricing model, cluster management overhead, or multi-cloud analytics strategy conflicts with BigQuery's serverless architecture, per-query pricing, and native GCP integration advantages. The primary risks are SQL dialect differences, stored procedure translation, and data pipeline reconfiguration, which can be eliminated with a structured migration process that translates schemas and queries systematically, validates with historical query result comparison, and runs both systems in parallel during transition.

Free Assessment

Snowflake → BigQuery

No spam. Technical brief in 24h.

When Snowflake stops working

Snowflake stops being the right choice when warehouse sizing and scaling management consumes engineering time that BigQuery's serverless model eliminates, credit-based pricing creates unpredictable costs that per-query pricing would stabilize, the organization is consolidating on GCP and Snowflake becomes the only non-GCP service, or real-time streaming analytics requirements favor BigQuery's native Pub/Sub integration over Snowflake's Snowpipe.

What BigQuery unlocks

BigQuery unlocks serverless execution (no warehouse sizing, no cluster management), per-query pricing with slot-based reservations for predictable cost, native integration with GCP services (Dataflow, Pub/Sub, Vertex AI), BigQuery ML for in-database machine learning, and BI Engine for sub-second dashboard queries without materialized views.

Who should not migrate

Organizations leveraging Snowflake's multi-cloud data sharing (Data Marketplace, secure shares across cloud providers) as a core business capability. Teams using Snowpark for Python/Java/Scala processing within Snowflake where BigQuery's equivalent (remote functions, BigQuery DataFrames) is less mature for their use case. Companies where Snowflake's Time Travel and zero-copy cloning are deeply embedded in development workflows.

What usually goes wrong

SQL dialect differences between Snowflake SQL and BigQuery Standard SQL cause query failures — functions like QUALIFY, LATERAL FLATTEN, and VARIANT handling differ. Stored procedures written in Snowflake's JavaScript or Snowpark Python need rewriting for BigQuery's SQL/JavaScript procedures. Data pipelines (Fivetran, dbt, Airflow) that target Snowflake need reconfiguration for BigQuery connectors and SQL syntax. Access control models differ — Snowflake's role hierarchy vs. BigQuery's dataset/table-level IAM.

Risk Matrix: Snowflake to BigQuery

Structural Risks
SQL dialect incompatibility

Snowflake SQL and BigQuery Standard SQL differ in function names, window function syntax, semi-structured data handling (VARIANT vs. JSON/STRUCT), and transaction semantics.

Inventory all SQL queries, views, and stored procedures. Use automated SQL translation tools for bulk conversion. Manually validate complex queries. Run translated queries against both systems and compare results row-by-row.

Stored procedure translation

Snowflake stored procedures use JavaScript or Snowpark (Python/Java/Scala). BigQuery procedures use SQL with JavaScript UDFs. The programming models are different.

Catalog all stored procedures with their business purpose and execution frequency. Rewrite in BigQuery's procedure language. For complex logic, consider moving to Dataflow or Cloud Functions. Validate output equivalence.

Access control model mismatch

Snowflake uses role-based access with a hierarchy (ACCOUNTADMIN → SYSADMIN → custom roles). BigQuery uses GCP IAM with dataset/table-level permissions. The models don't map 1:1.

Map Snowflake roles to GCP IAM roles and BigQuery dataset permissions. Use authorized views for row-level and column-level security. Test access for every role before migrating production data.

Operational Risks
Data pipeline breakage

ELT tools (dbt, Fivetran, Airflow) have Snowflake-specific configurations, SQL syntax, and connector settings that don't transfer to BigQuery automatically.

Audit all pipeline configurations. Update dbt profiles and SQL refs. Reconfigure Fivetran/Airbyte connectors for BigQuery. Update Airflow DAGs with BigQuery operators. Run pipelines against both targets during parallel operation.

Business Risks
Cost model surprise

Teams accustomed to Snowflake's credit-based pricing underestimate BigQuery on-demand costs for scan-heavy queries on large tables, or over-provision slot reservations.

Analyze current Snowflake query patterns (frequency, data scanned, compute time). Model BigQuery costs using on-demand pricing for variable workloads and slot reservations for predictable workloads. Implement BigQuery cost controls (custom quotas, maximum bytes billed per query).

What Must Not Change During This Migration

1

Every query must produce identical results in BigQuery as in Snowflake for the same input data

2

Data freshness SLAs must be maintained — pipeline latency must not increase

3

Access controls must be equivalent — no user gains or loses access to data they shouldn't or should see

4

Cost must be modeled and verified — BigQuery total cost must be predictable and within budget

5

Rollback to Snowflake must be possible for 30 days with data sync maintained

Migration Process: Snowflake to BigQuery

01

System inventory

Catalog all Snowflake databases, schemas, tables, views, stored procedures, tasks, streams, and pipes. Document all data pipelines (dbt models, Fivetran connections, Airflow DAGs). Record query patterns and costs from Snowflake's query history.

02

Dependency mapping

Map Snowflake schemas to BigQuery datasets. Map data types (VARIANT → JSON/STRUCT, TIMESTAMP_NTZ → TIMESTAMP). Map stored procedures to BigQuery procedures or external processing. Map access roles to GCP IAM.

03

Schema and query translation

Translate DDL from Snowflake to BigQuery syntax. Translate all SQL queries, views, and stored procedures. Partition and cluster BigQuery tables based on Snowflake query patterns. Run translated queries and compare results against Snowflake output.

04

Parallel deployment

Load data into BigQuery while Snowflake remains primary. Run data pipelines against both targets. Compare query results between systems daily. Identify and resolve discrepancies before any traffic shift.

05

Incremental traffic shift

Migrate consumers (dashboards, reports, applications) one team at a time. Start with read-only analytics consumers, then operational reporting, then data science workloads. Validate each consumer's output before proceeding.

06

Verification and cleanup

Run both systems for 30 days with identical data. Compare query results for all critical reports. Verify cost is within modeled range. Decommission Snowflake after verification period. Archive Snowflake data per retention policy.

How This Migration Changes at Scale

Large data volume (100TB+)

Initial data load requires Google Transfer Service or BigQuery Data Transfer Service. Budget 1-2 weeks for bulk load. Implement incremental sync (CDC or scheduled exports) to keep both systems current during parallel operation.

Complex dbt project (500+ models)

dbt SQL translation becomes the largest workstream. Snowflake-specific functions must be replaced with BigQuery equivalents across all models. Run dbt tests against both targets to verify model parity.

Real-time streaming (Snowpipe → BigQuery Streaming)

Snowpipe and BigQuery streaming insert have different latency guarantees and cost models. Evaluate Pub/Sub → BigQuery streaming as the replacement pattern. Test end-to-end latency under production load.

If you're evaluating a migration from Snowflake to BigQuery, the first step is validating risk, scope, and invariants before any build work begins.