使用Dataproc读取BigQuery超大数据时触发403错误,求原因
BigQuery查询返回结果过大导致403报错的原因与解决方法
错误原因
这个google.api_core.exceptions.Forbidden: 403错误的本质是你的查询返回的结果集超出了BigQuery直接返回结果的大小限制。当你调用query_job.result()时,默认逻辑是将查询结果直接拉取到客户端(此处为Dataproc集群节点),但BigQuery对这种直接返回的结果有严格的容量限制,一旦结果体积超标,就会触发该报错,并提示你通过指定目标表来存储查询结果,而非直接返回。
解决方案
1. 为查询指定目标表
通过QueryJobConfig配置查询作业,指定一个BigQuery表作为结果存储位置,让BigQuery先将查询结果写入该表,而非直接返回给客户端。示例代码如下:
from google.cloud import bigquery # 初始化BigQuery客户端 bq = bigquery.Client() # 你的SQL查询语句 query = """你的查询SQL""" # 配置查询作业参数 job_config = bigquery.QueryJobConfig( # 指定目标表的完整路径:项目ID.数据集ID.表名 destination="your-project-id.your-dataset-id.your-target-table", # 设置写入规则:WRITE_TRUNCATE表示覆盖已有表,WRITE_APPEND表示追加,WRITE_EMPTY仅表为空时写入 write_disposition=bigquery.WriteDisposition.WRITE_TRUNCATE ) # 执行带配置的查询 query_job = bq.query(query, job_config=job_config) # 等待查询完成,结果已自动写入指定目标表 query_job.result()
2. 后续数据处理流程
完成上述配置后,你可以从指定的目标表中读取数据到Dataproc集群进行转换操作,转换完成后再将处理后的数据写回BigQuery的目标表(或新表)即可。
内容的提问来源于stack exchange,提问作者Tan Linh
相关产品推荐
相关产品推荐

