2017-01-19 70 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有多大,這就是爲什麼你需要把一個大的結果放在一個表格中,然後把這個表格數據提供給你的應用程序,然後用它做任何你想做的事情

祝你好運:)