以下代码:
import time
from google.cloud import bigquery
client = bigquery.Client()
query = """\
select 3 as x
"""
dataset = client.dataset('dataset_name')
table = dataset.table(name='table_name')
job = client.run_async_query('job_name_76', query)
job.write_disposition = 'WRITE_TRUNCATE'
job.destination = table
job.begin()
retry_count = 100
while retry_count > 0 and job.state != 'DONE':
retry_count -= 1
time.sleep(10)
job.reload()
print job.state
print job.query_results().name
print job.query_results().total_bytes_processed
打印:
DONE
job_name_76
None
我不明白为什么total_bytes_processed
会返回None
,因为工作已完成且文档说明了:
total_bytes_processed:
查询处理的总字节数。
请参阅 https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query#totalBytesProcessed
返回类型:int或NoneType
返回:在服务器上生成的计数(在服务器设置之前为None)。
答案 0 :(得分:2)
看起来你是对的。正如您在code中所看到的,当前的API不会处理有关已处理字节的数据。
此问题已在此issue中报告,正如您在此tseaver's PR中所看到的,此功能已经实施并等待审核/合并,因此我们很快就会将此代码投入生产。
同时您可以从_properties
的{{1}}属性中获得结果,例如:
job
from google.cloud.bigquery import Client
import types
import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'path/to/key.json'
bc = Client()
query = 'your query'
job = bc.run_async_query('name', query)
job.begin()
wait_job(job)
query_results = job._properties['statistics'].get('query')
应该有您要找的query_results
。