有什么不同?
What is the difference?
当总记录数较高(以百万为单位)时,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();
这实际上是关于由 TableResult
实现的 Page<ResourceT>
接口。
许多 Google API 使用分页实现列表操作(或在这种特殊情况下的查询操作)。 Page<ResourceT>
接口表示此分页结果中的一个页面 - 实现不仅要知道如何获取当前页面中的资源,还要知道如何获取后续页面中的资源。
因此,如果您的查询 return 有 25 个结果,每页 10 个,那么在第一页上调用 getValues()
将立即 return 前 10 个资源,并停止. iterateAll()
将 return 一个迭代器,它会根据需要(但懒惰地)进行额外的 API 调用,return 在耗尽之前对所有 25 个结果进行处理。
如果您只想获得查询的所有结果,请使用 iterateAll()
,请注意这可能需要很长时间,并且在迭代时会进行额外的 API 调用。如果您希望在当前页面中显示 immediately-available 个结果,请使用 getValues()
.
当总记录数较高(以百万为单位)时,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();
这实际上是关于由 TableResult
实现的 Page<ResourceT>
接口。
许多 Google API 使用分页实现列表操作(或在这种特殊情况下的查询操作)。 Page<ResourceT>
接口表示此分页结果中的一个页面 - 实现不仅要知道如何获取当前页面中的资源,还要知道如何获取后续页面中的资源。
因此,如果您的查询 return 有 25 个结果,每页 10 个,那么在第一页上调用 getValues()
将立即 return 前 10 个资源,并停止. iterateAll()
将 return 一个迭代器,它会根据需要(但懒惰地)进行额外的 API 调用,return 在耗尽之前对所有 25 个结果进行处理。
如果您只想获得查询的所有结果,请使用 iterateAll()
,请注意这可能需要很长时间,并且在迭代时会进行额外的 API 调用。如果您希望在当前页面中显示 immediately-available 个结果,请使用 getValues()
.