如何使用 Google BigQuery python API 获得超过 100,000 个响应结果?

Posted

技术标签:

【中文标题】如何使用 Google BigQuery python API 获得超过 100,000 个响应结果?【英文标题】:How to get more then 100,000 results in respond using Google BigQuery python API? 【发布时间】:2017-03-23 16:38:52 【问题描述】:

现在,我使用此脚本通过 python API 请求 Big Query:

import argparse
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
bigquery_service = build('bigquery', 'v2', credentials=credentials)

def request(query):
    query_request = bigquery_service.jobs()
    query_data = 'query':query, 'timeoutMs':100000
    query_response = query_request.query(projectId=project, body=query_data).execute()
    return query_response

query = """
select domain
from 
[logs.compressed_v40_20170313]
limit 150000"""

respond = request(query)

我得到了结果:

print respond['totalRows']  # total number of lines in respond 
u'150000'

print len(respond['raws])  # actual number of lines
100000

问题:剩余的50000行如何接收?

【问题讨论】:

【参考方案1】:

要在第一页结果之后获得更多结果,您需要致电getQueryResults。

在您的情况下,您需要从query 响应中获取作业 ID 和页面令牌。

query_response = query_request.query(projectId=project, body=query_data).execute()
page_token = query_response['pageToken']
job_id = query_response['jobReference']['jobId']
next_page = bigquery_service.jobs().getQueryResults(
    projectId=project, jobId=job_id, pageToken=page_token)

继续循环,直到获得所有查询结果。

注意:对查询的调用可能会超时,但查询仍将在后台运行。我们建议您创建明确的作业 ID 并手动插入作业,而不是使用 query 方法。

请参阅"async" query sample。注意:这不是正确的名称,因为此示例确实等待查询完成。

【讨论】:

以上是关于如何使用 Google BigQuery python API 获得超过 100,000 个响应结果?的主要内容,如果未能解决你的问题,请参考以下文章

在 Google 表格中使用 BigQuery,如何授予其他用户按“刷新”的权限?

如何使用 AppScript 在 BigQuery 中将 Google 工作表持久化为表格

在 google bigquery 中,如何使用 google python 客户端使用 javascript UDF

如何使用 Bigquery 在 Google Bigquery 中进行身份验证,而无需使用服务帐户进行用户输入

如何使用 Google Natural Language API 丰富 Bigquery 表中的数据?

如何使用 google-api-python-client 设置 BigQuery 配置属性?