2012-09-19 25 views
7

bigqueryクエリリファレンスに基づいて、現在Quantileでは別の列によるグループ化を許可していません。私は、の中央値を特定の列でグループ化することに主に関心を持っています。私が今見ている唯一の解決策は、グループメンバーがwhere句の条件である別個のグループメンバーごとに分位問合せを生成することです。BigQuery:QUANTILESのGROUP BY句

たとえば、希望の結果を得たい場合は、column-yのすべての個別の行に対して以下のクエリを使用します。

SELECT QUANTILE(<column-x>, 1001) 
FROM <table> 
WHERE 
    <column-y> == <each distinct row in column-y> 
  1. 将来の分位数にグループ化できるようにするいくつかの機能を持つに大きなクエリチームの計画をしていますか?
  2. 私がここにしようとしているものを得る良い方法はありますか?

おかげ

答えて

1

彼らはややメモリ集約されている分位数を計算するための効率的なアルゴリズムがありますが - 単一のクエリで複数の分位数の計算をしようと高価な取得します。

  1. QUANTILESを改善する予定はありますが、タイムラインの内容はわかりません。
  2. 中央値が必要ですか?外れ値をフィルタリングし、残りの平均を行うことはできますか?
+0

私は中央値で主に興味があります。しかし99パーセンタイルと99.9パーセンタイルの方がいいでしょう。私は異常値も除外できません。だから、私は望む結果を得るために別々のクエリを実行しなければならないようです。しかし、これは将来的に大きなクエリに追加する素晴らしい機能になります。返信いただきありがとうございます! – msrivas

0

あなたのグループごとのサイズが固定されている場合は、ordernestnthの組み合わせを使用して、それをハックすることができるかもしれません。例えば、f1の値ごとf2の9つの別個の値は中央値のために、そこにあれば、次のとおりです。

 
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生き残るためには保証が、それは簡単なテストIで働いている場合試しました。

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

こんにちは@ felipe-hoffa、クエリのリファレンスがhttps://cloud.google.com/bigquery/docs/reference/legacy-sql#percentile_contにある – tworec

関連する問題