Bigquery:job已完成但job.query_results()。total_bytes_processed返回None

时间:2017-08-17 09:28:53

标签: python-2.7 google-bigquery

以下代码:

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)。

1 个答案:

答案 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