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

Python通过ADC连接Google BigQuery报NewConnectionError排查

问题说明
  • 目标:通过Python读取Google BigQuery表数据
  • 现有条件:无服务账号访问权限,持有gcloud授予的BigQuery个人访问权限,以及Application Default Credentials(ADC)对应的JSON凭证文件
  • 测试代码:
from google.cloud import bigquery
conn=bigquery.Client()
query="select * from my_data.test1"
conn.query(query)
  • 运行报错:

NewConnectionError: <urllib3.connection.HttpsConnection object at 0x83dh46bdu640>: Failed to establish a new connection:[Error -2] Name or Service not known

  • 环境状态:GOOGLE_APPLICATION_CREDENTIALS 环境变量未设置,值为空
解决步骤

第一步:先排查网络连通性

报错里的Name or Service not known属于DNS解析失败错误,首先确认当前运行环境可以正常访问Google公网服务,能够正常解析BigQuery的服务域名,网络不通的情况下任何凭证配置都无法生效。

第二步:正确加载ADC凭证

持有的个人ADC凭证完全可以用来访问BigQuery,不需要额外申请服务账号,两种配置方式选一种即可:

方式1:配置环境变量(最省事,无需改代码)

在运行Python脚本的终端里,先执行命令把GOOGLE_APPLICATION_CREDENTIALS变量指向手里的JSON凭证文件的绝对路径:

  • Linux/macOS终端:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/adc_credential.json"
  • Windows命令提示符(CMD):
set GOOGLE_APPLICATION_CREDENTIALS=C:\path\to\your\adc_credential.json
  • Windows PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\path\to\your\adc_credential.json"

配置完直接运行原有Python代码即可,BigQuery SDK会自动从环境变量读取凭证完成认证,不需要修改代码逻辑。

方式2:代码内显式传入凭证(不影响全局环境)

如果不想修改系统环境变量,可以在初始化BigQuery客户端的时候手动加载凭证文件,修改后的可运行代码如下:

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

# 替换成自己的ADC凭证文件绝对路径
CRED_PATH = "/path/to/your/adc_credential.json"
# 替换成自己的GCP项目ID
PROJECT_ID = "your-gcp-project-id"

credentials = service_account.Credentials.from_service_account_file(
    CRED_PATH,
    scopes=["https://www.googleapis.com/auth/bigquery"]
)
conn = bigquery.Client(credentials=credentials, project=PROJECT_ID)
query = "select * from my_data.test1"
# 必须调用result()才会实际执行查询,拿到返回结果
query_job = conn.query(query)
results = query_job.result()

# 遍历读取结果示例
for row in results:
    print(dict(row))

补充注意事项

  • 原测试代码里只调用了conn.query(query),没有追加.result(),就算网络和凭证都配置正确,也不会真正执行查询,只会返回一个未完成的查询作业对象,拿不到数据。
  • 确认持有的ADC凭证对应的账号,已经被授予了目标表my_data.test1的读取权限(比如BigQuery Data Viewer角色),否则认证通过后会抛出权限拒绝错误。
  • 如果ADC凭证是通过gcloud CLI生成的个人用户凭证,也可以直接在终端执行gcloud auth application-default login命令重新刷新本地默认凭证,执行完成后不需要手动指定JSON文件路径,SDK会自动读取本地存储的默认凭证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:24:28