Как сделать первый запрос к данным GA4 в BigQuery
После связки Google Analytics 4 с BigQuery в вашем хранилище каждый день появляются сырые события: каждый просмотр страницы, клик и заявка со всеми параметрами. Это даёт свободу, которой нет в интерфейсе Analytics, но данные устроены непривычно, и первые запросы часто ставят в тупик.
Показываю, как устроены таблицы GA4 в BigQuery, разбираю три первых SQL-запроса — по дням, страницам и источникам — и объясняю, как не переплатить за обработку данных.

Что должно быть готово
Ресурс GA4 связан с проектом Google Cloud через раздел связей с BigQuery в «Администраторе», и экспорт работает хотя бы сутки. Учтите: выгрузка начинается с момента связки, прошлые данные задним числом не появятся.
Как устроены данные
- Набор данных называется
analytics_плюс номер ресурса, напримерanalytics_123456789. - Ежедневная выгрузка — это таблицы
events_ГГГГММДД, по одной на день. Если включена потоковая выгрузка, текущий день лежит вevents_intraday_ГГГГММДД. - Одна строка — одно событие:
page_view,first_visit,generate_leadи так далее. - Параметры события — адрес страницы, заголовок и другие — лежат не в отдельных колонках, а во вложенном списке
event_paramsиз пар «ключ — значение». Чтобы их достать, нуженUNNEST.
Запрос 1. События и пользователи по дням
SELECT event_date, COUNT(*) AS events, COUNT(DISTINCT user_pseudo_id) AS users FROM `ваш-проект.analytics_123456789.events_*` WHERE _TABLE_SUFFIX BETWEEN '20261001' AND '20261007' GROUP BY event_date ORDER BY event_date;
events_* берёт все дневные таблицы сразу, а условие по _TABLE_SUFFIX оставляет только нужные даты. Без этого условия запрос прочитает всю историю, и за это придётся заплатить. Учтите, что user_pseudo_id — это браузер или устройство, а не человек.
Запрос 2. Самые просматриваемые страницы
SELECT (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location') AS page, COUNT(*) AS views FROM `ваш-проект.analytics_123456789.events_*` WHERE _TABLE_SUFFIX BETWEEN '20261001' AND '20261007' AND event_name = 'page_view' GROUP BY page ORDER BY views DESC LIMIT 20;
Подзапрос с UNNEST достаёт из списка параметров значение с ключом page_location. Так же достаются и другие параметры: page_title, page_referrer. Числовые значения лежат в value.int_value, а не в string_value.
Запрос 3. Откуда пришли новые пользователи
SELECT traffic_source.source AS source, traffic_source.medium AS medium, COUNT(DISTINCT user_pseudo_id) AS new_users FROM `ваш-проект.analytics_123456789.events_*` WHERE _TABLE_SUFFIX BETWEEN '20261001' AND '20261007' AND event_name = 'first_visit' GROUP BY source, medium ORDER BY new_users DESC;
Поле traffic_source хранит источник первого визита пользователя, а не текущего сеанса. Для новых пользователей оно подходит, а для анализа сеансов используют другие поля, например collected_traffic_source.
Почему цифры не совпадают с интерфейсом GA4
- Интерфейс Analytics использует моделирование и пороги данных, а в BigQuery лежат только фактически собранные события.
- Пользователи в BigQuery считаются по устройствам и браузерам, а отчёты GA4 могут объединять их иначе.
event_dateзаписан в часовом поясе ресурса, аevent_timestamp— в UTC.
Как не переплатить
- Всегда ограничивайте даты через
_TABLE_SUFFIX. - Выбирайте только нужные колонки. BigQuery берёт плату за объём прочитанных данных, а не за число строк в результате, поэтому
LIMITне экономит, аSELECT *— самый дорогой запрос. - Перед запуском смотрите оценку в редакторе: BigQuery показывает, сколько данных обработает запрос.
- Бесплатный уровень BigQuery — 1 ТБ обработки запросов в месяц и 10 ГБ хранения. Небольшому сайту этого обычно хватает.
- В песочнице BigQuery без подключённой оплаты таблицы удаляются через 60 дней. Для долгого хранения нужен проект с платёжным аккаунтом.
- У стандартных ресурсов GA4 ежедневная выгрузка ограничена миллионом событий в день; если лимит постоянно превышается, выгрузка приостанавливается.
Коротко
- Одна строка в таблице — одно событие, параметры — во вложенном
event_params. - Берите таблицы через
events_*и всегда фильтруйте_TABLE_SUFFIX. - Параметры достаются подзапросом с
UNNEST. traffic_source— источник первого визита, не сеанса.- Платите за прочитанные данные: выбирайте только нужные колонки.
Если выгрузку ещё предстоит настроить или нужны готовые отчёты на сырых данных, мы можем настроить выгрузку Google Analytics 4 в BigQuery: создадим проект, свяжем его с GA4, проверим данные и настроим контроль расходов. Результаты запросов удобно выводить в отчёт в Data Studio.