2017-01-19 48 views
2

我有一个BigQuery表(> 5mil行)。从python的BigQuery BigQuery表中提取数据

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

从我知道的表中获取的唯一方法是在此表上运行SELECT查询,然后使用标记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) 

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

回答

0

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

1

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

不幸的是,我不确定有一种很好的方法可以在不减少一次检索多少行的情况下执行所需操作。你可能需要做的是探索exporting data documentation的大查询。

0

我认为这正是你需要的link,据我所知,你不能得到一个查询的大结果,但你可以得到整个表数据到你的应用程序没有一个mater有多大,这就是为什么你需要把一个大的结果放在一个表格中,然后把这个表格数据提供给你的应用程序,然后用它做任何你想做的事情

祝你好运:)