Google Analytics 4 i BigQuery. Poglądowy przewodnik po eksporcie danych i optymalizacji kosztów
10.2024 | Google Analytics 4 | BigQuery | Optymalizacja kosztu
Google Analytics 4 (GA4) w połączeniu z BigQuery oferuje zaawansowane możliwości analizy danych, ale ta dodatkowa moc ma swój koszt w postaci opłat związanych z wykorzystaniem bazy Google BigQuery.
W tym artykule skupimy się na dostępnych typach eksportu danych oraz metodach kontroli kosztów związanych z wykorzystaniem wspomnianego BigQuery.
1. Typy eksportu danych z GA4 do BigQuery
1.1. Eksport dzienny (Daily Export)
- Dane są eksportowane raz dziennie
- Zawiera szczegółowe informacje o zdarzeniach z poprzedniego dnia
- Dane są dostępne zwykle w ciągu 24-48 godzin
- Format: tabele dzienne w schemacie
analytics_XXXXXXXX.events_YYYYMMDD
1.2. Eksport strumieniowy (Streaming Export)
- Dane są przesyłane w czasie rzeczywistym (opóźnienie kilku minut)
- Wymaga wyższego poziomu GA4 (GA4 360)
- Pozwala na szybszą reakcję na zachowania użytkowników
- Generuje większe koszty ze względu na częstsze operacje zapisu
1.3. Eksport niestandardowy (Custom Export)
- Możliwość wyboru konkretnych zdarzeń do eksportu
- Pozwala na filtrowanie danych przed eksportem
- Zmniejsza ilość przechowywanych danych
- Wymaga dokładnego planowania struktury danych
2. Limity eksportu w Google Analytics 4
2.1. Limity dla wersji darmowej GA4
- Maksymalnie 10 miliardów zdarzeń miesięcznie
- Maksymalnie 1 milion zdarzeń dziennie
- Export do BigQuery dostępny tylko dla danych z ostatnich 2 miesięcy
- Brak dostępu do eksportu strumieniowego
- Maksymalnie 50 niestandardowych wymiarów
- Maksymalnie 50 niestandardowych metryk
2.2. Limity dla GA4 360 (wersja płatna)
- Praktycznie nieograniczona liczba zdarzeń (do uzgodnienia z Google)
- Dostęp do eksportu strumieniowego
- Pełny dostęp historyczny do danych w BigQuery
- Do 100 niestandardowych wymiarów
- Do 100 niestandardowych metryk
- Priorytetowe przetwarzanie danych
2.3. Limity techniczne BigQuery dla danych GA4
- Maksymalny rozmiar pojedynczej tabeli: 3000 TB
- Maksymalna liczba kolumn w tabeli: 10,000
- Limit zapytań na projekt: 100,000 na dzień
- Maksymalny rozmiar pojedynczego rekordu: 100 MB
- Maksymalny rozmiar pojedynczego pola: 100 MB
2.4. Ograniczenia czasowe
- Opóźnienie w eksporcie dziennym: 24-48 godzin
- Opóźnienie w eksporcie strumieniowym: kilka minut
- Maksymalny okres retencji danych w GA4: 14 miesięcy
- Częstotliwość odświeżania widoków zmaterializowanych: minimum co 30 minut
3. Kontrola kosztów w BigQuery
3.1. Optymalizacja zapytań
- Używaj partycjonowania tabel według daty
SELECT *
FROM `analytics_XXXXXXXX.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20240101' AND '20240131'
- Stosuj klauzulę LIMIT podczas testowania zapytań
- Unikaj SELECT * - wybieraj tylko potrzebne kolumny
3.2. Zarządzanie danymi
- Ustaw politykę retencji danych (np. 60 dni dla danych surowych)
- Twórz agregacje dla często używanych zapytań
- Wykorzystuj materialized views dla popularnych raportów
CREATE MATERIALIZED VIEW mv_daily_users AS
SELECT
DATE(TIMESTAMP_MICROS(event_timestamp)) as event_date,
COUNT(DISTINCT user_pseudo_id) as users
FROM
`analytics_XXXXXXXX.events_*`
GROUP BY
event_date
3.3. Budżetowanie i monitorowanie
- Ustaw alerty budżetowe w Google Cloud Console
- Monitoruj użycie poprzez BigQuery Monitoring API
- Twórz dedykowane projekty dla różnych środowisk (dev/prod)
3.4. Optymalizacja kosztów przechowywania
- Wykorzystuj partycjonowanie tabel
CREATE TABLE analytics_summary.user_metrics
PARTITION BY DATE(event_date) AS
SELECT
DATE(TIMESTAMP_MICROS(event_timestamp)) as event_date,
device.category as device_category,
COUNT(*) as event_count
FROM
`analytics_XXXXXXXX.events_*`
GROUP BY
1, 2
- Stosuj kompresję danych
- Regularnie archiwizuj stare dane
4. Najlepsze praktyki
- Planowanie struktury danych
- Zdefiniuj schemat danych przed rozpoczęciem eksportu
- Ustal politykę retencji danych
- Zaplanuj agregacje i widoki materialized
- Monitoring i optymalizacja
- Regularnie przeglądaj logi zapytań
- Identyfikuj kosztowne operacje
- Optymalizuj często używane zapytania
- Automatyzacja
- Twórz automatyczne procesy czyszczenia danych
- Automatyzuj tworzenie raportów
- Implementuj automatyczne alerty kosztowe
5. Przykład kalkulacji kosztów BigQuery dla średniej wielkości serwisu
5.1. Charakterystyka przykładowego serwisu
- Lokalizacja: strefa frankfurt (europe-west3)
- Dzienna liczba zdarzeń: 700,000
- Miesięczna liczba zdarzeń: ~21,000,000
- Średni rozmiar pojedynczego zdarzenia: ~2.5 KB
- Okres przechowywania danych: 12 miesięcy
5.1.1. Kalkulacja kosztów przechowywania
=> Miesięczne przyrosty danych
- 700,000 zdarzeń × 2.5 KB = ~1.75 GB dziennie
- 1.75 GB × 30 dni = ~52.5 GB miesięcznie
- Roczne dane: ~630 GB
=> Koszty przechowywania (strefa frankfurt)
- Aktywne przechowywanie: $0.023 za GB/miesiąc
- Miesięczny koszt dla rocznych danych: 630 GB × $0.023 = $14.49
- Roczny koszt przechowywania: $14.49 × 12 = $173.88
5.1.2. Kalkulacja kosztów zapytań
=> Założenia:
- 10 standardowych raportów dziennie, każdy skanujący 30 dni danych
- 5 szczegółowych analiz tygodniowo, skanujących 90 dni danych
- 2 pełne analizy miesięczne, skanujące roczne dane
=> Dzienne raporty
- Skanowanie 30 dni = ~52.5 GB × 2 = 105 GB
- 10 raportów × 105 GB = 1,050 GB skanowanych dziennie
- Koszt: 1,050 GB × $0.0054 (cena za TB w strefie frankfurt) = $5.67 dziennie
- Miesięczny koszt: $5.67 × 30 = $170.10
=> Tygodniowe analizy
- Skanowanie 90 dni = ~52.5 GB × 3 = 157.5 GB
- 5 analiz × 157.5 GB = 787.5 GB skanowanych tygodniowo
- Koszt tygodniowy: 787.5 GB × $0.0054 = $4.25
- Miesięczny koszt: $4.25 × 4 = $17.00
=> Miesięczne pełne analizy
- Skanowanie rocznych danych = 630 GB
- 2 analizy × 630 GB = 1,260 GB
- Miesięczny koszt: 1,260 GB × $0.0054 = $6.80
5.1.3. Łączne miesięczne koszty
=> Podstawowe koszty
- Przechowywanie: $14.49
- Dzienne raporty: $170.10
- Tygodniowe analizy: $17.00
- Miesięczne analizy: $6.80
- Suma podstawowa: $208.39
=> Dodatkowe koszty i optymalizacje
- Zapytania ad-hoc (szacunkowo +15%): $31.26
- Rezerwa na nieoczekiwane analizy (+10%): $20.84
=> Suma miesięczna: ~$260.49
5.1.4. Optymalizacje kosztów dla tego przypadku
=> Redukcja kosztów przechowywania
-- Tworzenie zagregowanej tabeli dziennej
CREATE TABLE analytics_summary.daily_metrics
PARTITION BY DATE(event_date)
AS
SELECT
DATE(TIMESTAMP_MICROS(event_timestamp)) as event_date,
COUNT(DISTINCT user_pseudo_id) as users,
COUNT(*) as events,
platform as platform,
country as country
FROM
`analytics_XXXXXXXX.events_*`
GROUP BY
event_date,
platform,
country
Potencjalne oszczędności:
- Agregacja dziennych danych może zmniejszyć rozmiar przechowywania o 70-80%
- Dla zapytań agregacyjnych koszt skanowania może spaść o 90%
=> Optymalizacja kosztów zapytań
- Partycjonowanie według daty:
SELECT *
FROM `analytics_XXXXXXXX.events_*`
WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
- Materialized views dla popularnych raportów:
CREATE MATERIALIZED VIEW mv_platform_metrics
AS
SELECT
DATE(TIMESTAMP_MICROS(event_timestamp)) as event_date,
platform,
COUNT(DISTINCT user_pseudo_id) as users,
COUNT(*) as events
FROM
`analytics_XXXXXXXX.events_*`
GROUP BY
event_date,
platform
=> Szacowane oszczędności po optymalizacji
- Redukcja kosztów przechowywania: ~40% ($8.69 miesięcznie)
- Redukcja kosztów zapytań: ~50% ($96.95 miesięcznie)
- Szacowany miesięczny koszt po optymalizacji: ~$154.85
Podsumowanie
Efektywne wykorzystanie GA4 z BigQuery wymaga równowagi między dostępem do szczegółowych danych a kontrolą kosztów. Kluczowe jest zrozumienie dostępnych typów eksportu danych oraz implementacja odpowiednich strategii optymalizacji kosztów. Regularne monitorowanie i optymalizacja zapytań pozwolą na utrzymanie kosztów pod kontrolą przy jednoczesnym zachowaniu wysokiej wartości analitycznej danych.
Czy ten artykuł pomógł Tobie? Jeżeli tak, to możesz zechcesz mi postawić kawę?
- Dziękuję z góry.