0

我正在使用公共文档中的这个示例从 Java 客户端连接到 Big Query。

有一条错误消息:

“ServiceOptions.Builder 类型中的方法 setCredentials(Credentials) 指的是缺少的类型 Credentials”

我错过了什么?

import com.google.auth.oauth2.GoogleCredentials;
import com.google.auth.oauth2.ServiceAccountCredentials;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import com.google.cloud.bigquery.DatasetInfo;
import com.google.cloud.bigquery.FieldValueList;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobId;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.QueryResponse;
import com.google.cloud.bigquery.TableResult;
import java.io.File;
import java.io.FileInputStream;
import java.util.UUID;

public void connectBQ() {

  GoogleCredentials credentials1;
  File credentialsPath = new File("service_account.json");  // TODO: update to your key path.
  try (FileInputStream serviceAccountStream = new FileInputStream(credentialsPath)) {
    credentials1 = ServiceAccountCredentials.fromStream(serviceAccountStream);
  }

  // Instantiate a client.
  BigQuery bigquery = BigQueryOptions.newBuilder().setCredentials(credentials1).build().getService();
  BigQuery bigquery1= BigQueryOptions.newBuilder().setCredentials(credentials1).setProjectId("1234").build().getService();

  // Use the client.
  System.out.println("Datasets:");
  for (Dataset dataset : bigquery.listDatasets().iterateAll()) {
    System.out.printf("%s%n", dataset.getDatasetId().getDataset());
  }
4

1 回答 1

0

当客户端对象尝试使用无效的 GCP 凭据对您的 GCP 帐户服务进行身份验证时,通常会引发此类问题。基于此,您用于初始化凭据路径变量的服务帐户文件路径可能无效,从而导致尝试连接到服务时 setCredentials 方法失败。

File credentialsPath = new File("service_account.json"); // TODO:更新到您的关键路径。

我建议您验证您使用的是 JSON 凭据密钥文件的正确文件路径,并查看“身份验证入门指南”,该指南解释了创建服务帐户服务帐户密钥(JSON 文件)BigQuery角色,以防您尚未创建它们。这样,您将能够使用它们来初始化您的 credentialsPath 变量并毫无问题地实现 Google 的示例。

于 2018-08-02T20:22:14.227 回答