尝试从 golang 广告读取/运行对 bigquery 的查询被拒绝访问:BigQuery BigQuery:未找到具有 Google Drive 范围的 OAuth 令牌
Posted
技术标签:
【中文标题】尝试从 golang 广告读取/运行对 bigquery 的查询被拒绝访问:BigQuery BigQuery:未找到具有 Google Drive 范围的 OAuth 令牌【英文标题】:Trying to read/run query on bigquery from golang ad get Access Denied: BigQuery BigQuery: No OAuth token with Google Drive scope was found 【发布时间】:2018-12-06 10:44:07 【问题描述】:我对 golang 和 google cloud 还是很陌生。 我尝试编写以下代码并得到:(对来自 golang 的大查询执行简单查询) 读取 %v googleapi 时出错:错误 403:访问被拒绝:BigQuery BigQuery:找不到具有 Google Drive 范围的 OAuth 令牌。,accessDenied 我阅读了一些关于它的 *** 项目,但找不到任何关于 golang 的信息。
我的代码:
ctx := context.Background()
projectID := "XXXXXXXXX"
jsonPath:="XXXXX.json"
client, err := bigquery.NewClient(ctx, projectID,option.WithCredentialsFile(jsonPath))
if err != nil
fmt.Println ("Failed to create client: %v", err)
return
destDatasetID:="dataset1"
destTableID:="table1"
q := client.Query("SELECT * from table1")
q.Location = "EU" // Location must match the dataset(s) referenced in query.
q.QueryConfig.Dst = client.Dataset(destDatasetID).Table(destTableID)
q.AllowLargeResults = true
fmt.Println("prepare complete")
it, err := q.Read(ctx)
if err != nil
fmt.Println("Error on read %v",err)
return
【问题讨论】:
【参考方案1】:代码没问题,检查您的service account
访问权限为:
转到项目控制台-> service accounts
-> 创建密钥以及big query
访问权限
-> 最后创建密钥并导出为json
有几件事要提:
1. 在授予对服务帐户的访问权限时要保守(需要最少的访问权限)
2. 相应地在 shell 中重新命名您的密钥以避免混淆例如:bigQueryReadOnly.json
【讨论】:
以上是关于尝试从 golang 广告读取/运行对 bigquery 的查询被拒绝访问:BigQuery BigQuery:未找到具有 Google Drive 范围的 OAuth 令牌的主要内容,如果未能解决你的问题,请参考以下文章
Golang 中有 Apache Beam + Cloud Bigtable 连接器吗?