Лист диска Google был создан (из XLS) с помощью Drive API - приложением 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();
Теперь я хотел бы создать таблицу BigQuery из этого Google Sheet. Итак, я получил 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: токен OAuth с областью действия Google Диска не найден.
Я что-то упустил?