Google cloud platform BigQuery外部表创建失败,返回“0”;“自动检测”;从Google Drive读取文件时的架构
我正试图通过从Google Drive读取一个文件来创建一个BigQuery外部表-它使用内联模式工作,但使用Google cloud platform BigQuery外部表创建失败,返回“0”;“自动检测”;从Google Drive读取文件时的架构,google-cloud-platform,google-bigquery,flysystem-google-drive,Google Cloud Platform,Google Bigquery,Flysystem Google Drive,我正试图通过从Google Drive读取一个文件来创建一个BigQuery外部表-它使用内联模式工作,但使用autodetect标志失败 参考文件: 架构文件: $ bq mkdef --autodetect --source_format=CSV "https://drive.google.com/open?id=<file-id>" > schema.json { "autodetect": true, "cs
autodetect
标志失败参考文件:
架构文件:
$ bq mkdef --autodetect --source_format=CSV "https://drive.google.com/open?id=<file-id>" > schema.json
{
"autodetect": true,
"csvOptions": {
"encoding": "UTF-8",
"quote": "\""
},
"sourceFormat": "CSV",
"sourceUris": [
"https://drive.google.com/open?id=<file-id>"
]
}
$ 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.
它适用于内联模式:
$ 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.
$bq mk--external_table_definition=col1:INTEGER,col2:STRING@CSV=https://drive.google.com/open?id= mydataset.mytable
已成功创建表“myproject:mydataset.mytable”。
注意:我已经通过使用gcloud auth login——启用gdrive访问启用了谷歌硬盘访问
显然,罪魁祸首是
“autodetect”:true
,当从驻留在Google Drive中的源数据创建Bigquery时,在表定义文件--external_table_definition
中指定
实际上,bq
命令行工具是一个与之交互的Python脚本,这意味着我们触发表。插入
API来创建一个永久的外部表,在json请求体中提供适当的接口
您可以在使用ExternalDataConfiguration
中的表定义参数的整个过程中执行对Bigquery API的相关API调用:
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
现在,您可以提供内联模式(在命令行上),也可以提供一个包含模式定义的JSON文件来完成工作
为了让开发人员更容易看到这个问题的证据,我鼓励您通过公共问题提交错误报告,这样我们就可以跟踪发生的任何更新或尝试联系谷歌。显然,罪魁祸首是
“自动检测”:true
,从Google Drive中的源数据创建Bigquery时,在表定义文件--external_table_definition中指定
实际上,bq
命令行工具是一个与之交互的Python脚本,这意味着我们触发表。插入
API来创建一个永久的外部表,在json请求体中提供适当的接口
您可以在使用ExternalDataConfiguration
中的表定义参数的整个过程中执行对Bigquery API的相关API调用:
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
现在,您可以提供内联模式(在命令行上),也可以提供一个包含模式定义的JSON文件来完成工作
为了让开发者更容易看到这个问题的证据,我鼓励你通过公共问题提交bug报告,这样我们就可以跟踪发生的任何更新或尝试联系谷歌。这个问题实际上似乎与身份验证有关。值得一提的是,
gcloud
使用了与bq
不同的OAuth令牌
我认为目前最好的做法是:
$HOME/.bigqueryrc
,有凭证\u文件=
行credential\u文件
(在Linux/macOS上可能类似于.config/gcloud/…
)gcloud auth--enable gdrive access--force
,OAuth窗口也会询问您使用gdrive的权限如果仍然不起作用,您可以通过预览
credential\u file
中引用的文件来查找令牌使用的作用域。这是一个简单的JSON文件,作用域只是一个URI列表,应该有一个带有drive
或drive.read
这个问题实际上似乎与身份验证有关。值得一提的是,gcloud
使用了与bq
不同的OAuth令牌
我认为目前最好的做法是:
$HOME/.bigqueryrc
,有凭证\u文件=
行credential\u文件
(在Linux/macOS上可能类似于.config/gcloud/…
)gcloud auth--enable gdrive access--force
,OAuth窗口也会询问您使用gdrive的权限credential\u file
中引用的文件来查找令牌使用的作用域。这是一个简单的JSON文件,作用域只是一个URI列表,应该有一个带有drive
或drive.read