分块 BigQuery 结果
Chunking BigQuery results
您好,我正在使用 BigQuery python library,但我在理解 RowIterator class 的工作原理时遇到了一些问题。给定一个查询 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 结果中获取一行结果 table 还是将整个结果存储在内存中。另外,我如何或在哪里指定我想获取固定块大小的结果并获取下一页令牌?
谢谢!
查看 RowTerator 代码,它将尝试使用一个 GET 请求读取所有结果,然后在内存中循环访问它们。
无法在 job.result() 中设置 max_results,因此它将受到 BigQuery 默认限制 100.000 行 [1] 和 10MB 总大小的限制。如果结果不符合此限制,迭代器将尝试读取下一页。
list_rows API [2] 允许您设置 max_results 和 page_token。如果您的目标是读取定义大小的页面中的所有作业结果,您可以使用此 api 为每个页面创建一个单独的 RowTerator。您可以从迭代器 [3] 中获取下一页标记。希望这有帮助。
您好,我正在使用 BigQuery python library,但我在理解 RowIterator class 的工作原理时遇到了一些问题。给定一个查询 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 结果中获取一行结果 table 还是将整个结果存储在内存中。另外,我如何或在哪里指定我想获取固定块大小的结果并获取下一页令牌?
谢谢!
查看 RowTerator 代码,它将尝试使用一个 GET 请求读取所有结果,然后在内存中循环访问它们。
无法在 job.result() 中设置 max_results,因此它将受到 BigQuery 默认限制 100.000 行 [1] 和 10MB 总大小的限制。如果结果不符合此限制,迭代器将尝试读取下一页。
list_rows API [2] 允许您设置 max_results 和 page_token。如果您的目标是读取定义大小的页面中的所有作业结果,您可以使用此 api 为每个页面创建一个单独的 RowTerator。您可以从迭代器 [3] 中获取下一页标记。希望这有帮助。