BigQuery Java API 中的默认项目 ID

Gre*_*all 1 google-bigquery

我正在使用 BigQuery Java API 和以下代码执行查询:

  try (FileInputStream input = new FileInputStream(serviceAccountKeyFile)) {

     GoogleCredentials credentials = GoogleCredentials.fromStream(input);

     BigQuery bigQuery = BigQueryOptions.newBuilder()
           .setCredentials(credentials)
           .build()
           .getService();

     QueryRequest request = QueryRequest.of("SELECT * FROM foo.Bar");
     QueryResponse response = bigQuery.query(request);

     // Handle the response ...

  }
Run Code Online (Sandbox Code Playgroud)

请注意,我正在使用一个特定的服务帐户,其密钥文件由serviceAccountKeyFile.

我期待 API 会project_id从密钥文件中获取。但它实际上是project_idGOOGLE_APPLICATION_CREDENTIALS环境变量引用的默认密钥文件中提取的。

这对我来说似乎是一个错误。有没有办法通过显式设置默认项目来解决该错误?

Gra*_*ley 5

是的,这听起来根本不对。这听起来像一个错误。我总是GOOGLE_APPLICATION_CREDENTIALS在我们的应用程序中使用 export环境变量。

无论如何,您尝试显式设置项目 ID 以查看它是否有效:

BigQuery bigQuery = BigQueryOptions.newBuilder()
                    .setCredentials(credentials)
                    .setProjectId("project-id") //<--try setting it here
                    .build()
                    .getService();
Run Code Online (Sandbox Code Playgroud)