Create cross-cloud connections
Cross-cloud connections are BigQuery connections that bring data from Amazon Web Services (AWS), Microsoft Azure, and Salesforce Data 360 into BigQuery for querying. These connections are an alternative to standard BigQuery connections that use BigQuery Omni, where BigQuery deploys lightweight compute workers to remote regions to make data in other clouds available for querying without any data movement.
Workloads can benefit from cross-cloud connections versus standard connections for the following reasons:
- Feature consistency. By bringing your data from other clouds into BigQuery, you gain direct access to BigQuery AI capabilities, Gemini Enterprise Agent Platform, materialized views, user-defined functions, and other features that aren't available through standard connections.
- Cost efficiency. Workloads that use cross-cloud connections consume standard slot reservations and commitments, eliminating the need to manage separate compute capacities.
If your workload involves Apache Iceberg catalogs or you need query support across engines other than BigQuery, consider using cross-cloud Lakehouse for Apache Iceberg instead.
Before you begin
Grant Identity and Access Management and third-party roles that give users the necessary permissions to perform each task in this document.
Required BigQuery roles
To get the permissions that
you need to create a cross-cloud connection,
ask your administrator to grant you the
BigQuery Admin (roles/bigquery.admin) IAM role on the project.
For more information about granting roles, see Manage access to projects, folders, and organizations.
You might also be able to get the required permissions through custom roles or other predefined roles.
Required third-party roles
To get the permissions that you need to create a cross-cloud connection, ensure that you have the following third-party roles:
- For AWS: a role that lets you create IAM policies and roles in your AWS account.
- For Azure: a role that lets you manage App Registrations in Microsoft Entra ID (Azure AD) and assign roles, such as Storage Blob Data Reader, on the target Azure account.
Create AWS cross-cloud connections
To create an AWS cross-cloud connection, do the following:
- Create an AWS IAM policy for BigQuery as you would for standard BigQuery connections.
- Create an AWS IAM role for BigQuery as you would for standard BigQuery connections.
To create a connection resource, use the
bq mk --connectioncommand:bq mk --connection \ --connection_type='AWS' \ --location=LOCATION \ --project_id=PROJECT_ID \ --properties='{"accessRole":{"iamRoleId":"arn:aws:iam::AWS_ACCOUNT_ID:role/ROLE_NAME"}}' \ CONNECTION_ID
Replace the following:
LOCATION: a standard BigQuery location, not a BigQuery Omni location. For guidance on selecting a region, see Region recommendations.PROJECT_ID: the ID of your Google Cloud project.AWS_ACCOUNT_ID: the ID of the AWS IAM user from the previous step.ROLE_NAME: the AWS role policy name that you chose.CONNECTION_ID: an ID to give to this connection resource.
To note the service account information, use the
bq showcommand:bq show --connection \ --location=LOCATION \ PROJECT_ID.LOCATION.CONNECTION_ID
Add a trust policy to the AWS role using the service account information, as you would for standard BigQuery connections.
With your established AWS cross-cloud connection, you can now create tables and datasets to query your remote data.
AWS examples
The following example creates an external table to query Parquet files directly from an Amazon Simple Storage Service (Amazon S3) bucket with a cross-cloud connection:
CREATE SCHEMA `my-project.aws_raw_data` OPTIONS ( location = 'us-east4'); CREATE EXTERNAL TABLE `my-project.aws_raw_data.sales_parquet` WITH CONNECTION `us-east4.my-aws-connection` OPTIONS ( format = 'PARQUET', uris = ['s3://my-data-bucket/sales/year=2025/*']);
The following example federates an entire database into BigQuery using AWS Glue with a cross-cloud connection:
CREATE EXTERNAL SCHEMA `my-project.aws_glue_data` WITH CONNECTION `us-east4.my-aws-connection` OPTIONS ( location = 'us-east4', external_source = 'aws-glue://arn:aws:glue:us-east-4:123456789:database/test_database');
For more information on AWS Glue federation, see Create and manage AWS Glue federated datasets.
Create Azure cross-cloud connections
To create an Azure cross-cloud connection, do the following:
- Create an application in your Azure tenant as you would for standard BigQuery connections, and take note of the Application (client) and Directory (tenant) IDs.
- Assign a role to the Azure application as you would for standard BigQuery connections.
To create a connection resource, use the
bq mk --connectioncommand:bq mk --connection \ --connection_type='Azure' \ --tenant_id=TENANT_ID \ --location=LOCATION \ --federated_azure=true \ --federated_app_client_id=APP_ID \ --project_id=PROJECT_ID \ CONNECTION_ID
Replace the following:
TENANT_ID: the tenant ID of the Azure directory that contains the Azure account.LOCATION: a standard BigQuery location, not a BigQuery Omni location. For guidance on selecting a region, see Region recommendations.APP_ID: the Azure Application (client) ID.PROJECT_ID: the ID of your Google Cloud project.CONNECTION_ID: an ID to give to this connection resource.
To note the service account information, use the
bq showcommand:bq show --connection \ --location=LOCATION \ PROJECT_ID.LOCATION.CONNECTION_ID
Add a federated credential using the service account information, as you would for standard BigQuery connections.
With your established Azure cross-cloud connection, you can now create tables and datasets to query your remote data.
Azure examples
The following example creates an external table to query Parquet files directly from an Azure Blob Storage container with a cross-cloud connection:
CREATE SCHEMA `my-project.azure_raw_data` OPTIONS ( location = 'us-east4'); CREATE EXTERNAL TABLE `my-project.azure_raw_data.sales_parquet` WITH CONNECTION `us-east4.my-azure-connection` OPTIONS ( format = 'PARQUET', uris = ['azure://mystorageaccount.blob.core.windows.net/mycontainer/sales/year=2025/*']);
The following example creates an external table to query raw CSV exports from a Blob Storage container with a cross-cloud connection:
CREATE EXTERNAL TABLE `my-project.azure_raw_data.daily_logs_csv` WITH CONNECTION `us-east4.my-azure-connection` OPTIONS ( format = 'CSV', skip_leading_rows = 1, uris = ['azure://mystorageaccount.blob.core.windows.net/mycontainer/logs/*.csv']);
Create Data 360 cross-cloud connections
To create a Data 360 cross-cloud connection, follow the steps to link a Data 360 dataset to BigQuery, except instead of creating the linked dataset in a BigQuery Omni location, create it in a standard BigQuery location. For guidance on selecting a region, see Region recommendations.
After you update your queries to use the new datasets, you can delete any legacy linked datasets and BigQuery Omni materialized views.
Region recommendations
When you select a standard BigQuery region for your cross-cloud connection, choose the region that is physically closest to your data for optimal cost and performance efficiency.
The following table lists AWS regions and the best corresponding BigQuery regions:
| AWS region | Closest BigQuery region | Other close BigQuery regions |
|---|---|---|
us-east-1 |
us-east4 |
us-east1us-east5us-central1
|
us-east-2 |
us-east5 |
us-east4us-east1us-central1
|
us-west-1 |
us-west2 |
us-west4us-west1us-west3
|
us-west-2 |
us-west1 |
us-west3us-west4us-west2
|
ca-central-1 |
northamerica-northeast1 |
northamerica-northeast2us-east4us-east5
|
sa-east-1 |
southamerica-east1 |
southamerica-west1us-east1us-south1
|
eu-west-1 |
europe-west1 |
europe-west2europe-west9europe-west4
|
eu-west-2 |
europe-west2 |
europe-west1europe-west9europe-west4
|
eu-west-3 |
europe-west9 |
europe-west1europe-west2europe-west3
|
eu-central-1 |
europe-west3 |
europe-west4europe-west1europe-west6
|
eu-central-2 |
europe-west6 |
europe-west8europe-west12europe-west3
|
eu-north-1 |
europe-north1 |
europe-west4europe-central2europe-west1
|
eu-south-1 |
europe-west8 |
europe-west12europe-west6europe-west3
|
eu-south-2 |
europe-southwest1 |
europe-west9europe-west1europe-west8
|
me-central-1 |
me-central1 |
me-central2me-west1asia-south1
|
me-south-1 |
me-central2 |
me-central1me-west1asia-south1
|
af-south-1 |
europe-southwest1 |
me-central2me-west1europe-west1
|
ap-east-1 |
asia-east2 |
asia-east1asia-southeast1asia-northeast1
|
ap-northeast-1 |
asia-northeast1 |
asia-northeast2asia-northeast3asia-east1
|
ap-northeast-2 |
asia-northeast3 |
asia-northeast2asia-northeast1asia-east1
|
ap-northeast-3 |
asia-northeast2 |
asia-northeast1asia-northeast3asia-east1
|
ap-south-1 |
asia-south1 |
asia-south2me-central1asia-southeast1
|
ap-south-2 |
asia-south2 |
asia-south1asia-southeast1me-central1
|
ap-southeast-1 |
asia-southeast1 |
asia-southeast2asia-east1asia-south1
|
ap-southeast-2 |
australia-southeast1 |
australia-southeast2asia-southeast2asia-southeast1
|
ap-southeast-3 |
asia-southeast2 |
asia-southeast1australia-southeast1asia-east1
|
The following table lists Azure regions and the best corresponding BigQuery regions:
| Azure region | Closest BigQuery region | Other close BigQuery regions |
|---|---|---|
| East US | us-east4 |
us-east1us-east5us-central1
|
| East US 2 | us-east4 |
us-east1us-east5us-south1
|
| West US | us-west1 |
us-west2us-west3us-west4
|
| West US 2 | us-west1 |
us-west4us-west3us-west2
|
| West US 3 | us-west4 |
us-west2us-west3us-west1
|
| Central US | us-central1 |
us-east5us-east4us-east1
|
| North Central US | us-east5 |
us-central1us-east4us-east1
|
| South Central US | us-south1 |
us-east5us-central1us-east1
|
| West Central US | us-west3 |
us-central1us-west4us-west2
|
| Canada Central | northamerica-northeast2 |
northamerica-northeast1us-east5us-east4
|
| Canada East | northamerica-northeast1 |
northamerica-northeast2us-east4us-east5
|
| West Europe | europe-west4 |
europe-west1europe-west3europe-west9
|
| North Europe | europe-west1 |
europe-west2europe-west9europe-west4
|
| France Central | europe-west9 |
europe-west1europe-west2europe-west3
|
| France South | europe-west9 |
europe-southwest1europe-west8europe-west1
|
| Germany West Central | europe-west3 |
europe-west4europe-west1europe-west6
|
| Germany North | europe-west3 |
europe-west4europe-central2europe-west2
|
| Switzerland North | europe-west6 |
europe-west8europe-west12europe-west3
|
| Switzerland West | europe-west6 |
europe-west9europe-west8europe-west3
|
| UK South | europe-west2 |
europe-west1europe-west9europe-west4
|
| UK West | europe-west2 |
europe-west1europe-west9europe-west4
|
| Norway East | europe-north1 |
europe-west4europe-central2europe-west1
|
| Norway West | europe-north1 |
europe-west4europe-central2europe-west1
|
| Sweden Central | europe-north1 |
europe-west4europe-central2europe-west1
|
| East Asia | asia-east2 |
asia-east1asia-southeast1asia-northeast1
|
| Southeast Asia | asia-southeast1 |
asia-southeast2asia-east1asia-south1
|
| Japan East | asia-northeast1 |
asia-northeast2asia-northeast3asia-east1
|
| Japan West | asia-northeast2 |
asia-northeast1asia-northeast3asia-east1
|
| Korea Central | asia-northeast3 |
asia-northeast2asia-northeast1asia-east1
|
| Australia East | australia-southeast1 |
australia-southeast2asia-southeast2asia-southeast1
|
| Australia Southeast | australia-southeast2 |
australia-southeast1asia-southeast1asia-east1
|
| Australia Central | australia-southeast1 |
australia-southeast2asia-southeast2asia-southeast1
|
| West India | asia-south1 |
asia-south2me-central1asia-southeast1
|
| Central India | asia-south1 |
asia-south2me-central1asia-southeast1
|
| South India | asia-south1 |
asia-south2asia-southeast1me-central1
|
What's next
- Learn about BigQuery analytics.