2012-09-19 165 views
7

基於bigquery查詢引用,目前Quantiles不允許按其他列進行任何類型的分組。我主要感興趣的是中位數按特定列分組。我現在看到的唯一工作是爲每個不同的組成員生成一個分位數查詢,其中組成員是where子句中的一個條件。BigQuery:QUANTILES的GROUP BY子句

例如,如果我想獲得所需的結果,我在列-y中爲每個不同的行使用以下查詢。

SELECT QUANTILE(<column-x>, 1001) 
FROM <table> 
WHERE 
    <column-y> == <each distinct row in column-y> 
  1. 上是否有一些功能,允許在未來的位數分組的大查詢團隊計劃?
  2. 有沒有更好的方法來獲得我想要得到的東西?

感謝

回答

1

雖然有高效的算法來計算位數他們是有點佔用大量內存 - 試圖做多位數計算在一個查詢獲取昂貴。

  1. 有計劃改善QUANTILES,但我不知道時間表是什麼。
  2. 您需要中位數?你可以過濾離羣值並平均剩餘嗎?
+0

我感興趣的主要是中位數。但99th和99.9th百分點會很高興。我也無法過濾掉異常值。所以看起來我將不得不運行單獨的查詢來獲得所需的結果。這將是一個不錯的功能,可以在未來添加到大型查詢中。謝謝回覆! – msrivas

0

如果每個組的大小是固定的,你可以使用ordernestnth組合來破解它。舉例來說,如果有9個不同的f2f1值值,中位數:

 
select f1,nth(5,f2) within record from (
    select f1,nest(f2) f2 from (
    select f1, f2 from table 
    group by f1,f2 
    order by f2 
) group by f1 
); 

不知道如果在子查詢中的排序順序是保證生存的第二group,但它在一個簡單的測試,我的工作試過。

6

隨着最近公佈的percentile_cont()窗口函數,你可以得到中位數。

看在公告博客文章的例子:

http://googlecloudplatform.blogspot.com/2013/06/google-bigquery-bigger-faster-smarter-analytics-functions.html

SELECT MAX(median) AS median, room FROM (
    SELECT percentile_cont(0.5) OVER (PARTITION BY room ORDER BY data) AS median, room 
    FROM [io_sensor_data.moscone_io13] 
    WHERE sensortype='temperature' 
) 
GROUP BY room 
+0

Hi @ felipe-hoffa,您在查詢引用https://cloud.google.com/bigquery/docs/reference/legacy-sql#percentile_cont中存在錯誤,因爲查詢返回1而不是4 – tworec