显然,使用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,如代码示例所示?

最佳答案

QueryStatisticsJobStatistics的嵌套类之一,如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()

10-02 10:43