首页 文章

BigQuery:QUANTILES的GROUP BY子句

提问于
浏览
8

根据bigquery查询引用,目前Quantiles不允许通过其他列进行任何类型的分组 . 我主要对获得 medians grouped by a certain column 感兴趣 . 我现在看到的唯一工作是为每个不同的组成员生成一个分位数查询,其中组成员是where子句中的条件 .

例如,如果我想获得所需的结果,我会对列-y中的每个不同行使用以下查询 .

SELECT QUANTILE( <column-x>, 1001)
FROM <table>
WHERE 
    <column-y> == <each distinct row in column-y>
  • 大型查询团队是否计划在未来允许对分位数进行分组的某些功能?

  • 有没有更好的方法来获得我想要的东西?

谢谢

3 回答

  • 6

    虽然存在有效的算法来计算分位数,但它们在某种程度上是内存密集型的 - 尝试在单个查询中进行多个分位数计算变得昂贵 .

    • 有计划改进QUANTILES,但我不知道时间轴是什么 .

    • 你需要中位数吗?你能过滤异常值并做其余的平均值吗?

  • 1

    通过最近公布的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

    如果您的每组大小是固定的,您可以使用 ordernestnth 的组合来破解它 . 例如,如果 f1 的每个值有9个不同的 f2 值,则为中位数:

    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 中存活,但它在我尝试的简单测试中起作用 .

相关问题