2016-07-26 81 views
0

我有一個表,我想返回某個列的最頻繁的值。通常,使用經典的GROUP BY ... ORDER BY ... LIMIT可以做到這一點。我偶然發現了BigQuery的TOP函數,我對它感興趣,因爲文檔聲明它通常更快。但是,該文件還說,它「可能只返回近似結果」。什麼時候會發生這種情況?當需要準確的結果時,通常使用TOP函數是否值得?從documentationGoogle BigQuery的TOP函數何時會返回近似結果?

全面介紹:

TOP是一個函數,是 替代GROUP BY子句。它用作GROUP BY ... ORDER BY ... LIMIT ....的簡化語法 通常,TOP功能 的執行速度快於完整查詢的... GROUP BY ... ORDER BY ... LIMIT ... ,但可能只返回近似結果。

+0

重要的是,您可以使用投票下方發佈的答案左側的勾號標記接受的答案。請參閱http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235瞭解其重要性。答案投票也很重要。表決有用的答案。還有更多......當某人回答你的問題時,你可以查看該怎麼做 - http://stackoverflow.com/help/someone-answers。 –

+0

我知道這樣做的做法,但你的回答並不直接解決我問的問題,因此我不能接受它。我很欣賞你的時間,所以它確實值得讚賞。 –

回答

1

下面可能更適合評論 - 但過於冗長,所以我把它改成答案

到目前爲止,從我的經驗是剛剛好,以具有簡化的替代GROUP BY - 也就是說,順便說一句,僅適用於簡單情況:A query that uses the TOP() function can return only two fields: the TOP field, and the COUNT(*) value.

這就是說 - 我沒有看到計數差異,但我確實看到它運行得更快。
因此,檢查下面的比較,我用2.5B行對錶進行運行。正如你所看到的 - 數完全相同和運行時間快15%

enter image description here

enter image description here

同時,如果你將運行類似的查詢和檢查Query Plan Explanation - 你會看到完全不同的執行模式可能會導致不同的結果,但我無法捕捉到這種用例

+1

只有5個不同的元素,保持運行計數很容易:您只需要5個計數器。擁有1,000,000個不同的元素,你需要足夠的內存來存儲一百萬個不同的計數器TOP()能夠以降低內存的方式向您展示頂級元素,並以給出近似結果爲代價。這就是爲什麼TOP速度更快,爲什麼你在這裏得到確切的結果:)。 –

+0

有道理!謝謝Felipe! –