【问题标题】:How to get more then 100,000 results in respond using Google BigQuery python API?如何使用 Google BigQuery python API 获得超过 100,000 个响应结果?
【发布时间】: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行如何接收?

【问题讨论】:

    标签: python google-app-engine google-bigquery


    【解决方案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。注意:这不是正确的名称,因为此示例确实等待查询完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 2013-07-20
      • 2017-12-19
      相关资源
      最近更新 更多