您好我正在使用BigQuery python library,而我在理解RowIterator类的工作原理时遇到了一些麻烦。给定查询job_id我想以固定大小的块来获取结果行。
我首先使用客户端运行查询。
query_job = client.query(query, job_config=job_config)
后来我拿这样的工作 -
job = client.get_job(query_job.job_id)
result_iter = job.result()
我想知道job.result()如何获得结果。它是从bigquery结果表一次一行地获取结果还是将整个结果存储在内存中。另外,我如何或在何处指定我想在固定的chunksize中获取结果并获取下一页令牌?
谢谢!
答案 0 :(得分:0)
查看RowTerator代码,它将尝试使用一个GET请求读取所有结果,然后在内存中迭代它们。
无法在job.result()中设置max_results,因此它将受到BigQuery默认限制100.000行[1]和10MB总大小的限制。如果结果不符合此限制,迭代器将尝试阅读下一页。
list_rows API [2]允许您设置max_results和page_token。如果您的目标是以定义大小的页面读取所有作业结果,则可以使用此API为每个页面创建单独的RowTerator。您可以从迭代器[3]获取下一页令牌。希望这会有所帮助。