логику связки INSERT SELECT
Я делаю следующий запрос:
`INSERT INTO params_agg_cum SELECT
user_id,
today() - 42,
max(dt),
argMaxIf(p_1, date, isNotNull(p_1)) AS p_1,
..........
argMaxIf(p_n, date, isNotNull(p_n)) AS p_n,
FROM
(
SELECT
user_id,
date,
dt,
p_1,
..........
p_n
FROM gamora.params_agg_cum
WHERE (date = ((today() - 42) - 1)) AND (user_id >= 1000000000)
UNION ALL
SELECT
user_id,
date,
dt,
p_1,
............
p_n
FROM gamora.params_agg
WHERE (date = (today() - 42)) AND (user_id >= 1000000000)
)
GROUP BY
user_id,
date
`
Параметров(p_1...p_n) у меня много, около 50
Я включил distributed_aggregation_memory_efficient и max_bytes_before_external_group_by = 10500000000
На выходе должно получиться около 240 миллионов строк
Но в память запрос не влезает .
Ограничение по памяти у меня в 70ГБ
Правда ли что перед тем как вставить, он будет весь ответ представлять в памяти?
вы же делаете group by, нет гарантии что строки для некоторого ключа уже точно не встретятся.
Обсуждают сегодня