显然,使用BigQuery API时,存在BigQuery结果的cacheHit
属性。我尝试找到此属性,但不确定如何访问它。这是我使用BigQuery API的Java代码。 cacheHit
不是我得到的TableResult tr
的属性:
try
{
QueryJobConfiguration queryJobConfiguration =
QueryJobConfiguration.newBuilder(
"mySQLqueryText"
)
.setUseLegacySql(false)
.setAllowLargeResults(false)
.setUseQueryCache(true)
.build();
try {
TableResult tr = bigQuery.query(queryJobConfiguration);
Iterable<FieldValueList> rowList = tr.getValues();
....
}
catch (BigQueryException e) {
// do stuff
}
} catch (InterruptedException e) {
e.printStackTrace();
}
我看着这个问题-BigQuery cacheHit property
...但是那不是Java,而且我也没有找到我可以使用的任何
results()
属性,正如该问题所建议的那样。这里有一些有关JobStatistics2对象的文档,显然具有
cacheHit
属性。我可以得到一个
JobStatistics
(不是JobStatistics2
对象),如下所示:QueryJobConfiguration queryJobConfiguration =
QueryJobConfiguration.newBuilder(
"myQueryString"
)
.setUseLegacySql(false)
.setAllowLargeResults(false)
.setUseQueryCache(true)
.build();
JobId jobId = JobId.of(UUID.randomUUID().toString());
Job queryJob = bigQuery.create(JobInfo.newBuilder(queryJobConfiguration).setJobId(jobId).build());
try {
queryJob = queryJob.waitFor();
if (queryJob != null) {
JobStatistics js = queryJob.getStatistics();
Iterable<FieldValueList> rowList = bigQuery.query(queryJobConfiguration).getValues();
...但是我没有在
cacheHit
上看到任何js
属性。当我尝试创建JobStatistics2
时,通过更改实例化JobStatistics
的行,如下所示:JobStatistics2 js = queryJob.getStatistics();
我收到错误
Type parameter S has incompatible upper bounds: JobStatistics and JobStatistics2
。这并不意味着什么,当我搜索Google错误时,没有任何有用的结果。我觉得Google文档没有太大用处。如何访问
cacheHit
属性,并仍然获得我的rowList
,如代码示例所示? 最佳答案
QueryStatistics
是JobStatistics
的嵌套类之一,如here所示,它具有getCacheHit()
方法:
import com.google.cloud.bigquery.JobStatistics.QueryStatistics;
...
QueryStatistics js = queryJob.getStatistics();
System.out.println(js.getCacheHit());
请参阅完整代码here以进行测试。
关于
JobStatistics2
这是针对com.google.api.services.bigquery
库而不是com.google.cloud.bigquery
。在这种情况下,您可以使用getQuery()
中的JobStatistics
获取JobStatistics2
对象,然后使用getCacheHit()
。