Мне нужно вести 28-дневную историю для некоторых данных панели. По сути, у меня есть событие / действие, которое записывается через нашу систему BI. Я хочу подсчитать количество событий и отдельных пользователей, которые проводят это событие за последние 1, 7 и 28 дней. Я также использую наборы группировки (куб), чтобы получить полностью сегментированные данные по стране / браузеру / платформе и т. Д.
Старый способ состоял в том, чтобы сохранить 28-дневную историю на пользователя для всех сегментов. Таким образом, если бы пользователь заходил на сайт с мобильного и настольного компьютера каждый день в течение всех 28 дней, он имел бы 54 строки в БД. В итоге получается большая таблица, и она занимает много времени даже для вычисления приблизительного значения и не различается. Но проблема в том, что я также хочу рассчитать приблизительные значения.
Итак, я начал исследовать пользователя HyperLogLog https://prestodb.io/docs/current/functions/hyperloglog.html
Это прекрасно работает, гораздо эффективнее хранить эскизы ежедневно, а не весь список уникальных пользователей в день. Так как я использую ок_дистинкт, значения достаточно близки, и это работает.
Затем я заметил похожую функцию для медиан. Qdigest.
https://prestodb.io/docs/current/functions/qdigest.html
К сожалению, документация на этой странице не так хороша, как на предыдущих страницах, поэтому мне потребовалось некоторое время, чтобы понять это. Это прекрасно работает для расчета ежедневных медиан. Но это не работает, если я хочу рассчитать медианные действия на пользователя за более длительный период времени. Примеры в HyperLogLog демонстрируют, как вычислять пользователей ок_счетом за период времени, но документы Qdigest не дают такого примера.
Результаты, которые я получаю, когда я что-то пробую в примере с HLL для диапазонов дат с помощью Qdigest, получают результаты, аналогичные результатам за 1 день.