BigQuery-Java:QueryResponse和GetQueryResultsResponse之间的区别

时间:2014-11-04 13:03:52

标签: google-bigquery

在Google提供的sample code中,有2个类用于获取结果。 QueryResponse和GetQueryResultsResponse。 我无法理解这两个类的目的,我们是否必须使用这两个类? 我们从以下两个方面获取数据:queryResponse.getRows()和queryResults.getRows()

我经历过docs,但无法理解。这两个类有什么区别,哪个更好用?

1 个答案:

答案 0 :(得分:2)

这两个结果实际上是相同的(事实上,它们在原始HTTP请求中是相同的)。不同的是你如何得到它们。

jobs.query()返回QueryResponse。此方法可用于运行查询,但只有有限的配置选项。它旨在作为一种便利功能。对于更多查询选项(例如设置目标表,允许大结果等),请使用jobs.insert()。 jobs.query()的另一个限制是它可能在查询完成之前超时。部分原因是因为许多客户端(例如在AppEngine中)要求所有HTTP请求在30秒左右完成。如果jobs.query()超时,它仍将报告可用于通过jobs.get_query_results()获取结果的作业ID。

jobs.get_query_results()返回GetQueryResultsResponse。这可用于获取jobs.query()或jobs.insert()启动的查询结果。查询完成后24小时内可以查询查询结果(如果未指定目标表)。 jobs.get_query_results()允许您随时获取这些结果。 jobs.query()只为您提供一次查询结果。

两者之间还有一个区别,就是jobs.query()只返回结果的第一页。 jobs.get_query_results()可用于获取多页结果。

希望这能澄清一些事情。