从python中的大型BigQuery表中获取数据

时间:2017-01-19 14:04:19

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

我所拥有的是BigQuery表(> 5mil行)。

我需要批量获取这些数据并在AppEngine,python中处理它。

从我知道的表中获取的唯一方法是在此表上运行SELECT查询,然后使用tokens fetch_data返回迭代结果。

看起来像这样:

query = u"""\
    SELECT url FROM %s
    """ % (query_table)

query_job = client.run_async_query(str(uuid.uuid4()), query)

query_job.begin()

wait_for_job(query_job, 1)

query_results = query_job.results()

rows, total_rows, next_token = query_results.fetch_data(max_results=per_page, page_token=page_token)

这适用于较小的表,但在较大的表上,它要求允许大请求并指定目标表。但这对我来说毫无意义。为了简单地从表中获取数据,我必须将其复制到另一个表中?

3 个答案:

答案 0 :(得分:1)

this documentation中描述了您遇到的问题。总之,除了一次可以获取多少数据的限制之外,还有一点是您的结果会变成“大结果”。这是当你的结果压缩超过128MB时所描述的here。当您的结果被分类为大型时,您只能将查询结果存储在Big Query中的表中。

不幸的是,我不确定有什么好方法可以做你想要的,而不会减少你一次检索的行数。您可能需要做的是探索exporting data documentation进行大查询。

答案 1 :(得分:0)

您应该使用tabledata.list API从表中获取数据 使用parameters(startIndex或pageToken)和maxResults,您可以控制要获取的页面大小。

答案 2 :(得分:0)

我认为这正是您所需要的link,据我所知,您无法获得查询的大量结果,但您可以将整个表数据提供给您的应用程序,无论它有多大,这就是为什么你需要将大结果放在一个表中,然后将这个表数据提供给你的应用程序,并用它做任何你想做的事情

祝你好运:)

相关问题