ananas.team
§ 07·СТАТЬЯ — ARTICLE
Аналитика

GA4 в BigQuery: SQL-запросы для воронки приложения, которые реально работают

Интерфейс GA4 для app-аналитики — это боль. Семплирование на больших объёмах, лимит кардинальности, который схлопывает ваши данные в «(other)», и полное отсутствие доступа к сырым событиям. Вы смотрите на отчёт и не понимаете, это реальные цифры или модель что-то додумала.

BigQuery export решает это радикально. Вы получаете каждое событие построчно, без семплирования, без лимитов. Дальше — SQL и полная свобода. Но есть порог входа, и спотыкаются все об одно и то же.

UNNEST — без этого ничего не работает

В GA4 параметры события лежат во вложенном массиве event_params. Вы не можете просто написать WHERE page_location = '...'. Значение надо достать через UNNEST.

Базовый паттерн выглядит так: вы разворачиваете массив параметров и вытаскиваете нужный ключ.

sql

SELECT
event_name,
(SELECT value.string_value
FROM UNNEST(event_params)
WHERE key = 'page_location') AS page_location
FROM `project.dataset.events_*`
WHERE event_name = 'screen_view'

Как только вы это поняли — дальше открывается всё. Пока не поняли — никакой запрос не пишется.

Воронка регистрации одним запросом

Считаем классику: открыл приложение → начал регистрацию → завершил. На каждом шаге — сколько уникальных пользователей и какой дроп.

sql

SELECT
COUNTIF(event_name = 'app_open') AS opens,
COUNTIF(event_name = 'sign_up_start') AS starts,
COUNTIF(event_name = 'sign_up_complete') AS completes
FROM `project.dataset.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20260101' AND '20260131'

За минуту вы видите, где именно сыпется воронка. В интерфейсе GA4 это собирается дольше и с оговорками про семплирование.

Retention-когорты через DATE_DIFF

Retention — там, где интерфейс врёт чаще всего. В BigQuery считаете честно: берёте дату первого открытия как когорту, потом смотрите, кто вернулся через 1, 7, 30 дней.

Логика простая: для каждого пользователя находите первый день, потом считаете разницу в днях до каждого последующего визита через DATE_DIFF, группируете. Day 1 / Day 7 / Day 30 retention по реальным когортам, без моделей.

Атрибуция первого источника

Связываете конверсию с кампанией напрямую из traffic_source в сырых данных, минуя модели атрибуции GA4. Вы сами решаете, что считать первым касанием, а не доверяете чёрному ящику.

Зачем это вам, а не дата-инженеру

Тейк, который не понравится дата-командам: маркетологу нужно уметь писать базовый SQL по GA4 самому. Не ждать неделю, пока аналитик соберёт отчёт. Три-четыре паттерна — UNNEST, COUNTIF, DATE_DIFF — закрывают 80% повседневных вопросов. Остальное можно и делегировать. Но базу держите при себе, иначе будете слепы ровно настолько, насколько занят ваш аналитик.