我正在使用以下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
的表,其中有两列itemcode
和itemname
。
由于某些原因,此代码失败,并出现以下错误:
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
其他选项是:
我在这里迷路了。该文档没有解释在这里做什么。
错误日志:
回溯(最近一次通话最近):文件“ 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权限
答案 0 :(得分:0)
我能够找到这个公开的doc page说:
从Cloud Storage将数据加载到BigQuery时,您必须 在处被授予bigquery.dataOwner或bigquery.dataEditor角色 项目级别或数据集级别。
和
要从Cloud Storage存储桶中加载数据,必须授予您 在项目级别或该级别的storage.objects.get权限 单个存储桶。
这将帮助您解决将存储区中的数据加载到BigQuery时的权限问题