BigQuery 查询响应“jobComplete”:错误

Posted

技术标签:

【中文标题】BigQuery 查询响应“jobComplete”:错误【英文标题】:BigQuery query response 'jobComplete': False 【发布时间】:2016-11-08 17:03:55 【问题描述】:

我有以下功能:

def query_big_query(query_data, project_id):
    credentials = ServiceAccountCredentials.from_json_keyfile_name('credentials_bq.json')
    bigquery_service = build('bigquery', 'v2', credentials=credentials)
    try:
        query_request = bigquery_service.jobs()
        query_response = query_request.query(projectId=project_id, body=query_data).execute()
        return query_response
    except HttpError as error:
        print ('Error :'.format(error.content))
        raise error

但是有些查询没有返回数据,因为查询需要一些时间,并返回以下字符串:

u'kind': u'bigquery#queryResponse', u'jobComplete': False, u'jobReference': u'projectId': u'od', u'jobId': u'job_5wAuC'

我怎样才能等到作业完成(真)?或者我应该以不同的调用请求结果?

【问题讨论】:

【参考方案1】:

尝试在 body 中指定更大的 timeoutMs,例如:

query_response = query_request.query(projectId=project_id, body='query': your_query, 'timeoutMs': 180000).execute()

默认情况下,timeoutMs 为 10000,即 10 秒。

参考:documentation

【讨论】:

【参考方案2】:

试试这个:

response = bigquery_service.jobs().getQueryResults(projectId=my_project_id, jobId=my_job_id).execute()
while not response['jobComplete']:
    print "waiting for response..."
    time.sleep(1)
    response = bigquery_service.jobs().getQueryResults(projectId=my_project_id, jobId=my_job_id).execute()
return response

【讨论】:

以上是关于BigQuery 查询响应“jobComplete”:错误的主要内容,如果未能解决你的问题,请参考以下文章

对 BigQuery 查询的错误响应:kind:discovery#restDescription 而不是 bigquery#queryResults

当从多个分表查询超过 4 亿行时,BigQuery 的预期查询响应性能是多少?

自 2016 年 2 月 19 日以来,BigQuery 交互式查询响应时间下降

BigQuery 对整个数据集给出响应太大错误,但对等效子查询没有

BigQuery 避免多个子查询

正确格式化 BigQuery 响应