生成失败:无法解析存储源:googleapi:错误404:找不到,找不到



我正试图部署以下云函数来从云存储写入bigquery表:

def csvloader(data,context):
from google.cloud import bigquery
client = bigquery.Client()
table_ref = client.dataset("dataset").table("table")
job_config = bigquery.LoadJobConfig()
job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
job_config.skip_leading_rows = 1
job_config.source_format = bigquery.SourceFormat.CSV
uri = "gs://xxxx/xxx.csv"
load_job = client.load_table_from_uri(uri, table_ref, job_config=job_config)
load_job.result()
destination_table = client.get_table(table_ref)

运行时是Python 3.8和区域europe-west3

我收到的错误是:

Build failed: could not resolve storage source: googleapi: Error 404: Not Found, notFound

存储被很好地引用并存在,并且服务帐户具有以下权限

role: roles/bigquery.admin
role: roles/bigquery.dataEditor
role: roles/bigquery.dataOwner
role: roles/cloudfunctions.serviceAgent

您的问题似乎来自权限,为了解决这个问题:

  1. 单击UI上的云功能
  2. 单击页面顶部的EDIT按钮
  3. 单击部分VARIABLES, NETWORKING AND ADVANCED SETTINGS以打开它
  4. 在底部验证您是否使用了正确的服务帐户
  5. 如果服务帐户是正确的,则添加Storage Admin角色,等待几分钟,然后重试云功能

还有问题中提到的原始问题:

Error: Not found: URI gs://bucket/file.csv at new ApiError

由于所提到的对象不在所提到的路线中,请确保:

uri = "gs://xxxx/xxx.csv"

正在指向正确的bucket/文件夹/对象,请尝试按照注释部分所述查找:

gsutil ls gs://sp500components/SP500stocks.csv

我发现这个是因为我遇到了同样的问题。你似乎已经检查了角色,所以这可能不是你的解决方案,但这对我来说是有效的:

我正在使用GCP(云运行(的其他部分,我意识到CLI登录到了我的计算引擎默认服务帐户,而不是我的应用程序引擎默认服务账户。切换到应用程序引擎解决了错误。

我相信你有两个单独的账户是有遗留原因的,但似乎你必须使用正确的账户登录,这取决于你使用的是GCP的哪一部分。

您可以列出您的帐户:

gcloud iam service-accounts list

然后登录到正确的:

gcloud config set account <ACCOUNT>
gcloud auth login

相关内容

  • 没有找到相关文章

最新更新