如何从文件创建BigQuery连接

时间:2017-04-11 01:32:53

标签: java google-bigquery

在Java中,如何使用基于文件的身份验证方法创建与BigQuery的连接。

我正在使用新的云API。

所有示例都使用

BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

在gcloud中工作,但不在本地工作。

在我可以使用的旧API中:

InputStream credentialsJSON = new FileInputStream("src/main/java/Warehouse/Common/GoogleCredential.json");
      HttpTransport transport = new NetHttpTransport();
      JsonFactory jsonFactory = new JacksonFactory();
      GoogleCredential credential = GoogleCredential.fromStream(credentialsJSON, transport, jsonFactory);

      // Inject the BigQuery scope if required.
      if (credential.createScopedRequired()) {
          Collection<String> bigqueryScopes = BigqueryScopes.all();
          credential = credential.createScoped(bigqueryScopes);
      }

      return new Bigquery.Builder(transport, jsonFactory, credential)
              .setApplicationName("Warehouse ETL")
              .build();

等同于什么?

1 个答案:

答案 0 :(得分:3)

您需要设置GOOGLE_APPLICATION_CREDENTIALS环境变量,并指向您的JSON服务帐户密钥。

当您致电BigQueryOptions.getDefaultInstance().getService();时,它会首先查找该环境变量,如果找不到它,它会回退到您在框中设置的gcloud身份验证正在运行。

请参阅herehere

由于评论而更新

您还可以直接在代码中引用JSON文件(请参阅上面的第二个链接)。例如(简单地改为BigQuery服务):

Storage storage = StorageOptions.newBuilder()
.setCredentials(ServiceAccountCredentials
.fromStream(new FileInputStream("/path/to/my/key.json")))
.build()
.getService();