Bigquery - превышены ресурсы во время выполнения запроса при создании бинов из таблицы 10M с помощью ROW_NUMBER () - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть таблица с примерно 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 тоже не работает.

1 Ответ

0 голосов
/ 25 апреля 2019

Предел, который у вас возникает после материализации 2 приведенных выше операторов выбора, поэтому добавление ограничения за пределы не сработает. Возможно, вам придется поместить ограничение внутри bin_groups, хотя я не уверен, будет ли оно соответствовать вашемусценарий использования.

--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
limit 100
)

select *
from bin_groups 
where bins = 1 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...