2014-10-29 71 views
1

我試圖使用Python API列出一個表中的數據太大反應:BigQuery的結果

tableDataList = tableDataCollection.list(**params).execute(http=http) 

允許PARAMS:

list(projectId=*, datasetId=*, tableId=*, pageToken=None, maxResults=None, startIndex=None) 

我收到的錯誤是:

apiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/bigquery/v2/projects/myproject/queries?alt=json returned "Response too large to return."> 

當前我創建一個查詢作業並接收destinationTable回來,並在該目標表上列出數據(用於性能其他)。我讀過,我可以使用allowLargeResults,但我無法在tabledata.listjobs.query端點上找到它。我在哪裏設置或如何解決問題? 97k行的數據只有大約90mb。

UPDATE

我已經改變了查詢中使用的目標表(帶jobs.insert)上,我可以再設置allowLargeResultsTrue

body = { 
    'configuration': { 
     'query': { 
      'createDisposition': 'CREATE_IF_NEEDED', 
      'writeDisposition': 'WRITE_TRUNCATE', 
      'useQueryCache': False, 
      'allowLargeResults': True, 
      'destinationTable': { 
       'projectId': PROJECT_ID, 
       'datasetId': DATASET_ID, 
       'tableId': 'tmp_{0}'.format(TABLE_ID), 
      }, 
      'query': query, 
     } 
    } 
} 

不過,我還是收到了同樣的錯誤:

ResponseTooLarge: Response too large to return.

回答

1

從你的錯誤信息,它看起來像查詢失敗,而不是表數據列表呼叫。

allowLargeResults允許查詢產生任意大的輸出結果。您可以在這裏閱讀更多關於它的信息:https://cloud.google.com/bigquery/docs/reference/v2/jobs您可以在configuration.query.allowLargeResults中進行設置。對於90MB的結果而言,這不是必需的,但是大於128MB的結果將需要它。也許你的結果比你想象的要大?您還需要爲allowLargeResults工作設置一個顯式的目標表。

一旦您的查詢完成,應該可以按照您所描述的方式列出結果。如果您仍然有問題,我們可以查看您的個人詳細信息,如果您提供job_id。

+0

'明確的目的地'嗯...我會仔細研究,謝謝你的提示。 – Tjorriemorrie 2014-10-31 06:51:48

+0

我更新了我的問題;迄今爲止沒有成功 – Tjorriemorrie 2014-11-08 14:48:49

0

看來如果我刪除的排序在我的查詢工作:

query = """ 
    SELECT * 
    FROM [mydataset.{0}] 
    WHERE delta > {1} 
    --ORDER BY delta ASC 
""".format(TABLE_ID, int(delta)) 

嗯,這是奇怪...的BigQuery還不夠大嗎?

+0

@JordanTigani這裏發生了什麼事? – Tjorriemorrie 2014-11-08 15:03:32

+0

如果您寫入表格,訂單沒有任何意義。如果訂單是在子查詢中,請分享您的查詢,我們會盡力幫助您優化。 – 2014-11-10 05:10:20

+0

@ N.N。有趣的是,至少我不認爲這會影響我的三角洲使用。謝謝。 – Tjorriemorrie 2014-11-10 14:28:58