2017-07-25 40 views
0

我們正在開發從許多表中拉出數據並寫入單個表的bigquery查詢。我們正在使用Python來運行帶有參數的作業:將許多BigQuery表導出爲一個

job = bq_client.run_async_query(jobname, select_query) 
job.destination = bq_table 
job.write_disposition = 'WRITE_APPEND' 

500個職位將在時間推出20個職位。不幸的是,我們將定期運行到錯誤:

Exceeded rate limits: too many table update operations for this table. For more information, see https://cloud.google.com/bigquery/troubleshooting-errors

問題:

  • 這是由於大量查詢工作/查詢太多寫入到單個目標表?如果是這樣,我很驚訝Google沒有在內部遏制bigquery jobs的寫入吞吐量。
  • 如果是這種情況,我們很難判斷可以並行執行多少個作業,因爲每個選擇查詢的dataload存在很大的差異。怎樣才能避免或處理這些錯誤?退避和重試?

編輯

查詢將針對谷歌Analytics(分析)360點的數據。例如:

SELECT 
    ... 
FROM [{datasetname}.ga_sessions_{date}]; 

其中每個數據集可能是不同的數據集,並且查詢多個日期。

我無法與列共享計算,但也許這足以提出合併這些查詢的方法。

+1

https://cloud.google.com/查詢

bigquery/quota-policy –

+1

想知道:如果所有查詢都追加到同一個表中,您是否可以將所有查詢合併爲一個? –

+0

@MikhailBerlyant不幸的是,在這種情況下,我們無法控制寫入速率,因爲我們正在將SELECT查詢處理到Google –

回答

0

假設選擇列表是同爲所有的BigQuery標準SQL

#standardSQL 
SELECT ... FROM `{datasetname1}.ga_sessions_{date}` UNION ALL 
SELECT ... FROM `{datasetname2}.ga_sessions_{date}` UNION ALL 
... 
SELECT ... FROM `{datasetnameN}.ga_sessions_{date}` 

可供BigQuery傳統的SQL

#legacySQL 
SELECT ... FROM 
    (SELECT ... FROM [{datasetname1}.ga_sessions_{date}]), 
    (SELECT ... FROM [{datasetname2}.ga_sessions_{date}]), 
    ... 
    (SELECT ... FROM [{datasetnameN}.ga_sessions_{date}]) 
+0

由於我們的限制更具可預測性,我們將給予這一機會。但是,我相信我們會遇到最大256KB的查詢長度。我們的一個更長的查詢是3.5KB,這導致最多75個聯合查詢。 –

+0

你只需要重新組織你的查詢。不一定,你真的需要把所有的查詢合併爲一個 - 你可以「批量」他們 - 而不是500你可以有10個左右:o) –

+0

你有機會嘗試嗎? –

相關問題