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.

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 wevents_intraday_RRRRMMDD. - Jeden wiersz to jedno zdarzenie:
page_view,first_visit,generate_leadi tak dalej. - Parametry zdarzenia — adres strony, tytuł i inne — nie są w osobnych kolumnach, tylko w zagnieżdżonej liście
event_paramspar „klucz — wartość”. Żeby je wyciągnąć, potrzebny jestUNNEST.
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_datejest zapisany w strefie czasowej usługi, aevent_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
LIMITnie oszczędza, aSELECT *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
- Jeden wiersz w tabeli to jedno zdarzenie, parametry są w zagnieżdżonym
event_params. - Pobieraj tabele przez
events_*i zawsze filtruj_TABLE_SUFFIX. - Parametry wyciąga się podzapytaniem z
UNNEST. traffic_sourceto źródło pierwszej wizyty, nie sesji.- 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.