-1

当总记录数较高(以百万计)时,将 iterator_1 设置为非常小的值,例如几千。但是当数据较少时,两者都具有相同的记录集。在 iterator_1 中仅获取值然后设置迭代器。在 iterator_2 中获取所有记录并设置迭代器。

理想情况下,两者都是一样的,对吧?但是得到不一致的输出。有人可以帮忙理解吗?

TableResult results = bigquery.query(queryConfig);
Iterator<FieldValueList> iterator_1 = results.getValues().iterator();
Iterator<FieldValueList> iterator_2 = results.iterateAll().iterator();
4

1 回答 1

2

这实际上是关于Page<ResourceT>TableResult.

许多 Google API 使用分页实现列表操作(或在这种特殊情况下为查询操作)。该Page<ResourceT>接口代表这个分页结果中的一个页面——一个实现不仅要知道如何获取当前页面中的资源,还要知道如何获取后续页面。

因此,如果您有一个查询返回 25 个结果,每页 10 个,那么getValues()在第一页上调用将立即返回前 10 个资源,然后停止。iterateAll()将返回一个迭代器,该迭代器根据需要(但懒惰地)进行额外的 API 调用,在耗尽之前返回所有 25 个结果。

如果您只想获取查询的所有结果,请使用iterateAll(),请注意这可能需要很长时间并在您迭代时进行额外的 API 调用。如果您想在当前页面中立即获得结果,请使用getValues().

于 2022-02-09T12:04:29.547 回答