{"id":10124,"date":"2026-09-27T19:12:00","date_gmt":"2026-09-27T17:12:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=10124"},"modified":"2026-10-26T11:41:35","modified_gmt":"2026-10-26T10:41:35","slug":"tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/","title":{"rendered":"Tutorial: Eksport danych z GA4 do BigQuery i pierwsze zapytanie SQL"},"content":{"rendered":"<p>BigQuery udost\u0119pnia wyeksportowane zdarzenia GA4 do w\u0142asnych analiz SQL: \u0142\u0105czenia z danymi biznesowymi, jawnego definiowania wska\u017anik\u00f3w i odtwarzania zaobserwowanych sekwencji stron. GA4 r\u00f3wnie\u017c oferuje eksploracje \u015bcie\u017cek i \u015bcie\u017cek konwersji. SQL zwi\u0119ksza kontrol\u0119 nad obliczeniami i postaci\u0105 wynik\u00f3w.<\/p>\n<p>Instrukcja zaczyna si\u0119 od eksportu dziennego, sprawdza nap\u0142yw zdarze\u0144, a nast\u0119pnie grupuje zaobserwowane ods\u0142ony wed\u0142ug identyfikator\u00f3w sesji. Przyk\u0142ady opisuj\u0105 wybrany eksport, bez gwarancji odtworzenia wszystkich rzeczywistych wizyt.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-10124-bigquery-20261024.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"Zakres eksportu, dost\u0119pne identyfikatory i ograniczenia sortowania okre\u015blaj\u0105 znaczenie odtworzonej \u015bcie\u017cki.\"><figcaption>Zakres eksportu, dost\u0119pne identyfikatory i ograniczenia sortowania okre\u015blaj\u0105 znaczenie odtworzonej \u015bcie\u017cki.<\/figcaption><\/figure>\n<h2>1. Konfiguracja eksportu dziennego<\/h2>\n<p>Po\u0142\u0105czenie powstaje w sekcji <strong>Administracja \u2192 Po\u0142\u0105czenia z us\u0142ugami \u2192 Po\u0142\u0105czenia BigQuery<\/strong>. W GA4 potrzebne s\u0105 co najmniej uprawnienia Edytora na poziomie us\u0142ugi. Projekt Cloud wymaga udokumentowanych uprawnie\u0144 IAM i uprawnie\u0144 do us\u0142ug. Rola Owner obejmuje te prawa, ale odpowiednia kombinacja w\u0119\u017cszych r\u00f3l r\u00f3wnie\u017c mo\u017ce wystarczy\u0107. Interfejs BigQuery API musi by\u0107 w\u0142\u0105czony.<\/p>\n<p>Konfiguracja obejmuje projekt Cloud, lokalizacj\u0119 danych, strumienie i wykluczone zdarzenia. W us\u0142ugach standardowych opcje Daily i Streaming s\u0105 niezale\u017cne; uprawnione us\u0142ugi Analytics 360 oferuj\u0105 tak\u017ce Fresh Daily. Daily tworzy <code>events_YYYYMMDD<\/code>, a Streaming tymczasowe tabele <code>events_intraday_YYYYMMDD<\/code>, potencjalnie z lukami. Do analizy zako\u0144czonych dni lepiej nadaje si\u0119 eksport dzienny, cho\u0107 sp\u00f3\u017anione zdarzenia mog\u0105 jeszcze zmienia\u0107 niedawne tabele.<\/p>\n<p>Po\u0142\u0105czenie nie uzupe\u0142nia wcze\u015bniejszej historii us\u0142ugi. Pierwsze dane zwykle pojawiaj\u0105 si\u0119 w ci\u0105gu 24 godzin; konkretna pora codziennej dostawy nie jest gwarantowana. Us\u0142ugi standardowe maj\u0105 limit miliona eksportowanych zdarze\u0144 dziennie. Przekroczenie mo\u017ce wstrzyma\u0107 eksport dzienny. Wykluczenie strumieni lub zdarze\u0144 zmniejsza wolumen, ale zmienia te\u017c zakres p\u00f3\u017aniejszej analizy.<\/p>\n<p>Eksport dzienny nie oznacza bezp\u0142atnego korzystania z Cloud: przechowywanie i zapytania mog\u0105 generowa\u0107 op\u0142aty, a Streaming dodatkowe koszty przesy\u0142ania. Przed pierwszym zapytaniem oszacowanie w edytorze lub dry run pokazuje przewidywane przetwarzanie. Dry run sprawdza zapytanie bez jego wykonywania. <code>maximum bytes billed<\/code> ogranicza rozliczane bajty pojedynczego zapytania w modelu on-demand. Poni\u017csze przyk\u0142ady celowo obejmuj\u0105 kr\u00f3tki okres.<\/p>\n<h2>2. R\u00f3\u017cnice wzgl\u0119dem raport\u00f3w GA4<\/h2>\n<p>Eksport zdarze\u0144 nie stosuje pr\u00f3bkowania ani nie \u0142\u0105czy wielu odr\u0119bnych warto\u015bci wymiaru w wiersz <code>(other)<\/code>. Raporty i eksploracje GA4 mog\u0105 korzysta\u0107 z r\u00f3\u017cnych tabel \u017ar\u00f3d\u0142owych; mo\u017cliwe s\u0105 pr\u00f3bkowanie, ograniczenia agregacji lub progi prywatno\u015bci. Progi dotycz\u0105 mi\u0119dzy innymi danych demograficznych i wyszukiwanych fraz. W\u0142\u0105czone sygna\u0142y Google nie wyja\u015bniaj\u0105 automatycznie ka\u017cdego brakuj\u0105cego wiersza.<\/p>\n<p>BigQuery nie odtwarza modelowania zachowania i kluczowych zdarze\u0144 ani atrybucji opartej na danych z GA4. Nie oznacza to braku wszystkich p\u00f3l atrybucji: obecny schemat zawiera mi\u0119dzy innymi zaobserwowane \u017ar\u00f3d\u0142a sesji wed\u0142ug ostatniego klikni\u0119cia, gdy takie dane s\u0105 dost\u0119pne. Przy rozbie\u017cno\u015bciach potrzebne jest por\u00f3wnanie definicji wska\u017anika, okresu, strefy czasowej us\u0142ugi, metody identyfikacji, filtr\u00f3w eksportu i aktualno\u015bci danych. R\u00f3\u017cnica nie musi oznacza\u0107 b\u0142\u0119du, ale nie powinna te\u017c by\u0107 automatycznie ignorowana.<\/p>\n<h2>3. Zagnie\u017cd\u017cony schemat danych<\/h2>\n<p>Ka\u017cdy wyeksportowany wiersz reprezentuje zdarzenie. Bezpo\u015brednie kolumny obejmuj\u0105 <code>event_name<\/code>, <code>event_date<\/code>, <code>event_timestamp<\/code> i <code>user_pseudo_id<\/code>. Dodatkowe warto\u015bci, takie jak <code>ga_session_id<\/code> i <code>page_location<\/code>, znajduj\u0105 si\u0119 w <code>event_params<\/code>, li\u015bcie nazw i odpowiadaj\u0105cych im warto\u015bci wewn\u0105trz wiersza zdarzenia. <code>UNNEST<\/code> udost\u0119pnia te rekordy, a podzapytanie skalarne zwraca jedn\u0105 warto\u015b\u0107 dla szukanej nazwy.<\/p>\n<p><code>event_date<\/code> odpowiada skonfigurowanej strefie raportowania. <code>event_timestamp<\/code> jest zapisany w mikrosekundach UTC, lecz kilka zdarze\u0144 wys\u0142anych razem mo\u017ce mie\u0107 ten sam znacznik czasu. Pola batch uzupe\u0142niaj\u0105 informacje o kolejno\u015bci. Pseudoidentyfikator oznacza instancj\u0119 aplikacji lub kontekst przegl\u0105darki, nie zweryfikowan\u0105 osob\u0119. Brakuj\u0105ce i zmieniaj\u0105ce si\u0119 identyfikatory ograniczaj\u0105 rekonstrukcj\u0119. Zapytanie grupuje wed\u0142ug osobnych p\u00f3l <code>stream_id<\/code>, pseudoidentyfikatora i identyfikatora sesji.<\/p>\n<h2>4. Potwierdzenie nap\u0142ywu zdarze\u0144<\/h2>\n<p>Identyfikator projektu, zbi\u00f3r us\u0142ugi i daty s\u0105 miejscami na rzeczywiste tabele dzienne. Zapytania wymagaj\u0105 GoogleSQL.<\/p>\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"sql\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">SQL<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-sql\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">SELECT<\/span>\n<\/span><span class=\"cbb-line\">  event_date,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-function\">COUNT<\/span>(*) <span class=\"cbb-keyword\">AS<\/span> events,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-function\">COUNT<\/span>(<span class=\"cbb-keyword\">DISTINCT<\/span> user_pseudo_id) <span class=\"cbb-keyword\">AS<\/span> distinct_pseudo_ids,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-function\">COUNTIF<\/span>(user_pseudo_id <span class=\"cbb-keyword\">IS<\/span> <span class=\"cbb-constant\">NULL<\/span>) <span class=\"cbb-keyword\">AS<\/span> events_without_pseudo_id\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">FROM<\/span> <span class=\"cbb-variable\">`project.analytics_XXXXXXXXX.events_*`<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">WHERE<\/span> _TABLE_SUFFIX <span class=\"cbb-keyword\">BETWEEN<\/span> <span class=\"cbb-string\">'20260920'<\/span> <span class=\"cbb-keyword\">AND<\/span> <span class=\"cbb-string\">'20260926'<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">GROUP<\/span> <span class=\"cbb-keyword\">BY<\/span> event_date\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">ORDER<\/span> <span class=\"cbb-keyword\">BY<\/span> event_date;<\/span><\/code><\/pre><\/figure>\n<p><code>distinct_pseudo_ids<\/code> liczy r\u00f3\u017cne niepuste identyfikatory, a nie aktywnych u\u017cytkownik\u00f3w GA4 ani unikalne osoby. Dodatkowy licznik warto\u015bci null pokazuje brakuj\u0105ce identyfikatory. Dzie\u0144 bez tabeli lub zdarze\u0144 nie tworzy wiersza wyniku; ci\u0105g\u0142y kalendarz wymaga\u0142by osobnej tabeli dat.<\/p>\n<h2>5. Budowa zaobserwowanej sekwencji stron<\/h2>\n<p>Przyk\u0142ad dla witryny korzysta z <code>page_view<\/code>. Analiza ekran\u00f3w aplikacji wymaga innego zdarzenia i odpowiedniego pola lokalizacji. Wybrane tabele musz\u0105 zawiera\u0107 pokazane pola batch z obecnego schematu.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"sql\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">SQL<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-sql\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">WITH<\/span> page_views <span class=\"cbb-keyword\">AS<\/span> (\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">SELECT<\/span>\n<\/span><span class=\"cbb-line\">    stream_id,\n<\/span><span class=\"cbb-line\">    user_pseudo_id,\n<\/span><span class=\"cbb-line\">    (<span class=\"cbb-keyword\">SELECT<\/span> value.int_value <span class=\"cbb-keyword\">FROM<\/span> <span class=\"cbb-keyword\">UNNEST<\/span>(event_params)\n<\/span><span class=\"cbb-line\">      <span class=\"cbb-keyword\">WHERE<\/span> <span class=\"cbb-keyword\">key<\/span> = <span class=\"cbb-string\">'ga_session_id'<\/span>) <span class=\"cbb-keyword\">AS<\/span> session_id,\n<\/span><span class=\"cbb-line\">    event_timestamp,\n<\/span><span class=\"cbb-line\">    batch_page_id,\n<\/span><span class=\"cbb-line\">    batch_ordering_id,\n<\/span><span class=\"cbb-line\">    batch_event_index,\n<\/span><span class=\"cbb-line\">    (<span class=\"cbb-keyword\">SELECT<\/span> value.string_value <span class=\"cbb-keyword\">FROM<\/span> <span class=\"cbb-keyword\">UNNEST<\/span>(event_params)\n<\/span><span class=\"cbb-line\">      <span class=\"cbb-keyword\">WHERE<\/span> <span class=\"cbb-keyword\">key<\/span> = <span class=\"cbb-string\">'page_location'<\/span>) <span class=\"cbb-keyword\">AS<\/span> page_location\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">FROM<\/span> <span class=\"cbb-variable\">`project.analytics_XXXXXXXXX.events_*`<\/span>\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">WHERE<\/span> _TABLE_SUFFIX <span class=\"cbb-keyword\">BETWEEN<\/span> <span class=\"cbb-string\">'20260920'<\/span> <span class=\"cbb-keyword\">AND<\/span> <span class=\"cbb-string\">'20260926'<\/span>\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">AND<\/span> event_name = <span class=\"cbb-string\">'page_view'<\/span>\n<\/span><span class=\"cbb-line\">)\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">SELECT<\/span>\n<\/span><span class=\"cbb-line\">  stream_id,\n<\/span><span class=\"cbb-line\">  user_pseudo_id,\n<\/span><span class=\"cbb-line\">  session_id,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-function\">COUNT<\/span>(*) <span class=\"cbb-keyword\">AS<\/span> page_views,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-function\">COUNTIF<\/span>(page_location <span class=\"cbb-keyword\">IS<\/span> <span class=\"cbb-constant\">NULL<\/span>) <span class=\"cbb-keyword\">AS<\/span> missing_locations,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-function\">STRING_AGG<\/span>(\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">COALESCE<\/span>(<span class=\"cbb-function\">REGEXP_REPLACE<\/span>(page_location, r<span class=\"cbb-string\">'&#91;?#&#93;.*$'<\/span>, <span class=\"cbb-string\">''<\/span>),\n<\/span><span class=\"cbb-line\">             <span class=\"cbb-string\">'&#91;missing URL&#93;'<\/span>),\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-string\">' &gt; '<\/span> <span class=\"cbb-keyword\">ORDER<\/span> <span class=\"cbb-keyword\">BY<\/span> event_timestamp, batch_page_id,\n<\/span><span class=\"cbb-line\">      batch_ordering_id, batch_event_index, page_location\n<\/span><span class=\"cbb-line\">  ) <span class=\"cbb-keyword\">AS<\/span> observed_path\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">FROM<\/span> page_views\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">WHERE<\/span> user_pseudo_id <span class=\"cbb-keyword\">IS<\/span> <span class=\"cbb-keyword\">NOT<\/span> <span class=\"cbb-constant\">NULL<\/span>\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">AND<\/span> session_id <span class=\"cbb-keyword\">IS<\/span> <span class=\"cbb-keyword\">NOT<\/span> <span class=\"cbb-constant\">NULL<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">GROUP<\/span> <span class=\"cbb-keyword\">BY<\/span> stream_id, user_pseudo_id, session_id\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">HAVING<\/span> <span class=\"cbb-function\">COUNT<\/span>(*) &gt; <span class=\"cbb-number\">1<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">ORDER<\/span> <span class=\"cbb-keyword\">BY<\/span> page_views <span class=\"cbb-keyword\">DESC<\/span>, stream_id, user_pseudo_id, session_id\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">LIMIT<\/span> <span class=\"cbb-number\">100<\/span>;<\/span><\/code><\/pre><\/figure>\n<p>Brakuj\u0105ce pseudoidentyfikatory i identyfikatory sesji s\u0105 wykluczane zamiast \u0142\u0105czenia niezwi\u0105zanych zdarze\u0144 we wsp\u00f3ln\u0105 grup\u0119 null. Brakuj\u0105ce adresy pozostaj\u0105 widoczne w liczniku i \u015bcie\u017cce. Przyk\u0142ad usuwa parametry zapytania i fragmenty, zachowuj\u0105c nazw\u0119 hosta, dzi\u0119ki czemu strony r\u00f3\u017cnych host\u00f3w nie otrzymuj\u0105 przypadkowo tej samej etykiety. Routing oparty na parametrach zapytania wymaga innej normalizacji.<\/p>\n<p>Sortowanie korzysta ze znacznik\u00f3w czasu i dost\u0119pnych p\u00f3l batch. Ko\u0144cowe pole URL rozstrzyga kolejno\u015b\u0107 wy\u015bwietlania, nie stanowi dowodu chronologii. R\u00f3wne lub brakuj\u0105ce warto\u015bci sortowania, r\u00f3wnoleg\u0142e karty i op\u00f3\u017anione przesy\u0142anie mog\u0105 pozostawi\u0107 rzeczywist\u0105 kolejno\u015b\u0107 niejednoznaczn\u0105. \u015acie\u017cka zawiera tylko zaobserwowane ods\u0142ony w wybranym okresie. Sesje przecinaj\u0105ce granice okresu mog\u0105 by\u0107 uci\u0119te, a sesje z jedn\u0105 ods\u0142on\u0105 s\u0105 celowo pomijane przez <code>HAVING<\/code>.<\/p>\n<p>Podzapytania skalarne zak\u0142adaj\u0105 najwy\u017cej jedn\u0105 warto\u015b\u0107 ka\u017cdego szukanego klucza w zdarzeniu. Powt\u00f3rzone klucze wymagaj\u0105 sprawdzenia \u017ar\u00f3d\u0142a b\u0142\u0119du; arbitralny wyb\u00f3r pierwszej warto\u015bci ukrywa\u0142by problem danych. Analiza krok\u00f3w przed zakupem wymaga dodatkowo zdarze\u0144 zakupu: obecny filtr zachowuje wy\u0142\u0105cznie ods\u0142ony.<\/p>\n<h2>6. Kontrola przed u\u017cyciem w panelu<\/h2>\n<ul><li>Sprawdzenie dziennych liczb zdarze\u0144, wykluczonych strumieni i zdarze\u0144 oraz udzia\u0142u brakuj\u0105cych identyfikator\u00f3w.<\/li><li>Por\u00f3wnanie kilku odtworzonych sesji z wierszami \u017ar\u00f3d\u0142owymi, tak\u017ce przy jednakowych znacznikach czasu i przej\u015bciu przez p\u00f3\u0142noc.<\/li><li>Por\u00f3wnanie jawnie zdefiniowanego wska\u017anika z GA4 przy jednakowych za\u0142o\u017ceniach dat i identyfikacji; oddzielenie r\u00f3\u017cnic modelowania od luk eksportu.<\/li><li>\u015awiadome ustawienie dost\u0119pu i wygasania tabel. Eksport ma osobny cykl \u017cycia poza GA4.<\/li><\/ul>\n<div class=\"lw-faq\"><h2>Pytania i odpowiedzi<\/h2>\n<h3>Czy events_* obejmuje tabele strumieniowe?<\/h3><p>Tak. Numeryczny zakres sufiksu w obu przyk\u0142adach wyklucza <code>intraday_YYYYMMDD<\/code>. Zapytanie obejmuj\u0105ce bie\u017c\u0105ce dane strumieniowe powinno wybiera\u0107 jedno \u017ar\u00f3d\u0142o tabeli na dat\u0119. Nak\u0142adaj\u0105cych si\u0119 wierszy dziennych i intraday nie nale\u017cy sumowa\u0107. Streaming pozostaje tymczasowy i nie gwarantuje kompletno\u015bci.<\/p>\n<h3>Czy LIMIT 100 ogranicza koszt zapytania?<\/h3><p>Nie w pokazanych agregacjach nad zwyk\u0142ymi, nieklastrowanymi tabelami eksportu. Limit ogranicza liczb\u0119 zwr\u00f3conych sesji po agregacji. Istotne s\u0105 wybrane kolumny, ograniczony zakres sufiks\u00f3w tabel, dry run i maximum bytes billed. BigQuery oferuje r\u00f3wnie\u017c rozliczenie pojemno\u015bci obliczeniowej, wi\u0119c nie ka\u017cda instalacja jest rozliczana bezpo\u015brednio za odczytane bajty.<\/p>\n<h3>Czy retencja GA4 usuwa tabele BigQuery?<\/h3><p>Nie. BigQuery wymaga w\u0142asnych zasad wygasania i usuwania. Zmiana domy\u015blnego czasu wyga\u015bni\u0119cia zbioru dotyczy nowo tworzonych tabel; istniej\u0105ce wymagaj\u0105 osobnych ustawie\u0144. Termin jest liczony od utworzenia tabeli, nie od wyst\u0105pienia ka\u017cdego zdarzenia.<\/p>\n<h3>Czy eksport dzia\u0142a bez konta rozliczeniowego?<\/h3><p>Eksport dzienny mo\u017ce korzysta\u0107 z piaskownicy BigQuery. Aktualna dokumentacja podaje do\u017cywotni limit 10 GiB przestrzeni, kt\u00f3rego usuwanie danych nie przywraca, 1 TiB przetwarzania zapyta\u0144 miesi\u0119cznie oraz automatyczne wygasanie po 60 dniach. Streaming jest niedost\u0119pny. Przej\u015bcie na p\u0142atne konto usuwa ograniczenia piaskownicy, ale wymaga osobnego planu koszt\u00f3w i retencji.<\/p><\/div><div class=\"lw-quellen\"><h2>\u0179r\u00f3d\u0142a<\/h2><ul><li><a href=\"https:\/\/support.google.com\/analytics\/answer\/9823238?hl=en\" target=\"_blank\" rel=\"noopener noreferrer\">Google Analytics: konfiguracja eksportu BigQuery<\/a><\/li><li><a href=\"https:\/\/support.google.com\/analytics\/answer\/9358801?hl=en\" target=\"_blank\" rel=\"noopener noreferrer\">Google Analytics: eksport BigQuery<\/a><\/li><li><a href=\"https:\/\/support.google.com\/analytics\/answer\/7029846?hl=en\" target=\"_blank\" rel=\"noopener noreferrer\">Google Analytics: schemat eksportu BigQuery<\/a><\/li><li><a href=\"https:\/\/support.google.com\/analytics\/answer\/13644080?hl=en\" target=\"_blank\" rel=\"noopener noreferrer\">Google Analytics: por\u00f3wnanie powierzchni raportowania<\/a><\/li><li><a href=\"https:\/\/support.google.com\/analytics\/answer\/9383630?hl=en\" target=\"_blank\" rel=\"noopener noreferrer\">Google Analytics: progi danych<\/a><\/li><li><a href=\"https:\/\/docs.cloud.google.com\/bigquery\/docs\/sandbox\" target=\"_blank\" rel=\"noopener noreferrer\">Google Cloud: testowanie BigQuery w piaskownicy<\/a><\/li><li><a href=\"https:\/\/docs.cloud.google.com\/bigquery\/docs\/best-practices-costs\" target=\"_blank\" rel=\"noopener noreferrer\">Google Cloud: szacowanie i kontrola koszt\u00f3w<\/a><\/li><li><a href=\"https:\/\/docs.cloud.google.com\/bigquery\/docs\/updating-datasets\" target=\"_blank\" rel=\"noopener noreferrer\">Google Cloud: zmiana w\u0142a\u015bciwo\u015bci zbioru danych<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/ga4\" target=\"_blank\" rel=\"noopener noreferrer\">Dokumentacja programistyczna Google Analytics 4<\/a><\/li><\/ul><\/div>","protected":false},"excerpt":{"rendered":"<p>Konfiguracja dziennego eksportu GA4, kontrola odebranych zdarze\u0144 i odczyt zaobserwowanych sekwencji stron w BigQuery. Brakuj\u0105ce identyfikatory i niejasna kolejno\u015b\u0107 ograniczaj\u0105 rekonstrukcj\u0119; przechowywanie i zapytania mog\u0105 generowa\u0107 koszty.<\/p>\n","protected":false},"author":1,"featured_media":29054,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[117],"tags":[92084,92100,92103,92238,92116],"class_list":["post-10124","post","type-post","status-publish","format-standard","hentry","category-tutorials-pl","tag-bigquery-pl","tag-google-analytics-4-pl","tag-google-cloud-pl","tag-tutorial-pl","tag-web-analytics-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tutorial: Eksport danych z GA4 do BigQuery i pierwsze zapytanie SQL | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"W\u0142\u0105czenie dziennego eksportu GA4 do BigQuery, zrozumienie, co interfejs robi z liczbami, i pierwsze zapytanie na zagnie\u017cd\u017conym schemacie zdarze\u0144.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: Eksport danych z GA4 do BigQuery i pierwsze zapytanie SQL | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"W\u0142\u0105czenie dziennego eksportu GA4 do BigQuery, zrozumienie, co interfejs robi z liczbami, i pierwsze zapytanie na zagnie\u017cd\u017conym schemacie zdarze\u0144.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-27T17:12:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-26T10:41:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll-10122-10124.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tutorial: Eksport danych z GA4 do BigQuery i pierwsze zapytanie SQL\",\"datePublished\":\"2026-09-27T17:12:00+00:00\",\"dateModified\":\"2026-10-26T10:41:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\\\/\"},\"wordCount\":1236,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll-10122-10124.png\",\"keywords\":[\"BigQuery\",\"Google Analytics 4\",\"Google Cloud\",\"Tutorial\",\"Web Analytics\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\\\/\",\"name\":\"Tutorial: Eksport danych z GA4 do BigQuery i pierwsze zapytanie SQL | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll-10122-10124.png\",\"datePublished\":\"2026-09-27T17:12:00+00:00\",\"dateModified\":\"2026-10-26T10:41:35+00:00\",\"description\":\"W\u0142\u0105czenie dziennego eksportu GA4 do BigQuery, zrozumienie, co interfejs robi z liczbami, i pierwsze zapytanie na zagnie\u017cd\u017conym schemacie zdarze\u0144.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll-10122-10124.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll-10122-10124.png\",\"width\":1200,\"height\":630,\"caption\":\"Tutorial: Eksport danych z GA4 do BigQuery i pierwsze zapytanie SQL\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: Eksport danych z GA4 do BigQuery i pierwsze zapytanie SQL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tutorial: Eksport danych z GA4 do BigQuery i pierwsze zapytanie SQL | Lukas Wojcik","description":"W\u0142\u0105czenie dziennego eksportu GA4 do BigQuery, zrozumienie, co interfejs robi z liczbami, i pierwsze zapytanie na zagnie\u017cd\u017conym schemacie zdarze\u0144.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: Eksport danych z GA4 do BigQuery i pierwsze zapytanie SQL | Lukas Wojcik","og_description":"W\u0142\u0105czenie dziennego eksportu GA4 do BigQuery, zrozumienie, co interfejs robi z liczbami, i pierwsze zapytanie na zagnie\u017cd\u017conym schemacie zdarze\u0144.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-27T17:12:00+00:00","article_modified_time":"2026-10-26T10:41:35+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll-10122-10124.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tutorial: Eksport danych z GA4 do BigQuery i pierwsze zapytanie SQL","datePublished":"2026-09-27T17:12:00+00:00","dateModified":"2026-10-26T10:41:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/"},"wordCount":1236,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll-10122-10124.png","keywords":["BigQuery","Google Analytics 4","Google Cloud","Tutorial","Web Analytics"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/","name":"Tutorial: Eksport danych z GA4 do BigQuery i pierwsze zapytanie SQL | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll-10122-10124.png","datePublished":"2026-09-27T17:12:00+00:00","dateModified":"2026-10-26T10:41:35+00:00","description":"W\u0142\u0105czenie dziennego eksportu GA4 do BigQuery, zrozumienie, co interfejs robi z liczbami, i pierwsze zapytanie na zagnie\u017cd\u017conym schemacie zdarze\u0144.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll-10122-10124.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll-10122-10124.png","width":1200,"height":630,"caption":"Tutorial: Eksport danych z GA4 do BigQuery i pierwsze zapytanie SQL"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-eksport-danych-z-ga4-do-bigquery-i-pierwsze-zapytanie-sql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: Eksport danych z GA4 do BigQuery i pierwsze zapytanie SQL"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10124","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=10124"}],"version-history":[{"count":8,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10124\/revisions"}],"predecessor-version":[{"id":26630,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10124\/revisions\/26630"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/29054"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=10124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=10124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=10124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}