【问题标题】:BigQuery load job fails due to permission issuesBigQuery 加载作业因权限问题而失败
【发布时间】:2018-07-16 05:38:57
【问题描述】:

我正在使用以下 code 将数据从 Google Storage 中的 CSV 文件上传到 BigQuery 表:

  from google.cloud import bigquery
  client = bigquery.Client()
  dataset_id = 'e'
  dataset_ref = client.dataset(dataset_id)
  job_config = bigquery.LoadJobConfig()
  job_config.schema = [
      bigquery.SchemaField('itemcode', 'STRING'),
      bigquery.SchemaField('itemname', 'STRING'),
  ]
  job_config.skip_leading_rows = 1
  # The source format defaults to CSV, so the line below is optional.
  #job_config.source_format = bigquery.SourceFormat.CSV
  uri = 'gs://e/2018-07-15/inventory.csv.gz'
  load_job = client.load_table_from_uri(
      uri,
      dataset_ref.table('inventory'),
      job_config=job_config)  # API request

  assert load_job.job_type == 'load'

  load_job.result()  # Waits for table load to complete.

  assert load_job.state == 'DONE'
  assert client.get_table(dataset_ref.table('inventory')).num_rows == 10

项目名为 BI 它的 ID 是:BI-bi 我在这个数据集中有一个名为e 的数据集我有一个名为inventory 的表,其中有两列itemcodeitemname

由于某种原因,此代码失败并出现以下错误:

> google.api_core.exceptions.Forbidden: 403 POST
> https://www.googleapis.com/bigquery/v2/projects/USER/jobs: Access
> Denied: Dataset BI-bi:BI: The user USER@BI-bi.iam.gserviceaccount.com
> does not have bigquery.tables.create permission for dataset BI-bi:BI

当我进入 USER 权限时,我看到它具有以下角色:

Big Query Job user
Storage Admin

其他选项是:

我迷路了。文档没有解释在这里做什么。

错误日志:

> Traceback (most recent call last):   File "inventory.py", line 160,
> in <module>
>     job_config=job_config)  # API request   File "/usr/local/lib/python2.7/dist-packages/google/cloud/bigquery/client.py",
> line 689, in load_table_from_uri
>     job._begin(retry=retry)   File "/usr/local/lib/python2.7/dist-packages/google/cloud/bigquery/job.py",
> line 397, in _begin
>     method='POST', path=path, data=self._build_resource())   File "/usr/local/lib/python2.7/dist-packages/google/cloud/bigquery/client.py",
> line 271, in _call_api
>     return call()   File "/usr/local/lib/python2.7/dist-packages/google/api_core/retry.py",
> line 260, in retry_wrapped_func
>     on_error=on_error,   File "/usr/local/lib/python2.7/dist-packages/google/api_core/retry.py",
> line 177, in retry_target
>     return target()   File "/usr/local/lib/python2.7/dist-packages/google/cloud/_http.py", line
> 293, in api_request
>     raise exceptions.from_http_response(response)
> google.api_core.exceptions.Forbidden: 403 POST
> https://www.googleapis.com/bigquery/v2/projects/USER/jobs: Access
> Denied: Dataset BI-bi:BI: The user USER@BI-bi.iam.gserviceaccount.com
> does not have bigquery.tables.create permission for dataset BI-bi:BI

【问题讨论】:

  • 错误信息涉及BI-bi:BI,而不是BI-bi:e。好像没有正确指定数据集 - 我可以看到这可能会导致问题。您是否能够转储加载作业请求以查看它在做什么?
  • 您正在使用的特定库的文档应该告诉您如何启用请求日志记录。我猜这是Python库?但是,该错误消息正是显示的是什么,代码是否也完全如图所示?或者BI/e 的差异可能是由于不是运行该确切代码的结果?
  • @DaisyShipton 查看更新问题中的跟踪日志
  • 这是一个堆栈跟踪 - 我要的是发送到 BigQuery 的 HTTP 请求的日志。打印出dataset_ref.table('inventory') 也可能具有指导意义
  • 你也可以转储load_job...如果它显示要发送的 JSON,那将很有用。

标签: google-bigquery


【解决方案1】:

我能够找到这个公众reference 说:

当您将数据从 Cloud Storage 加载到 BigQuery 时,您必须 被授予 bigquery.dataOwner 或 bigquery.dataEditor 角色 项目级别或数据集级别。

要从 Cloud Storage 存储分区加载数据,您必须获得授权 storage.objects.get 项目级别或项目级别的权限 单独的桶。

这将帮助您在将数据从存储桶加载到 BigQuery 时解决权限问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多