BigQuery异步查询作业-fetch_results()方法返回错误数量的值
问题内容:
我正在使用BigQuery Client
API编写Python代码,并尝试使用异步查询代码(作为代码示例在各处编写),并且在fetch_data()方法调用中失败。Python错误并出现以下错误:
ValueError:太多值无法解包
因此,三个返回值(行,total_count,page_token)似乎是错误的返回值数。但是,除了众多仅显示这3个返回结果的代码示例外,我找不到有关此方法应返回什么的任何文档。
这是显示我在做什么的代码片段(不包括“ client”变量或导入的库的初始化,这在我的代码中更早发生)。
#---> Set up and start the async query job
job_id = str(uuid.uuid4())
job = client.run_async_query(job_id, query)
job.destination = temp_tbl
job.write_disposition = 'WRITE_TRUNCATE'
job.begin()
print 'job started...'
#---> Monitor the job for completion
retry_count = 360
while retry_count > 0 and job.state != 'DONE':
print 'waiting for job to complete...'
retry_count -= 1
time.sleep(1)
job.reload()
if job.state == 'DONE':
print 'job DONE.'
page_token = None
total_count = None
rownum = 0
job_results = job.results()
while True:
# ---- Next line of code errors out...
rows, total_count, page_token = job_results.fetch_data( max_results=10, page_token=page_token )
for row in rows:
rownum += 1
print "Row number %d" % rownum
if page_token is None:
print 'end of batch.'
break
我应该从异步查询作业上的job_results.fetch_data(…)方法调用中得到什么具体的返回结果?
问题答案:
看起来您是对的!该代码不再返回这3个参数。
如您在公共存储库中的提交中所看到的那样,fetch_data现在返回HTTPIterator类的实例(猜测我之前没有意识到这一点,因为我安装了安装了bigquery客户端的较旧版本的docker映像,该映像确实返回了3个值)。
我发现返回结果的唯一方法是执行以下操作:
iterator = job_results.fetch_data()
data = []
for page in iterator._page_iter(False):
data.extend([page.next() for i in range(page.num_items)])
注意,现在我们不必再进行管理pageTokens
了,它在很大程度上已实现了自动化。
[编辑]:
我刚刚意识到您可以通过以下操作获得结果:
results = list(job_results.fetch_data())
不得不承认现在比以前更容易了!