我有一个庞大的数据集,其中包含数百万行的值x和y,并希望获得x的不同分位数的avg(y)。我可以做到的一种方法是以下代码。但是,使用大型数据集rank()时,它过于密集,并且BigQuery中出现内存使用错误。
SELECT
cast(100 * ord / num_rows as INT64) percentile,
AVG(y)
FROM
(
SELECT
rank() over order by ord,
count(*) over () num_rows ,
y
)
GROUP BY 1
FROM table
我知道窗口函数对于大型数据集来说是昂贵的,但是由于我只对低粒度的存储桶百分位数感兴趣,因此在计算上这应该是可能的。有没有办法在BQ中实现这一目标?