首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Google读取文件时,使用“自动检测”模式创建BigQuery外部表失败

从Google读取文件时,使用“自动检测”模式创建BigQuery外部表失败
EN

Stack Overflow用户
提问于 2020-09-08 06:30:48
回答 2查看 1.9K关注 0票数 0

我试图通过从Google读取一个文件来创建一个BigQuery外部表--它适用于内联方案,但使用autodetect标志失败。

引用的文档:

https://cloud.google.com/bigquery/external-data-drive

模式文件:

代码语言:javascript
复制
$ bq mkdef --autodetect --source_format=CSV "https://drive.google.com/open?id=<file-id>" > schema.json

schema.json:

代码语言:javascript
复制
{
  "autodetect": true,
  "csvOptions": {
    "encoding": "UTF-8",
    "quote": "\""
  },
  "sourceFormat": "CSV",
  "sourceUris": [
    "https://drive.google.com/open?id=<file-id>"
  ]
}

外部表:

代码语言:javascript
复制
$ bq mk --external_table_definition=schema.json mydataset.mytable
BigQuery error in mk operation: Access Denied: BigQuery BigQuery: No OAuth token with Google Drive scope was found.

它与内联模式一起工作:

代码语言:javascript
复制
$ bq mk --external_table_definition=col1:INTEGER,col2:STRING@CSV=https://drive.google.com/open?id=<file-id> mydataset.mytable
Table 'myproject:mydataset.mytable' successfully created.

注意:我已经通过使用gcloud auth login --enable-gdrive-access启用了Google访问

EN

Stack Overflow用户

发布于 2020-09-08 12:45:48

显然,这里的罪魁祸首是"autodetect": true 参数,它在从Google中的源数据创建Bigquery 外部表时在表定义文件--external_table_definition中指定。

实际上,bq命令行工具是一个与Biqquery交互的Python,这意味着我们触发tables.insert API 方法来创建一个永久的外部表,在表格 json请求体中提供适当的ExternalDataConfiguration

您可以在整个API资源管理器使用来自ExternalDataConfiguration的表定义参数的过程中对Bigquery执行相关的API调用

代码语言:javascript
复制
curl --request POST \
  'https://bigquery.googleapis.com/bigquery/v2/projects/<projectid>/datasets/<datasetid>/tables?key=[YOUR_API_KEY]' \
  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"tableReference":{"datasetId":"datasetId","projectId":"projectId","tableId":"tableId"},"externalDataConfiguration":{"autodetect":true,"csvOptions":{"encoding":"UTF-8","quote":"\""},"sourceFormat":"CSV","sourceUris":["https://drive.google.com/open?id=<file-id>"]}}' \
  --compressed

我在响应消息中也收到了同样的错误:

代码语言:javascript
复制
 "error": {
    "code": 403,
    "message": "Access Denied: BigQuery BigQuery: No OAuth token with Google Drive scope was found.",
    "errors": [
      {
        "message": "Access Denied: BigQuery BigQuery: No OAuth token with Google Drive scope was found.",
        "domain": "global",
        "reason": "accessDenied"
      }
    ],
    "status": "PERMISSION_DENIED"
  }

现在,您可以提供模式内联(在命令行上),也可以提供一个包含模式定义的JSON文件来工作。

为了让开发人员更清楚地看到这个问题的证据,我鼓励您通过Public In 跟踪器提交bug报告,这样我们就可以跟踪发生的任何更新,或者尝试联系Google支持

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63788255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档