.
В предыдущих сериях по clickhouse-notes мы создали:
- таблицу сырья
- таблицу распарсенных данных и матвью, её наполняющую
- матвью с подневной статистикой и вьюху над ней
.
Дополним сет, данными последней точки: последние полученные данные. Например, нам пригодится для отображения
на дашборде последних значений.
.
Варианты есть различные, мы поступим так:
- создаём таблицу с движком ReplacingMergeTree,
odm.openweathermap_last_point - чтобы хранить только последнюю запись (но не всё так просто)- создаем MV для поиска этой последней записи,
odm.openweathermap_last_point_weather_mv.
Структура таблицы:
CREATE TABLE odm.openweathermap_last_point
(
last_ts DateTime,
temp Float64,
pressure Float64,
humidity Float64,
metric String
)
ENGINE = ReplacingMergeTree(last_ts)
ORDER BY metric
SETTINGS index_granularity = 8192
-
ReplacingMergeTree(last_ts) - оставляем только последнюю запись-
ORDER BY metric - синтетическое поле, по его совпадению и "схлопываются" дубли.
Полный код таблицы и MV в репе. А пока посмотрим на возможные артефакты:
- от СClickhouse у нас есть гарантия 100% схлопывания дублей
- это может произойти в любой момент времени (хоть сразу, после вставки дубля, хоть через полдня)
.
Что в такой ситуации делать:
- нативный метод - схлопнуть дубли в момент запроса, используя ключевое слово
FINALSELECT *
FROM odm.openweathermap_last_point
FINAL
FINAL - использование может быть очень накладно, если нужно схлопнуть довольно большой объем данных (не наш случай, поэтому мы им и воспользуемся). Чтобы скрыть от пользователя особенности технической реализации необходимо создать, например, odm.openweathermap_last_point_weather_v.
Другие способы найдете в репе (сортировка и выборка 1 строки, использование
argMax).🫶 Скоро зафиналим какой-нибудь клевый дашборд
#clickhouse #mv #replacingmergetree