Copies an entire table from one BigQuery project/dataset to another without losing schema or data.
Backing up production data, migrating workloads, and sharing curated datasets all require moving tables across projects or regions.
Use SQL CREATE TABLE AS SELECT (CTAS), the bq cp CLI, or the Cloud Console UI. CTAS allows transformations; bq cp
does a byte-wise clone.
Choose CTAS to filter rows, mask PII, or change column names. The destination project pays for the query.
1. Open BigQuery editor. 2. Reference destination table. 3. SELECT from source. 4. Run.
Customers
across projects?The CTAS statement below clones every row from analytics_us.sales_customers
to reporting_eu.sales_customers_archive
.
CREATE TABLE `reporting_eu.sales_customers_archive` AS
SELECT *
FROM `analytics_us.sales_customers`;
bq cp
is faster and cheaper for 1-to-1 copies because it avoids a scan.
bq cp \
--project_id=analytics-us \
--location=US \
analytics_us.sales_orders \
reporting-eu:sales.orders_backup
Set expiration on the destination, copy during off-peak hours, and validate row counts with bq show --schema
.
bq cp
keep table partitions?Yes. The command copies partitions, clustering, and labels without modification.
Add --force
to bq cp
or use CREATE OR REPLACE TABLE
in CTAS to replace the destination table.
No. You must first export to Cloud Storage or use BigQuery Data Transfer Service when regions differ.