У меня большой набор данных из миллионов строк со значениями x и y, и я хочу получить avg (y) в разных квантилях x.Один из способов сделать это - следующий код.Но с большим набором данных 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
Я понимаю, что оконные функции дороги для больших наборов данных, но, поскольку меня интересует только процентиль с разбивкой по пакетам при малой гранулярности, в вычислительном отношении это должно быть возможно.Есть ли способ добиться этого в BQ?