Comments 2
Спасибо за статью. Пара вопросов
А что дальше делать с таблицией default.uk_price_paid_agg?
Т.е. мы её создали, заполнили, а как держать её в актуальном состоянии?
А вот так написать нельзя sumMerge(sumState(column1))?
Т.е. зачем там подзапрос?
Есть два варианта, как держать данную таблицу в актуальном состоянии, и они зависят от того, как была реализована таблица.
Вариант 1.
В случае если таблица была создана, как в статье, то тогда нужен сторонний инструмент, который будет считать стейты для функций и загружать в таблицу. Например, это может быть какая-нибудь реализация с кроном или Airflow. Т.е. в таком случае мы считаем, на примере реализации в статье, для всех полей (измерений) avgState(avg_price)
и загружаем в нашу таблицу default.uk_price_paid_agg
Вариант 2.
Если у таблицы default.uk_price_paid_agg
был бы движок AggregatingMergeTree, а не просто MergeTree, то тогда мы могли бы создать материализованное представление, которое работает как тригер на вставку данных в таблицу Источник. Для нас это была бы таблица default.uk_price_paid
.
В дальнейшем, после того как мы настроили вставку новых данных, нам достаточно вытащить нужные измерения в секцию group by
и финализировать агрегацию, в нашем случае avgMerge(avg_price)
. В результате чего мы получим корректное среднее для выбранных нами измерений
Комбинаторы в ClickHouse