Как подключить GA4 к BigQuery
Пошаговое подключение Google Analytics 4 к BigQuery: бесплатный tier (10 GB + 1 TB), BigQuery Links, схема таблиц events_*, streaming vs daily export и первый SQL-запрос.
Содержание
GA4 BigQuery Export — это встроенная функция Google Analytics 4, которая отправляет сырые данные о каждом событии в Google BigQuery. Вместо сводных отчётов интерфейса GA4 вы получаете доступ к каждому hit-у: какой пользователь, какое событие, какие параметры, какая сессия. Подключение занимает 10-15 минут и доступно бесплатно в рамках бесплатного tier BigQuery (10 GB хранения + 1 TB запросов).
Эта статья — пошаговая инструкция: от создания GCP-проекта до первого SQL-запроса. Плюс объяснение схемы таблиц, разница между daily и streaming export, и типичные ошибки.
Зачем подключать GA4 к BigQuery
Стандартные отчёты GA4 — это агрегаты. Вы видите «1200 сессий», но не можете узнать, какая именно последовательность действий привела к покупке у конкретного сегмента. BigQuery Export разблокирует:
- Сырые данные без семплирования. GA4 семплирует в отчётах при больших объёмах трафика. BigQuery — нет: вы анализируете 100% событий.
- Нелинейные воронки. В GA4 воронки — линейные и фиксированные. В SQL можно построить любую последовательность и разрешить «пропуски» между шагами.
- Объединение с другими источниками. JOIN GA4-событий с таблицей CRM-заказов, рекламными расходами или складом товаров — в GA4-интерфейсе это невозможно.
- Бесконечный горизонт данных. Стандартный GA4 хранит данные 2 или 14 месяцев в зависимости от настроек. BigQuery-копия хранится столько, сколько вы хотите.
- Собственная атрибуция. Написать собственную модель атрибуции на SQL — реально. В GA4 выбор ограничен встроенными моделями.
Типичный кейс: интернет-магазин хочет понять, какие категории просматривает пользователь до первой покупки. В GA4-интерфейсе — невозможно. В BigQuery — один JOIN и GROUP BY.
BigQuery бесплатный tier: сколько реально
У Google BigQuery есть бесплатный уровень (free tier), который действует в любом проекте — в том числе и в том, где подключён биллинг:
| Ресурс | Бесплатно в месяц |
|---|---|
| Хранение активных данных | 10 GB |
| Хранение долгосрочных данных | 10 GB |
| Обработка запросов (queries) | 1 TB |
Что это означает на практике:
- Сайт с 500k событий в месяц генерирует примерно 2-4 GB данных GA4. Вписывается в 10 GB бесплатно.
- 1 TB обработки — это очень много для SQL-запросов по нескольким месяцам. Если использовать партиционирование (фильтр по дате), реальное потребление будет в 10-50x меньше максимума.
- Streaming export (realtime) — НЕ входит в бесплатный уровень. Стоит ~$0.05 за 200 MB вставленных данных.
Sandbox vs биллинг. «BigQuery Sandbox» — это режим БЕЗ подключённого биллинга (с авто-удалением таблиц примерно через 60 дней). GA4-экспорт требует включить биллинг (привязать карту) → как только вы это сделали, проект уже НЕ sandbox, но лимиты 10 GB / 1 TB остаются бесплатными. То есть платёжная карта нужна, однако в пределах бесплатного tier вы ничего не платите.
Практический вывод: для большинства проектов до 2-3 млн событий в месяц BigQuery можно использовать бесплатно. Платить начинаете, когда либо превышаете storage/query quota, либо включаете streaming.
Подготовка: что нужно перед подключением
Перед тем как идти в GA4 → BigQuery Links, подготовьте:
- Google Cloud Platform (GCP) проект. Если нет — создайте на console.cloud.google.com. Один GCP-проект может обслуживать несколько GA4-свойств.
- Активированный Billing. GA4 BigQuery Links не активируются без подключённого платёжного метода. Привязав карту, вы выходите из режима sandbox, но в пределах бесплатного tier (10 GB / 1 TB) реальных расходов не будет — карту нужно привязать именно как условие экспорта.
- Включённый BigQuery API. GCP → APIs & Services → Enable APIs → BigQuery API. Обычно включается автоматически при первом использовании, но лучше проверить.
- Права в GA4. Нужна роль Editor или Administrator на уровне GA4-свойства. Viewer не сможет создать BigQuery Link.
- Определить регион BigQuery (Location). США (US) или Евросоюз (EU) — выбирается один раз при создании датасета и не меняется. Если аудитория преимущественно в ЕС и есть GDPR-ограничения — выбирайте EU.
Пошаговое подключение BigQuery Links
Шаг 1. Открыть BigQuery Links в GA4
- Зайдите в Google Analytics 4 → Admin (шестерёнка внизу слева).
- В столбце Property найдите секцию Product Links.
- Нажмите BigQuery Links.
- Кликните Link (кнопка вверху справа).
Шаг 2. Выбрать GCP-проект
- В диалоге нажмите Choose a BigQuery project.
- Появится список проектов, к которым у вашего Google-аккаунта есть доступ.
- Выберите нужный GCP-проект.
- Нажмите Confirm.
Если проект не появляется — проверьте, что аккаунт GA4 и GCP-проект привязаны к одному Google-аккаунту, или что у вас есть IAM-роль BigQuery Admin или BigQuery Data Editor в этом проекте.
Шаг 3. Настроить параметры экспорта
На этом шаге два ключевых параметра:
BigQuery dataset location (регион)
Выбирайте между US и EU. Для европейских сайтов с GDPR-требованиями — EU. Смена региона требует удаления датасета и повторного подключения, поэтому выбирайте осознанно.
Export type (тип экспорта)
| Тип | Частота | Стоимость | Когда использовать |
|---|---|---|---|
| Daily | 1 раз в день (на следующий день) | Бесплатно (free tier) | Ретроспективный анализ, воронки, когорты |
| Streaming | Почти реальное время (2-3 ч задержка) | ~$0.05 / 200 MB | Операционные дашборды, алерты |
Рекомендую начинать с Daily. Если нужен realtime — включить streaming можно позже.
Включить/выключить конкретные типы событий
По умолчанию GA4 отправляет все события. Можно исключить отдельные типы, если они не нужны — например технические события __t или debug-события. Для начала оставляйте всё включённым.
Шаг 4. Подтвердить и сохранить
Просмотрите настройки и нажмите Submit. GA4 автоматически:
- Создаст датасет в вашем BigQuery-проекте (название по умолчанию —
analytics_<PROPERTY_ID>). - Предоставит своему сервисному аккаунту права BigQuery Data Editor на этот датасет.
- Начнёт первый daily export на следующий день (данные за текущий день в UTC).
Первая таблица появится на следующий день после подключения — это нормально. Events за сегодня попадут в BigQuery завтра утром.
Шаг 5. Проверить подключение
Через 24-48 часов после подключения:
- Откройте console.cloud.google.com/bigquery.
- В левом дереве выберите ваш проект → датасет
analytics_<PROPERTY_ID>. - Вы увидите таблицы вида
events_20260624(одна таблица на один день).
Если таблиц нет через 48 часов — перейдите к разделу «Типичные ошибки» ниже.
Схема таблиц events_*
Каждая таблица events_YYYYMMDD содержит одну строку на одно событие. Основные поля:
events_20260624
├── event_date STRING '20260624'
├── event_timestamp INTEGER микросекунды UTC (1719187200000000)
├── event_name STRING 'page_view', 'purchase', 'click'
├── event_params RECORD (REPEATED) — массив пар key/value
│ ├── key STRING 'page_location', 'session_id', 'value'
│ └── value RECORD
│ ├── string_value STRING
│ ├── int_value INTEGER
│ ├── float_value FLOAT
│ └── double_value FLOAT
├── user_pseudo_id STRING анонимный идентификатор (~client_id)
├── user_id STRING если User-ID настроен
├── user_properties RECORD (REPEATED) — аналогично event_params
├── user_first_touch_timestamp INTEGER
├── device RECORD
│ ├── category STRING 'mobile', 'desktop', 'tablet'
│ ├── operating_system STRING
│ ├── browser STRING
│ └── language STRING
├── geo RECORD
│ ├── country STRING 'Ukraine'
│ ├── region STRING
│ └── city STRING
├── traffic_source RECORD
│ ├── source STRING 'google'
│ ├── medium STRING 'organic'
│ └── name STRING название кампании
└── ecommerce RECORD — заполнено для e-commerce событий
├── transaction_id STRING
├── total_item_quantity INTEGER
└── purchase_revenue FLOAT
Важная деталь: event_params — это массив (REPEATED RECORD). Чтобы получить конкретный параметр, нужен UNNEST.
Daily export vs Streaming export: что выбрать
Daily export
Данные за день UTC появляются следующим утром. Google запускает загрузку между 0:00 и 8:00 UTC.
- Таблица за день:
events_20260624 - Также есть
events_intraday_20260624— частичный снимок текущего дня (обновляется несколько раз, после окончания дня удаляется и заменяется финальной таблицей). - Бесплатно в рамках бесплатного tier BigQuery (10 GB / 1 TB).
- Достаточно для 95% аналитических задач.
Streaming export
События попадают в BigQuery с задержкой ~2-3 часа.
- Таблица остаётся той же (
events_YYYYMMDD), строки добавляются непрерывно. - Стоимость: ~$0.05 за 200 MB (Google считает как $0.05/GB, где 1 GB = 200 MB экспортированных данных) — ставка фиксированная, не зависит от региона.
- Для сайта со 100k событий в день — примерно $1-5 в месяц.
- Полезно если нужен realtime-дашборд или алерты на аномалии трафика.
Вывод: если конкретной задачи с realtime нет — используйте Daily. Streaming можно включить позже.
Первый SQL-запрос в BigQuery
Откройте BigQuery → ваш датасет → Query (или кнопка + → New query).
Количество событий по типу за последнюю неделю
SELECT
event_name,
COUNT(*) AS event_count
FROM `your-project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN
FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY))
AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
GROUP BY event_name
ORDER BY event_count DESC
LIMIT 20;
Замените your-project.analytics_123456789 на ваш project ID и dataset ID (видно в дереве слева).
_TABLE_SUFFIX — специальный псевдоним для суффикса шардированных таблиц. Фильтр BETWEEN ограничивает сканирование только нужными днями и экономит TB quota.
Извлечь URL страниц из page_view
SELECT
event_date,
(SELECT value.string_value
FROM UNNEST(event_params) WHERE key = 'page_location') AS page_url,
COUNT(*) AS pageviews
FROM `your-project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
AND event_name = 'page_view'
GROUP BY event_date, page_url
ORDER BY pageviews DESC
LIMIT 50;
UNNEST(event_params) разворачивает массив параметров в строки, WHERE key = 'page_location' выбирает нужный ключ.
Воронка от просмотра товара до покупки
WITH funnel AS (
SELECT
user_pseudo_id,
MAX(IF(event_name = 'view_item', 1, 0)) AS viewed_item,
MAX(IF(event_name = 'add_to_cart', 1, 0)) AS added_to_cart,
MAX(IF(event_name = 'purchase', 1, 0)) AS purchased
FROM `your-project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20260601' AND '20260623'
GROUP BY user_pseudo_id
)
SELECT
COUNT(*) AS total_users,
SUM(viewed_item) AS step1_view_item,
SUM(added_to_cart) AS step2_add_to_cart,
SUM(purchased) AS step3_purchase,
ROUND(SUM(added_to_cart) / SUM(viewed_item) * 100, 1) AS pct_view_to_cart,
ROUND(SUM(purchased) / SUM(added_to_cart) * 100, 1) AS pct_cart_to_purchase
FROM funnel
WHERE viewed_item = 1;
Этот запрос показывает воронку за произвольный диапазон дат без семплирования — именно то, чего нельзя сделать в GA4-интерфейсе.
Ограничения GA4 BigQuery Export
Не всё идеально. Важные ограничения:
Нет данных за прошлые даты. BigQuery Export начинает собирать данные с дня подключения. Ретроспективные данные за прошлые месяцы не передаются (Universal Analytics мог экспортировать backfill, GA4 — нет).
Thresholding — только в отчётах, не в экспорте. Распространённое заблуждение: data thresholding GA4 применяется к интерфейсу отчётов и исследований (Explorations) и API, а НЕ к таблицам
events_*в BigQuery. Raw export отдаёт необработанные события — без трешолдинга, без семплирования (именно поэтому это 100% событий, см. выше). Реальное ограничение приватности в экспорте — это отдельные вещи на уровне данных пользователя (удаление по запросу user-data deletion, передача consent-сигналов), а не сокрытие строк по порогу «~1000 событий».Задержка daily export. Таблица за вчера приходит сегодня утром — с задержкой 12-36 часов после UTC-полуночи. Не подходит для realtime-отчётности без streaming.
Лимиты бесплатного tier. 10 GB storage и 1 TB queries в месяц. При больших сайтах (10M+ событий/месяц) нужен платный тариф.
Один BigQuery Location навсегда. EU или US — выбирается при создании датасета и не меняется. Переподключение с новым датасетом означает потерю накопленной history.
BigQuery Data Deletion необратима. Если случайно удалите таблицу без Time Travel backup (по умолчанию 7 дней) — данные не восстановить.
Типичные ошибки при подключении
«Permission denied» при создании Link. Нужна роль Editor в GA4-свойстве, не просто Viewer. Проверьте Admin → Property → Property Access Management.
Billing не активирован — Link не создаётся. GA4 BigQuery Export требует привязанную платёжную карту (sandbox без биллинга для него не подходит). GCP → Billing → Link a billing account.
BigQuery API выключен. GCP → APIs & Services → Enable APIs → BigQuery API. Симптом: ошибка «Service has not been used in this project» при попытке подключения.
Неправильный Location. Выбрали US вместо EU или наоборот — и данные нельзя переместить. Решение: удалить датасет, переподключить с правильным регионом (данные за прошлые дни при этом теряются).
Данных нет первый день. Первый daily export приходит на следующий день — это нормальное поведение. Если нет через 48 часов — проверьте сервисный аккаунт и IAM-права.
Фильтр
_TABLE_SUFFIXне применён — большой счёт. ЗапросFROM events_*безWHERE _TABLE_SUFFIXсканирует все таблицы (всю history). Всегда добавляйте фильтр по датам.UNNEST без WHERE по ключу возвращает все параметры.
FROM UNNEST(event_params)безWHERE key = '...'даёт строку на каждый параметр — то есть умножает количество строк в 10-20 раз. Всегда добавляйтеWHERE key = 'название_параметра'или используйте subquery.Streaming включён случайно. Если не нужен realtime — проверьте настройки Link и выключите. Иначе начинаете платить за каждый MB трафика.
Что дальше после подключения
После того как данные есть в BigQuery:
- Подключите Looker Studio (ранее Google Data Studio) к BigQuery-датасету — можно строить визуальные дашборды без SQL.
- Настройте scheduled queries — автоматические SQL-запросы по расписанию, результаты сохраняются в отдельную таблицу-агрегат. Например ежедневный rollup по каналам трафика.
- Используйте GA4 BigQuery вместе с другими источниками — JOIN с рекламными расходами (Google Ads через Data Transfer), CRM-данными или таблицами товаров.
Подробнее о настройке самой GA4-свойства — GA4 Setup Checklist и полное руководство по GA4. Если GA4 ещё не отправляет нужные события — сначала настройте dataLayer и GTM.
Связанные материалы
Похожие статьи
Google Analytics 4 (GA4): полное руководство — event-модель, отличия от UA, настройка, отчёты
Что такое Google Analytics 4, чем GA4 отличается от Universal Analytics, как работает event-based модель данных, ключевые метрики (engagement rate, key events), 5 шагов настройки, ограничения.
Google analyticsGoogle Analytics 4 (GA4): что это, как настроить с нуля и чем отличается от Universal Analytics
Полное руководство по GA4 для начинающих: что такое Google Analytics 4, отличия от Universal Analytics, как настроить ресурс с нуля, события, конверсии, интеграция с Google Ads.
ChecklistsНастройка Google Analytics 4: чек-лист (69 пунктов)
Полная настройка GA4: 69 пунктов от KPI и Consent Mode v2 до server-side GTM, BigQuery и predictive audiences. Со схемами кода и путями в интерфейсе.