2012-06-13 44 views
3

我有一個包含~20M行的數據集,我正在觀察以下行爲。當使用COUNT(DISTINCT ...)時BigQuery錯誤「響應太大而無法返回」

以下查詢返回錯誤「響應太大而無法返回」。 'id'字段在多個記錄中共享,'field'字段對每個記錄都有一些任意值。我期望結果集應該只包含10行,遠低於查詢響應限制。

SELECT id, COUNT(DISTINCT field) 
FROM [my.dataset] 
GROUP BY id 
LIMIT 10 

但是,當從COUNT聚合函數中刪除DISTINCT關鍵字時,BigQuery會按預期返回10個結果。

SELECT id, COUNT(field) 
FROM [my.dataset] 
GROUP BY id 
LIMIT 10 

我不明白爲什麼第一個查詢返回錯誤,第二個查詢成功完成。兩個查詢不應該返回相同數量的行嗎?

回答

4

這不是導致此響應的結果大小,它是由COUNT DISTINCT查詢生成的數據的中間大小。

注:COUNT DISTINCT回報統計逼近1000米後的價值觀 - 你可以通過選擇一個特定的值,其中DISTINCT將返回逼近極限..如改變近似:COUNT(DISTINCT your_field, 500)

參見:https://developers.google.com/bigquery/docs/query-reference#aggfunctions

此行爲是由於BigQuery的設計造成的,因此它非常快速:通過單獨的節點查詢數據,並在混合器中彙總結果。 COUNT會統計結果的總數併合並答案,但COUNT DISTINCT需要跟蹤潛在的數百萬個單獨的總和,然後再合併這些值。因此COUNT DISTINCT可以創建大量數據,並且可能會超出個別節點的內部最大值。

另請注意,目前,在確定整個結果集後應用BigQuery LIMIT子句。

+2

這是一個相當混亂的錯誤消息。文檔中是否有任何地方記錄了這樣的限制? – polm23

相關問題