Google bigquery BiqQuery中大数据分位数分组

Google bigquery BiqQuery中大数据分位数分组,google-bigquery,window-functions,percentile,bigquery-standard-sql,Google Bigquery,Window Functions,Percentile,Bigquery Standard Sql,我有一个包含数百万行的大型数据集,它们的值是x和y,我想得到x的不同分位数的平均值(y)。我可以这样做的一种方法是下面的代码。但是对于大型数据集rank(),它太密集了,我在BigQuery中遇到了内存使用错误 SELECT cast(100 * ord / num_rows as INT64) percentile, AVG(y) FROM ( SELECT rank() over (order by ord) ord, count(*) over ()

我有一个包含数百万行的大型数据集,它们的值是x和y,我想得到x的不同分位数的平均值(y)。我可以这样做的一种方法是下面的代码。但是对于大型数据集rank(),它太密集了,我在BigQuery中遇到了内存使用错误

SELECT 
cast(100 * ord / num_rows as INT64) percentile,
AVG(y)
FROM
(
      SELECT
      rank() over (order by ord) ord, 
      count(*) over () num_rows ,
      y
      FROM table
)
GROUP BY 1

我知道窗口函数对于大型数据集来说是昂贵的,但由于我只对低粒度的bucketized百分位数感兴趣,所以从计算上来说这应该是可能的。有没有办法在BQ中实现这一点?

一次性的答案可能是建议您从当前非常大的表中取一个均匀随机的子集,然后使用您已经使用的相同查询。那么您是否经常执行此查询?考虑将中间结果具体化。此外,根据ord的值,您可能希望使用PARTITION BY来分配数据的处理。一次性的答案可能是建议您只取当前非常大的表的一个均匀随机的子集,然后使用您已经使用的相同查询。那么您是否经常执行此查询?考虑将中间结果具体化。此外,根据ord的值,您可能希望使用PARTITION BY来分发数据处理