BigQuery и OAuth2
Я пытаюсь получить доступ к Google BigQuery с помощьюСервисный аккаунт подход. Мой код выглядит следующим образом:
<code>private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport(); private static final JsonFactory JSON_FACTORY = new JacksonFactory(); GoogleCredential credentials = new GoogleCredential.Builder() .setTransport(HTTP_TRANSPORT) .setJsonFactory(JSON_FACTORY) .setServiceAccountId("[email protected]") .setServiceAccountScopes(BigqueryScopes.BIGQUERY) .setServiceAccountPrivateKeyFromP12File( new File("PATH-TO-privatekey.p12")) .build(); Bigquery bigquery = Bigquery.builder(HTTP_TRANSPORT, JSON_FACTORY).setHttpRequestInitializer(credentials) .build(); com.google.api.services.bigquery.Bigquery.Datasets.List datasetRequest = bigquery.datasets().list( "PROJECT_ID"); DatasetList datasetList = datasetRequest.execute(); if (datasetList.getDatasets() != null) { java.util.List<Datasets> datasets = datasetList.getDatasets(); System.out.println("Available datasets\n----------------"); for (Datasets dataset : datasets) { System.out.format("%s\n", dataset.getDatasetReference().getDatasetId()); } } </code>
Но это бросает следующее исключение:
<code>Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized { "code" : 401, "errors" : [ { "domain" : "global", "location" : "Authorization", "locationType" : "header", "message" : "Authorization required", "reason" : "required" } ], "message" : "Authorization required" } at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:159) at com.google.api.client.googleapis.json.GoogleJsonResponseException.execute(GoogleJsonResponseException.java:187) at com.google.api.client.googleapis.services.GoogleClient.executeUnparsed(GoogleClient.java:115) at com.google.api.client.http.json.JsonHttpRequest.executeUnparsed(JsonHttpRequest.java:112) at com.google.api.services.bigquery.Bigquery$Datasets$List.execute(Bigquery.java:979) </code>
Исключение вызывается в этой строке:
<code> DatasetList datasetList = datasetRequest.execute(); </code>
Я получаю идентификатор учетной записи из консоли API Google со второй строки в разделе, который выглядит следующим образом:
<code> Client ID: XXXXX.apps.googleusercontent.com Email address: [email protected] </code>
Что мне не хватает?