在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();
等同于什么?
答案 0 :(得分:3)
您需要设置GOOGLE_APPLICATION_CREDENTIALS
环境变量,并指向您的JSON服务帐户密钥。
当您致电BigQueryOptions.getDefaultInstance().getService();
时,它会首先查找该环境变量,如果找不到它,它会回退到您在框中设置的gcloud
身份验证正在运行。
由于评论而更新
您还可以直接在代码中引用JSON文件(请参阅上面的第二个链接)。例如(简单地改为BigQuery服务):
Storage storage = StorageOptions.newBuilder()
.setCredentials(ServiceAccountCredentials
.fromStream(new FileInputStream("/path/to/my/key.json")))
.build()
.getService();