由于权限问题,BigQuery加载作业失败

时间:2018-07-16 05:38:58

标签: google-bigquery

我正在使用以下code将数据从Google存储空间中的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:访问   拒绝:数据集BI-bi:BI:用户USER@BI-bi.iam.gserviceaccount.com   没有数据集BI-bi:BI

的bigquery.tables.create权限

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

Big Query Job user
Storage Admin

其他选项是:

enter image description here

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

错误日志:

  

回溯(最近一次通话最近):文件“ inventory.py”,第160行,   在       job_config = job_config)#API请求文件“ /usr/local/lib/python2.7/dist-packages/google/cloud/bigquery/client.py”,   第689行,在load_table_from_uri中       job._begin(retry = retry)文件“ /usr/local/lib/python2.7/dist-packages/google/cloud/bigquery/job.py”,   _begin中的第397行       method ='POST',path = path,data = self._build_resource())文件“ /usr/local/lib/python2.7/dist-packages/google/cloud/bigquery/client.py”,   _call_api中的第271行       返回call()文件“ /usr/local/lib/python2.7/dist-packages/google/api_core/retry.py”,   第260行,在retry_wrapped_func中       on_error = on_error,文件“ /usr/local/lib/python2.7/dist-packages/google/api_core/retry.py”,   retry_target中的第177行       返回target()文件“ /usr/local/lib/python2.7/dist-packages/google/cloud/_http.py”,行   293,在api_request中       引发异常。from_http_response(响应)   google.api_core.exceptions.Forbidden:403 POST   https://www.googleapis.com/bigquery/v2/projects/USER/jobs:访问   拒绝:数据集BI-bi:BI:用户USER@BI-bi.iam.gserviceaccount.com   没有数据集BI-bi:BI

的bigquery.tables.create权限

1 个答案:

答案 0 :(得分:0)

我能够找到这个公开的doc page说:

  

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

  

要从Cloud Storage存储桶中加载数据,必须授予您   在项目级别或该级别的storage.objects.get权限   单个存储桶。

这将帮助您解决将存储区中的数据加载到BigQuery时的权限问题