У меня есть таблица с примерно 10M записями, где каждая запись является идентификатором и некоторой вероятностью (в диапазоне от 0 до 1).
Все идентификаторы уникальны. Я пытаюсь разбить этот набор данных 10M на 1000 бинов - это означает, что в каждом бине будет 10k записей.
Но я хочу вычислить эти ячейки на основе вероятности, и, следовательно, сначала я расположу таблицу в порядке убывания вероятности.
и затем я пытаюсь создать ящики.
--10M dataset
with predictions as
(
select id ,probability
from table
)
-- give a rom_number to each record and then create 1000 groups
, bin_groups as (
select
id,
ceiling(1000.0*ROW_NUMBER() over(order by probability desc) / (select count(distinct id) from predictions)) as bins
from predictions
)
select *
from bin_groups
where bins = 1
limit 100
Однако при выполнении этого запроса я получаю ошибку ниже -
Resources exceeded during query execution: The query could not be executed in the allotted memory. Peak usage: 102% of limit. Top memory consumer(s): JOIN operations: 96% other/unattributed: 4%
Я читал здесь - https://cloud.google.com/bigquery/docs/best-practices-performance-output#use_a_limit_clause_with_large_sorts, что нам нужно ограничить результаты во время запросов, но похоже, что LIMIT тоже не работает.