BigQuery:访问被拒绝:用户无权查询表...也许它在美国位置不存在

问题描述 投票:0回答:3

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

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

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

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
google-cloud-platform google-bigquery google-cloud-run
3个回答
2
投票

事实证明,我的项目名称是如何通过代码生成的,我的环境被附加了两次,所以

project-dev
变成了
project-dev-dev
,我在错误消息中错过了这一点。所以我漏掉了表名是
project-dev-dev.dataset.table
而不是
project-dev.dataset.table
。 🤦u200d♂️

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


0
投票

尝试设置位置

q.Location = "EU"
。 (如果是欧盟的多区域,您可以使用
EU
或者您需要找出确切的区域并使用类似
europe-west2

的内容

0
投票

这里也一样。我花了大约 30 分钟寻找解决方案,发现我的表名漏掉了一个字母......

© www.soinside.com 2019 - 2024. All rights reserved.