Использование QDigest в диапазоне дат - PullRequest
0 голосов
/ 08 января 2019

Мне нужно вести 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 день.

1 Ответ

0 голосов
/ 29 января 2019

Поскольку вам нужны медианы, которые агрегируются (суммируются) за несколько дней для каждого пользователя, вам нужно выполнить это агрегирование перед вставкой в ​​qdigest, чтобы это работало для 7- и 28 дней на пользователя. Другими словами, единицы данных должны быть согласованными, и если ежедневные значения вставляются в qdigest, вы не можете использовать этот qdigest для 7- или 28-дневного подсчета событий на пользователя.

...