在BigQuery中,我可以使用标准SQL成功运行以下查询:
SELECT
COUNT(*) AS totalCount,
city,
DATE_TRUNC(timeInterval.intervalStart, YEAR) AS start
FROM
sandbox.CountByCity
GROUP BY
city, start
Run Code Online (Sandbox Code Playgroud)
但是当我将start值嵌套在STRUCT中时,它就失败了……
SELECT
COUNT(*) AS totalCount,
city,
STRUCT(
DATE_TRUNC(timeInterval.intervalStart, YEAR) AS start
) as timeSpan
FROM
sandbox.CountByCity
GROUP BY
city, timeSpan.start
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我收到以下错误消息:
无法从[10:11]的SELECT列表别名timeSpan中的GROUP BY字段引用
编写查询以使start值嵌套在STRUCT中的正确方法是什么?
我正在使用 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_id从GOOGLE_APPLICATION_CREDENTIALS环境变量引用的默认密钥文件中提取的。
这对我来说似乎是一个错误。有没有办法通过显式设置默认项目来解决该错误?