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?

Join thousands of developers who use SchemaLens to catch schema changes before they hit production.

Start Comparing Free

Free for up to 10 tables. Pro starts at $12/mo.