Проектируем сессионную таблицу при помощи SQL в BigQuery

Aleksandr Osiyuk
3 min readMar 17, 2019

--

У многих компаний для более глубокой аналитики есть потребность собирать данные об использовании своих продуктов в сыром виде. В сети есть решения как собирать хиты и складывать их в BigQuery. Работать с данными об использовании продуктов можно на разных уровнях: пользователя, сессии или хита.

Чтобы работать с данными на уровне сессии, таблицу хитов нужно преобразовать в сессионную таблицу. Попробуем спроектировать сессионную таблицу с учетом 30 минут бездействия.

Возьмем таблицу с идентификатором пользователей и временем их хитов:

Добавим дополнительную колонку timestamp_lag, в которой для каждого хита запишем время предыдущего хита юзера. Добавим колонку session_start, в которой запишем 1, если предыдущего хита нет (первые хиты пользователей) и если время между текущим и предыдущим хитом 30 и более минут, в остальных случаях запишем 0. Для этого воспользуемся оконной функцией lag() и операторами TIMESTAMP_DIFF и IF:

Добавим колонку session_number, в которой кумулятивно и последовательно просуммируем значение session_start с помощью оконной функцией sum():

В результате у нас выйдет таблица, по дополнительным колонкам которой хиты можно группировать по сессиям:

timestamp_lag - время предыдущего хита пользователя,

session_start - факт начала сессии,

session_number - номер сессии пользователя.

Чтобы каждую сессию записать одной строкой, добавим дополнительные запросы, в которых сгенерируем session_id путем соединения user_id и session_number:

В результате получим таблицу с временем начала и конца сессии:

По правилам Google Analytics сессия пользователя определяется не только 30-ю минутами бездействия, но и началом нового дня и сменой источника трафика. Если планируете делать анализ с учетом источников трафика, для разрыва сессий нужно учитывать и эти условия. После чего нужно будет определить источник трафика для каждой сессии.

Если интересно увидеть полное решение, с учетом всех условий разрыва сессий, дайте знать, “похлопайте” ниже под публикацией и я расскажу об этом в другой раз.

Подписывайтесь на мой Телеграм-канал BigQuery Insights, в котором делюсь интересными решениями аналитики в Google BigQuery.

--

--