2012-09-19 16 views
7

In base al riferimento alla query Bigquery, al momento Quantiles non consente alcun tipo di raggruppamento da parte di un'altra colonna. Sono principalmente interessato a ottenere mediane raggruppate per una determinata colonna. L'unico lavoro che vedo ora è quello di generare una query quantile per membro del gruppo distinto in cui il membro del gruppo è una condizione nella clausola where.BigQuery: clausola GROUP BY per QUANTILES

Ad esempio, utilizzo la query seguente per ogni riga distinta in column-y se voglio ottenere il risultato desiderato.

SELECT QUANTILE(<column-x>, 1001) 
FROM <table> 
WHERE 
    <column-y> == <each distinct row in column-y> 
  1. fa il grande piano di query squadra di avere alcune funzionalità per consentire raggruppamento su quantili in futuro?
  2. C'è un modo migliore per ottenere quello che sto cercando di ottenere qui?

Grazie

risposta

1

Mentre ci sono algoritmi efficienti per calcolare quantili sono un po intensivo di memoria - cercando di fare più calcoli quantile in una singola query diventa costoso.

  1. Ci sono piani per migliorare QUANTILES, ma non so quale sia la linea del tempo.
  2. Hai bisogno di una mediana? Puoi filtrare i valori anomali e fare una media del resto?
+0

Sono principalmente interessato a mediane. Ma il 99 ° e 99 ° percentile sarebbe bello avere. Non riesco nemmeno a filtrare gli outlier. Quindi sembra che dovrò eseguire query separate per ottenere il risultato desiderato. Questa sarà comunque una bella funzionalità da aggiungere alla grande query in futuro. Grazie per la risposta! – msrivas

0

Se il formato per gruppo è fisso, si può essere in grado di incidere utilizzando combinazione di order, nest e nth. Per esempio, se ci sono 9 i valori distinti di f2 per valore di f1, per la mediana:

 
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 
); 

Non sono sicuro se il modo ordinato in sottoquery è garantito per sopravvivere alla seconda group, ma ha funzionato in un semplice test che provato.

6

Con la funzione finestra percentile_cont() recentemente annunciata è possibile ottenere le mediane.

guardare l'esempio nel post di annuncio del blog:

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

Ciao @ felipe-hoffa, hai un bug nel riferimento alle query https://cloud.google.com/bigquery/docs/reference/legacy-sql#percentile_cont, perché la query restituisce 1 e non 4 – tworec