【发布时间】:2019-02-11 14:44:46
【问题描述】:
已使用 Drive API(来自 XLS)创建了 Google 驱动器表 - 由 App Engine 应用程序使用默认服务帐户。新创建的文档已与个人共享,并且已确认对文件的访问。
File file = driveService.files().create(fileMetadata, inputStreamContent)
.setFields("id")
.execute();
Logger.info("Created file: %s", file.getId());
BatchRequest batch = driveService.batch();
Permission userPermission = new Permission()
.setType("user")
.setRole("writer")
.setEmailAddress("personal.email@gmail.com");
driveService.permissions().create(file.getId(), userPermission)
.setFields("id")
.execute();
现在我想从这个 Google 表格创建一个 BigQuery 表。所以我已经为上一步明显启用了 Drive API。我已调整 BigQuery 服务以创建具有必要范围的凭据:
private static final List<String> SCOPES = asList(DriveScopes.DRIVE,
DriveScopes.DRIVE_READONLY, SheetsScopes.SPREADSHEETS, AUTH, BIGQUERY);
GoogleCredentials googleCredentials = AppEngineCredentials.getApplicationDefault().createScoped(SCOPES);
BigQueryOptions options = BigQueryOptions.newBuilder().setCredentials(googleCredentials).build();
BigQuery bigQuery = options.getService();
但是当我调用控制器以使用以下代码摄取工作表时仍然没有运气:
ExternalTableDefinition tableDefinition = ExternalTableDefinition
.of(String.format(GOOGLE_DRIVE_LOCATION_FORMAT, fileId), categoryMappingSchema(),
GoogleSheetsOptions.newBuilder().setSkipLeadingRows(FIRST_ROW).build());
TableInfo tableInfo = TableInfo.newBuilder(tableId, tableDefinition).build();
Table table = bigQuery.create(tableInfo);
我收到的错误表明范围尚未提供给凭据。
访问被拒绝:BigQuery BigQuery:未找到具有 Google Drive 范围的 OAuth 令牌。
我错过了什么吗?
【问题讨论】:
-
在开始编写代码之前,您是否检查了此处列出的所有三个步骤? stackoverflow.com/questions/40731823/…
-
感谢@GrahamPolley - 是的,之前看过这个问题,按照说明进行操作
标签: google-app-engine google-cloud-platform google-bigquery