для заполнения мат.вью с агрегациями такого вида:
INSERT INTO fr_core.core_f_sale_rest_day_mv
SELECT
day_id,
art_id,
argMaxState(art_code, updated_dt) AS art_code,
argMaxState(art_name, updated_dt) AS art_name,
whs_id,
argMaxState(whs_code, updated_dt) AS whs_code,
argMaxState(whs_name, updated_dt) AS whs_name,
argMaxState(whs_reload, updated_dt) AS whs_reload,
argMaxState(sale_qnty, updated_dt) AS sale_qnty,
argMaxState(sale_cp, updated_dt) AS sale_cp,
argMaxState(rest_qnty, updated_dt) AS rest_qnty,
argMaxState(rest_cp, updated_dt) AS rest_cp,
argMaxState(created_dt, updated_dt) AS created_dt,
maxState(updated_dt) AS max_updated_dt
FROM fr_core.core_f_sale_rest_day_rlc
GROUP BY day_id, whs_id, art_id
Сама идея использования взята отсюда (с 23й минуты): https://www.youtube.com/watch?v=j15dvPGzhyE
Есть настройка которая group by делает с использованием хранилища
Поиграйте с настройками: settings max_bytes_before_external_group_by = 2000000000, max_memory_usage = 35000000000, max_threads = 8, aggregation_memory_efficient_merge_threads = 1 2000000000 - не потреблять больше 2 гигов на этапе сбора 35000000000 - макс. объем допустимой памяти для итогового сбора (35 гигов) max_threads - количество потоков aggregation_memory_efficient_merge_threads - 1 - из документации - "It sets number of threads to do merging of intermediate results. Zero value means - automatically determine number of threads by number of CPU cores. To efficiently merge intermediate data, it is split by 256 buckets (partitions), and all data for each bucket is merged at one step."
та просто через null таблицу, не надо никаких groupby в insert
спасибо. сейчас буду пробовать. у CH столько настроек, что нужен отдельный гайд по ним
Вам @ den_crane предложил еще более крутой вариант )
я и его попробую. тестирую что-как. Спасибо
Обсуждают сегодня