You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中连接Google BigQuery两个不同项目实现跨项目关联查询

跨BigQuery双项目执行关联查询的实现方案

方案1:单客户端授权跨项目访问(优先推荐)

  • 操作前提:为其中一个服务账号(例如project1对应的服务账号)开通第二个项目的访问权限:进入project2的IAM配置页,添加第一个服务账号的邮箱地址,为其分配BigQuery Data Viewer(目标数据集读权限)和BigQuery Job User(任务执行权限)即可。
  • 优势:关联计算直接在BigQuery服务端完成,不需要全量拉取数据到本地,性能高、资源消耗低,适合所有数据量场景。

代码示例:

from google.cloud import bigquery
from google.oauth2 import service_account

# 仅使用已授权跨项目访问的单组凭证即可
credentials = service_account.Credentials.from_service_account_file('C:\\Users\\zuser\\Desktop\\JSON_Keys\\firstjsonkey.json')
client = bigquery.Client(credentials=credentials, project="project1")

# SQL语句中使用「项目ID.数据集名.表名」的全路径格式指代两个项目的表,直接写关联逻辑
cross_join_sql = """
SELECT a.field1, a.field2, b.field3, b.field4
FROM `project1.数据集名.表1` a
INNER JOIN `project2.数据集名.表2` b
ON a.join_key = b.join_key
"""

# 直接执行查询即可返回关联后的结果
sales = client.query(cross_join_sql).to_dataframe()

方案2:双客户端拉取数据后本地内存关联

如果无法配置跨项目服务账号权限,可以选择分别拉取两个项目的表数据到本地,用pandas完成关联,仅适合小数据量场景。

代码示例:

# 分别用两个客户端拉取需要关联的表数据
df_project1 = client.query("SELECT * FROM `project1.数据集名.表1`").to_dataframe()
df_project2 = client_2ndproject.query("SELECT * FROM `project2.数据集名.表2`").to_dataframe()

# 用pandas的merge方法完成本地关联
sales = df_project1.merge(df_project2, on="关联键字段名", how="inner")
  • 注意:该方案需要将两张表的全量数据传输到本地,数据量过大时会出现内存不足、运行耗时过长的问题。

内容的提问来源于stack exchange,提问作者CIHAnalytics

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:45:01