BigQuery schema diff — free to use

BigQuery Schema Diff.
Generate migrations.
Zero setup.

Paste two bq show --schema outputs or INFORMATION_SCHEMA.COLUMNS results. Spot every partitioned table, nested field, and column change instantly. Get ready-to-run migration scripts for BigQuery — all in your browser.

No account required. No data leaves your device.

Built for data warehouse workflows

SchemaLens understands BigQuery-specific syntax that generic diff tools miss.

☁️

Partitioned Table Comparison

Compares CREATE TABLE definitions for partitioned tables, including time-unit, integer-range, and ingestion-time partitions.

📊

Nested & Repeated Fields

Correctly handles RECORD (STRUCT) and REPEATED (ARRAY) fields, including deeply nested schemas and mode changes.

🔑

Clustering & Constraints

Detects clustering column changes, primary keys, foreign keys, and CHECK constraints across schema versions.

📁

External Table Schemas

Compares BigLake external table schemas, Bigtable-backed tables, and Google Sheets federated sources.

Standard SQL Parser

SchemaLens parses BigQuery Standard SQL dialect with full accuracy — every STRING, INT64, NUMERIC, BIGNUMERIC, and JSON type.

🔒

Privacy First

Your schema never leaves the browser. Compare production BigQuery schemas safely without uploading sensitive table structures to a third-party server.

How it works

1

Export your schemas

Run bq show --schema dataset.table or query INFORMATION_SCHEMA.COLUMNS on both datasets.

2

Paste into SchemaLens

Copy the SQL or JSON schema into the two editor panes. Select the appropriate dialect for accurate parsing.

3

Review the diff

See added tables, dropped columns, type changes, partition modifications, and nested field differences highlighted in color.

4

Copy the migration

Export ALTER TABLE scripts, save as Markdown, PDF, or raw SQL. Run in staging, then production.

BigQuery migration examples

SchemaLens generates production-ready migration scripts for every change it detects.

Add a column to a partitioned table

ALTER TABLE mydataset.events
  ADD COLUMN IF NOT EXISTS country STRING;

Change a column type

ALTER TABLE mydataset.orders
  ALTER COLUMN total SET DATA TYPE NUMERIC;

Add clustering columns

ALTER TABLE mydataset.events
  CLUSTER BY user_id, event_timestamp;

Add a nested RECORD field

ALTER TABLE mydataset.users
  ADD COLUMN IF NOT EXISTS address STRUCT<
    street STRING, city STRING, zip STRING>;

Related guides

Ready to diff your BigQuery schemas?

A privacy-first schema diff tool. No account required.

Start Comparing Free

Free forever — unlimited tables. Pro power features — $39 once.