我BigQuery中有以下字段:的BigQuery給出響應太大誤差,整個數據集,但不等同子查詢
time,a,b,c,d
time
是在ISO8601的格式,但有一個空格的字符串,a
是從1到16000的整數,其他列是字符串。該表格包含一個月的數據,每天有幾百萬條記錄。
以下查詢失敗 「的反應過大」:
select UTC_USEC_TO_DAY(PARSE_UTC_USEC(time)) as day,b,c,d,count(a),count(distinct a, 1000000)
from [myproject.mytable]
group by day,b,c,d
order by day,b,c,d asc
然而,這個查詢的工作(該數據在2012-01-01開始)
select UTC_USEC_TO_DAY(PARSE_UTC_USEC(time)) as day,
b,c,d,count(a),count(distinct a)
from [myproject.mytable]
where UTC_USEC_TO_DAY(PARSE_UTC_USEC(time)) = UTC_USEC_TO_DAY(PARSE_UTC_USEC('2012-01-01 00:00:00'))
group by day,b,c,d
order by day,b,c,d asc
這看起來像它可能與this issue有關。但是,由於group by
子句,頂級查詢等同於重複調用第二個查詢。查詢計劃員是否無法處理此問題?
編輯:
我使用我產生假的測試數據:爲了澄清我的測試數據。我最初使用了幾個字段並試圖獲得一個月的小時摘要(group by hour
,其中小時是在查詢的select
部分中使用as
定義的)。當我失敗時,我嘗試切換到每天。當失敗時,我減少了涉及的專欄。當使用count (distinct xxx, 1000000)
時,這也失敗了,但是當我剛剛做了一天的價值時它就起作用了。 (它也可以,如果我刪除1000000
參數,但因爲這確實與單日查詢工作似乎查詢規劃不分離的東西,因爲我期望的那樣。)
爲count (distinct)
的一個檢查具有基數16,000,而按列分組的基數爲2和20,總共只有1200個預期行。列值非常短,大約十個字符。
謝謝您的回答;我把我的數據放到了更多的細節上,並且我注意到了(對不起!)我沒有提到我將最大精確數提高到了不同的數。我試着按''分組',但由於其中一個分組列來自'as'('select utc_usec_to_day(time)as day'),它給了我錯誤'錯誤:查詢中使用了字段日,但是不能被發現。' – polm23
這個問題可能是記憶。當您使用count(distinct xxx,1000000)時,這意味着執行引擎必須通過結果跟蹤每個組的最多100000個條目。所以如果你有1200個預期的行,你存儲爲1。需要在計算樹的根部分配2 * 10^9個值。 –
我已經更新了我的答案,以解釋我是如何相信每個組都可以爲您工作的。 –