Przejdź do głównej treści

Jak napisać pierwsze zapytanie do danych GA4 w BigQuery

Po połączeniu Google Analytics 4 z BigQuery w Twoim magazynie codziennie pojawiają się surowe zdarzenia: każde wyświetlenie strony, kliknięcie i zapytanie ze wszystkimi parametrami. Daje to swobodę, której nie ma w panelu Analytics, ale dane mają nietypową strukturę i pierwsze zapytania często sprawiają kłopot.

Pokazuję, jak zbudowane są tabele GA4 w BigQuery, omawiam trzy pierwsze zapytania SQL — według dni, stron i źródeł — i wyjaśniam, jak nie przepłacić za przetwarzanie danych.


Ikona bazy danych w oknie przeglądarki, lista kroków i znak zapytania — instrukcja pierwszych zapytań do danych GA4 w BigQuery

Co musi być gotowe

Usługa GA4 jest połączona z projektem Google Cloud w sekcji połączeń z BigQuery w „Administracji”, a eksport działa co najmniej od doby. Pamiętaj: eksport zaczyna się w momencie połączenia, wcześniejsze dane nie pojawią się wstecz.

Jak zbudowane są dane

  • Zbiór danych nazywa się analytics_ plus numer usługi, np. analytics_123456789.
  • Eksport dzienny to tabele events_RRRRMMDD, po jednej na dzień. Jeśli włączony jest eksport strumieniowy, bieżący dzień jest w events_intraday_RRRRMMDD.
  • Jeden wiersz to jedno zdarzenie: page_view, first_visit, generate_lead i tak dalej.
  • Parametry zdarzenia — adres strony, tytuł i inne — nie są w osobnych kolumnach, tylko w zagnieżdżonej liście event_params par „klucz — wartość”. Żeby je wyciągnąć, potrzebny jest UNNEST.

Zapytanie 1. Zdarzenia i użytkownicy według dni

SELECT
  event_date,
  COUNT(*) AS events,
  COUNT(DISTINCT user_pseudo_id) AS users
FROM `twoj-projekt.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20261001' AND '20261007'
GROUP BY event_date
ORDER BY event_date;

events_* obejmuje wszystkie tabele dzienne naraz, a warunek na _TABLE_SUFFIX zostawia tylko potrzebne daty. Bez tego warunku zapytanie przeczyta całą historię i trzeba będzie za to zapłacić. Pamiętaj, że user_pseudo_id to przeglądarka lub urządzenie, a nie człowiek.

Zapytanie 2. Najczęściej oglądane strony

SELECT
  (SELECT value.string_value FROM UNNEST(event_params)
   WHERE key = 'page_location') AS page,
  COUNT(*) AS views
FROM `twoj-projekt.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20261001' AND '20261007'
  AND event_name = 'page_view'
GROUP BY page
ORDER BY views DESC
LIMIT 20;

Podzapytanie z UNNEST wyciąga z listy parametrów wartość o kluczu page_location. Tak samo wyciąga się inne parametry: page_title, page_referrer. Wartości liczbowe są w value.int_value, a nie w string_value.

Zapytanie 3. Skąd przyszli nowi użytkownicy

SELECT
  traffic_source.source AS source,
  traffic_source.medium AS medium,
  COUNT(DISTINCT user_pseudo_id) AS new_users
FROM `twoj-projekt.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20261001' AND '20261007'
  AND event_name = 'first_visit'
GROUP BY source, medium
ORDER BY new_users DESC;

Pole traffic_source przechowuje źródło pierwszej wizyty użytkownika, a nie bieżącej sesji. Do nowych użytkowników się nadaje, a do analizy sesji używa się innych pól, na przykład collected_traffic_source.

Dlaczego liczby nie zgadzają się z panelem GA4

  • Panel Analytics korzysta z modelowania i progów danych, a w BigQuery są tylko faktycznie zebrane zdarzenia.
  • Użytkownicy w BigQuery są liczeni według urządzeń i przeglądarek, a raporty GA4 mogą łączyć ich inaczej.
  • event_date jest zapisany w strefie czasowej usługi, a event_timestamp — w UTC.

Jak nie przepłacić

  • Zawsze ograniczaj daty przez _TABLE_SUFFIX.
  • Wybieraj tylko potrzebne kolumny. BigQuery nalicza opłatę za ilość odczytanych danych, a nie za liczbę wierszy w wyniku, więc LIMIT nie oszczędza, a SELECT * to najdroższe zapytanie.
  • Przed uruchomieniem sprawdź szacunek w edytorze: BigQuery pokazuje, ile danych przetworzy zapytanie.
  • Bezpłatny poziom BigQuery to 1 TB przetwarzania zapytań miesięcznie i 10 GB przechowywania. Małej stronie zwykle to wystarcza.
  • W piaskownicy BigQuery bez podłączonych płatności tabele są usuwane po 60 dniach. Do długiego przechowywania potrzebny jest projekt z kontem rozliczeniowym.
  • Standardowe usługi GA4 mają limit eksportu dziennego — milion zdarzeń na dzień; jeśli jest stale przekraczany, eksport zostaje wstrzymany.

W skrócie

  1. Jeden wiersz w tabeli to jedno zdarzenie, parametry są w zagnieżdżonym event_params.
  2. Pobieraj tabele przez events_* i zawsze filtruj _TABLE_SUFFIX.
  3. Parametry wyciąga się podzapytaniem z UNNEST.
  4. traffic_source to źródło pierwszej wizyty, nie sesji.
  5. Płacisz za odczytane dane: wybieraj tylko potrzebne kolumny.

Jeśli eksport trzeba dopiero skonfigurować albo potrzebujesz gotowych raportów na surowych danych, możemy skonfigurować eksport Google Analytics 4 do BigQuery: utworzymy projekt, połączymy go z GA4, sprawdzimy dane i ustawimy kontrolę kosztów. Wyniki zapytań wygodnie pokazać w raporcie w Data Studio.