2014-06-25 22 views
2

首先讓我解釋一下問題。 我有500個獨特的用戶。來自每個用戶的數據被分成更小的gzip文件(可以說平均每個用戶有25個文件)。我們已將每個拆分gzip文件作爲BiqQuery中的單獨表加載。因此,我們的數據集中有13000個表格。BigQuery最大查詢長度字符可以解決

現在,我們必須運行時間範圍查詢來從每個用戶檢索一些數據。我們有來自單個用戶的大約500-1000個不同的時間範圍。我們希望所有這些時間段與邏輯OR和AND

WHERE (timestamp >2 and timestamp <3) OR (timestamp >4 and timestamp <5) OR .............. and so on 1000 times 

合併成一個單一的查詢和運行它們的13000臺

我們自己的測試表明,BIGQUERY有10000個字符的查詢長度的限制?

如果我們將條件拆分爲多個查詢,那麼我們每天的配額限制超過20,000。

是否有解決此問題的任何方法,以便我們可以在不觸及每日配額限制的情況下運行這些查詢?

感謝

JR

回答

2

我能想到的兩件事情:

  • 嘗試減少在數據集表的數量。如果他們共享相同的模式,他們是否可以將(非規範化)組合到一個表中,或者至少有少量的表?

我已經將500000多個JSON gzip文件加載到一個表中,並且查詢更容易。

  • 有了時間戳,您可以嘗試使用更短的公分母。

例如,而不是

WHERE (timestamp > "2014-06-25:00:00:00" AND timestamp < "2014-06-26:00:00:00") 

你可以表達

WHERE LEFT(timestamp,10) = "2014-06-25" 

希望這能減少你的字符的長度上限爲好。

+1

假設您的timestamp列實際上有一個TIMESTAMP類型,那麼當您在其上運行LEFT()時會發生錯誤。改爲:WHERE DATE(timestamp)=「2014-06-25」 –

+0

謝謝我們已經在考慮減少表格。這應該肯定有效。單獨合併它們不是一種選擇,因爲數據大約爲1.5 TB。不知何故,錯過了將具有相同模式的不同文件加載到同一個大查詢表中將條目追加到行中。所以最後把所有東西都分開放在第一位。似乎不得不重新加載一切:-) – user1302884