Announcing Google BigQuery Target
Snapshot and CDC to BigQuery with grouped MERGEs and external tables. Target tables are clustered by default.
Supermetal now supports snapshot and CDC to Google BigQuery. Replicate Postgres, MySQL, MongoDB, SQL Server, or Oracle to BigQuery in minutes.
A single Rust binary reads the source's transaction log, converts changes to Arrow, writes Parquet to a GCS buffer, and loads into BigQuery.
BigQuery
Supermetal stages Parquet files in GCS, and BigQuery loads snapshots into native tables. For each keyed target in a buffered CDC batch, Supermetal reads the files through one external table, keeps the latest change per key, and applies the batch with MERGE. Tables without a key use append-only loads.
When a source table has a primary key, Supermetal declares the same key on the BigQuery target as NOT ENFORCED. Supermetal also clusters the target table by those columns. Clustering lets BigQuery prune storage blocks during MERGE instead of scanning the full target table, reducing bytes processed and cost. Users can opt into multi-table transactions to apply buffered CDC batches atomically across tables.
Partition-pruned MERGEs and Storage Write API support are on the roadmap.
Performance
Postgres to BigQuery on the TPC-H dataset. The snapshot covers SF10–SF50 (86.6M–433M rows across 8 tables). CDC updates lineitem and orders at 1K–40K ops/sec, with each tier held for 30 seconds followed by a 10-second pause.
Snapshot load times range from 2m 26s at SF10 (86.6M rows) to 6m 09s at SF50 (433M rows). On SF50, Supermetal sustains about 1.26M rows/sec (248 MB/sec) from Postgres. BigQuery loads completed Parquet files while Supermetal reads from Postgres. The BigQuery load finishes 24 seconds after the source read completes.
End-to-end p100 latency stays within 25 seconds through 35K ops/sec. Ten seconds of that is the configured flush interval, and BigQuery apply time reaches 13.4 seconds p100. At 40K ops/sec, Postgres saturates and total latency reaches 31 seconds. The Breakdown View shows source read p100 rising from 1.1 seconds to 3.8 seconds.
Get started in minutes
curl -fsSL https://trial.supermetal.io/install.sh | shiwr -useb https://trial.supermetal.io/install.ps1 | iex