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

Python BigQuery API: how to get data asynchronously?

我正在 Python、following the documentation 中开始使用 BigQuery API。

这是我的代码,改编自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?我应该多久检查一次/我应该等多久?

谁能举个例子吗?

有代码可以做你想做的事here

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

TL;DR:

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