Service Account 접근 방식을 사용하여 Google BigQuery에 액세스하려고합니다.BigQuery 및 OAuth2
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());
}
}
를하지만 다음과 같은 예외가 발생합니다 : 다음과 같이 내 코드는
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)
예외는이 라인에 발사된다
DatasetList datasetList = datasetRequest.execute();
내가에서 계정 ID를 얻고있다 두 번째 줄의 섹션에서 Google의 API 콘솔은 다음과 같습니다.
Client ID: XXXXX.apps.googleusercontent.com
Email address: [email protected]
무엇이 누락 되었습니까?
빠른 응답 주셔서 감사합니다. 그러나 작동하지 않습니다. 최신 BigQuery API 바이너리를 사용하고 있습니다. google-api-client는 그것의 의존성이며 그 버전은 1.8.0-beta입니다. http://javadoc.google-api-java-client.googlecode.com/hg/1.8.0-beta/com/google/api/client/googleapis/extensions/appengine/auth/oauth2/AppIdentityCredential.html에 따라 그 클래스는 그것의 일부가되어야하지만 그렇지 않습니다. 여기서 maven central의 바이너리와 소스를 검토합니다. http://search.maven.org/#artifactdetails|com.google.api-client|google-api-client|1.8.0-beta|jar. – ediaz