2012-09-19 36 views
7

Según la referencia de consulta de bigquery, actualmente Quantiles no permite ningún tipo de agrupación por otra columna. Estoy interesado principalmente en obtener medianas agrupadas por una determinada columna. El único trabajo que veo ahora es generar una consulta de cuantil por miembro de grupo distinto donde el miembro del grupo es una condición en la cláusula where.BigQuery: cláusula GROUP BY para QUANTILES

Por ejemplo, utilizo la consulta siguiente para cada fila distinta en la columna-y si deseo obtener el resultado deseado.

SELECT QUANTILE(<column-x>, 1001) 
FROM <table> 
WHERE 
    <column-y> == <each distinct row in column-y> 
  1. ¿El gran plan de consulta en el equipo que tiene algunas funciones para permitir la agrupación de cuantiles en el futuro?
  2. ¿Hay alguna manera mejor de obtener lo que trato de obtener aquí?

Gracias

Respuesta

1

Si bien existen algoritmos eficientes para calcular cuantiles son algo de memoria intensiva - tratando de hacer varios cálculos cuantiles en una sola consulta pone caro.

  1. Hay planes para mejorar QUANTILES, pero no sé cuál es la línea de tiempo.
  2. ¿Necesitas la mediana? ¿Puedes filtrar valores atípicos y hacer un promedio del resto?
+0

estoy interesado principalmente en las medianas. Pero el percentil 99 y 99.9 sería bueno tenerlo. No puedo filtrar los valores atípicos tampoco. Por lo tanto, parece que tendré que ejecutar consultas por separado para obtener el resultado deseado. Sin embargo, esta será una buena característica para agregar a una gran consulta en el futuro. ¡Gracias por la respuesta! – msrivas

0

Si su tamaño por grupo es fijo, usted puede ser capaz de entrar ilegalmente en él mediante combinación de order, nest y nth. Por ejemplo, si hay 9 valores distintos de f2 por valor de f1, por medio de:

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

No estoy seguro si el orden de clasificación en la subconsulta está garantizado para sobrevivir a la segunda group, pero que funcionaba en una prueba simple que intentó.

6

Con la función de ventana percentile_cont() anunciada recientemente puede obtener medianas.

Mire el ejemplo en el blog anuncio:

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

Hola @ felipe-hoffa, tienes un error en la referencia de consulta https://cloud.google.com/bigquery/docs/reference/legacy-sql#percentile_cont, porque query there devuelve 1 y no 4 – tworec