2017-04-11 72 views
1

在Java中,如何使用基于文件的身份验证方法创建与BigQuery的连接。如何从文件创建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(); 

有什么相同呢?

回答

2

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

当您调用BigQueryOptions.getDefaultInstance().getService();时,它将首先查找该环境变量,如果找不到它,它将回退到您正在运行的盒子上设置的gcloud验证码。

参见herehere


更新由于意见

您也可以参考JSON文件直接在您的代码(见上文第2个链接)。例如(简单地改为BigQuery服务):

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

所以我不能明确地调用它? – WOPR

+0

你是什么意思? –

+0

我可以明确引用json文件来构建BigQuery连接吗? – WOPR