我手动创建了一个电子表格,其中包含一些数据。在bigquery控制台中,我可以这样做:
CREATE OR REPLACE EXTERNAL TABLE \`PROJECT.DATASET.TABLE\`
OPTIONS (
format = 'GOOGLE_SHEETS',
uris = ['https://docs.google.com/spreadsheets/d/ID']
);
这就为我创建了一个包含电子表格中数据的表格。然而,当我使用大查询 API 尝试同样的事情时:
BQ_QUERY=$(cat <<EOF
CREATE OR REPLACE EXTERNAL TABLE \`PROJECT.DATASET.TABLE\`
OPTIONS (
format = 'GOOGLE_SHEETS',
uris = ['https://docs.google.com/spreadsheets/d/ID']
);
EOF
)
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token --account=MY_EMAIL_ADDRESS)" \
-H "Content-Type: application/json" \
-d "{\"query\": \"$BQ_QUERY\", \"useLegacySql\": false}" \
"https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/queries" | jq
我得到:
{
"error": {
"code": 403,
"message": "Access Denied: BigQuery BigQuery: Permission denied while getting Drive credentials.",
"errors": [
{
"message": "Access Denied: BigQuery BigQuery: Permission denied while getting Drive credentials.",
"domain": "global",
"reason": "accessDenied"
}
],
"status": "PERMISSION_DENIED"
}
}
这是为什么?
是的,这显然是一个权限问题。错误消息“访问被拒绝:BigQuery BigQuery:获取云端硬盘凭据时权限被拒绝。”意味着用于您的 API 请求的 BigQuery 服务帐户没有访问您引用的 Google 表格所需的权限。另外,验证 BigQuery 服务帐户是否已作为“编辑者”添加到您的 Google 工作表中。