Skip to main content

BigQuery Integration

Fused integrates with Google BigQuery via the Python google-cloud-bigquery library. Authentication uses the shared Google Cloud service account stored through the Integrations & Secrets page.

1. Create a Service Account​

Set up a Google Cloud service account with permissions to query BigQuery. See the Google Cloud documentation for instructions to:

The service account needs at minimum the BigQuery Data Viewer and BigQuery Job User roles.

2. Download the JSON Key File​

Download the JSON key file associated with the Service Account. This file contains credentials that Fused will use to authenticate with BigQuery.

Expected service account JSON structure
{
"type": "service_account",
"project_id": "your-project-id",
"private_key_id": "key-id-here",
"private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
"client_email": "your-service-account@your-project-id.iam.gserviceaccount.com",
"client_id": "123456789",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/your-service-account%40your-project-id.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}

3. Connect the Google Cloud integration in Fused​

In the Integrations & Secrets page, open the Google Cloud integration and paste the JSON key file contents. This stores the key as a secret named gcs_fused.

4. Query BigQuery from a UDF​

Load the secret directly as a dict and create a BigQuery client:

@fused.udf
def udf():
import json
from google.cloud import bigquery
from google.oauth2 import service_account

credentials = service_account.Credentials.from_service_account_info(
json.loads(fused.secrets["gcs_fused"]),
scopes=["https://www.googleapis.com/auth/cloud-platform"],
)
client = bigquery.Client(credentials=credentials, project=credentials.project_id)

query = """
SELECT * FROM `bigquery-public-data.new_york.tlc_yellow_trips_2015`
LIMIT 10
"""
return client.query(query).to_dataframe()
tip

To return results as a GeoDataFrame, call .to_geodataframe(geography_column="geometry") instead of .to_dataframe().

See also​