尝试从 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 连接器吗?

为啥我不能从 Golang 正确读取 C 常量?

在linux中读取广告数据

使用 bluez 5.43 和 DBus 从 BLE 传感器读取广告数据包的正确方法是啥

在 Golang 中从 AWS S3 读取文件

Golang:创建用于测试文件读取功能的临时目录