BigQuery: Access Denied:用户没有查询表的权限.也许它在美国并不存在



我正在使用Bigquery的Go客户端,我们的设置(据我所知)完全位于欧盟位置,但我看到一些错误,

Access Denied: Table <table>: User does not have permission to query table <table>, or perhaps it does not exist in location US

我的理解是,如果我的数据集和表在EU,作业也将在那里运行。但是,我可以在日志详细信息中看到该作业被标记为使用美国位置:

resource: {
labels: {
location: "US"
project_id: "<project_id>"
}
type: "bigquery_project"
}

这个运行的CloudRun实例也在欧盟,特别是europe-west6

不知道如何解决这个问题

根据guillaume blaquiere的注释,这里是代码的粗略近似:

client, err := bigquery.NewClient(ctx, 'my-project')
if err != nil {
return false, err
}
checkQuery := fmt.Sprintf(`
SELECT COUNT(*) AS Count
FROM %s
WHERE Id = @id`,
'tableName',
)
q := client.Query(checkQuery)
q.Parameters = []bigquery.QueryParameter{
{
Name:  "id",
Value: id,
},
})
type check struct {
Count int64
}
var check flightCheck
it, err := q.Read(ctx)
if err != nil {
return false, err
}
if err := it.Next(result); err != nil {
s.log.Error(err, "failed to get query result")
return false, err
}
return check > 0, nil

原来我的项目名称是如何通过代码生成的,我的环境被追加了两次,所以project-dev变成了project-dev-dev,我在错误消息中错过了。所以我遗漏了表名是project-dev-dev.dataset.table而不是project-dev.dataset.table。🤦‍♂️

tl;dr确保你的项目名称是正确的。

尝试设置位置q.Location = "EU"。(如果是欧盟的多区域,你可以使用EU,或者你需要找到确切的区域,使用europe-west2

相关内容

  • 没有找到相关文章

最新更新