Python BigQuery API:如何异步获取数据?

时间:2015-11-20 20:59:50

标签: python google-bigquery

我开始使用Python中的BigQuery API following the documentation

这是我的代码,改编自an example

credentials = GoogleCredentials.get_application_default()
bigquery_service = build('bigquery', 'v2', credentials=credentials)

try:
    query_request = bigquery_service.jobs()
    query_data = {
        'query': (
            'SELECT * FROM [mytable] LIMIT 10;"
        )
    }
    query_response = query_request.query(
        projectId=project_id,
        body=query_data).execute()
    for row in query_response['rows']:
        print('\t'.join(field['v'] for field in row['f']))

我遇到的问题是我不断收到回复:

{u'kind': u'bigquery#queryResponse', 
 u'jobComplete': False, 
u'jobReference': {u'projectId': 'myproject', u'jobId': u'xxxx'}}

所以它没有rows字段。查看文档,我想我需要使用jobId字段并使用它来检查作业何时完成,然后获取数据。

我遇到的问题是文档有点分散和混乱,我不知道该怎么做。

我认为我需要use this method来检查作业的状态,但是如何使其适应Python呢?我应该多久检查一次/我应该等多久?

有人能举个例子吗?

1 个答案:

答案 0 :(得分:2)

有代码可以执行您想要的操作here

如果您想了解更多有关其工作的背景信息,请查看Google BigQuery Analytics第7章(相关代码段可用here。)

TL; DR:

您的初始jobs.query()调用在查询完成之前返回;等待工作完成,您需要在jobs.getQueryResults()上进行投票。然后,您可以翻阅该通话的结果。