【发布时间】: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 的表,其中有两列itemcode 和itemname。
由于某种原因,此代码失败并出现以下错误:
> 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