BigQuery Entegrasyonu
1. Neden BigQuery?
GA4 arayüzü örneklenmiş (sampled) veriler gösterebilir ve belirli analiz türlerini desteklemez. BigQuery, ham event-level veriye doğrudan erişim sağlar.
a) BigQuery'nin Avantajları
- Ham veri erişimi: Her event, her parametre, her kullanıcı özelliği — işlenmemiş formda.
- Örnekleme yok: Milyonlarca satır üzerinde tam veri analizi.
- Özel hesaplamalar: SQL ile GA4 arayüzünde yapılamayan analizler.
- Veri birleştirme: CRM, ERP, reklam verileri ile GA4 verisini birleştirme.
- Veri saklama: GA4'ün 14 aylık sınırlaması yok — veriler kalıcı olarak BigQuery'de saklanır.
🎯 Benzetme: GA4 arayüzü bir restoranın menüsü gibidir — belirli yemeklerden (raporlardan) seçim yaparsınız. BigQuery ise restoranın mutfağıdır — tüm malzemelere (ham veriye) erişir ve istediğiniz tarifi (analizi) kendiniz yaparsınız.
2. BigQuery Bağlantısı Kurma
a) Kurulum Adımları
- GA4 Admin > Product Links > BigQuery Links
- "Link" butonuna tıklayın.
- Google Cloud projenizi seçin (yoksa oluşturun).
- Veri konumunu seçin (ör. EU veya US).
- Export türünü seçin: Daily (günlük) ve/veya Streaming (gerçek zamanlı).
- Export edilecek event'leri seçin (tümü veya belirli event'ler).
graph LR
GA4["📊 GA4"] -->|"Daily Export\n(Günlük tablo)"| BQ["🗄 BigQuery"]
GA4 -->|"Streaming Export\n(Anlık veri)"| BQ
BQ --> ANALYSIS["📈 SQL Analizi"]
BQ --> LOOKER["📊 Looker Studio"]
BQ --> DS["📋 Data Science\n(Python, R)"]
style GA4 fill:#E8F6FC,stroke:#29ABE2
style BQ fill:#DCFCE7,stroke:#22C55E
⚠️ Uyarı: BigQuery maliyeti kullanıma göre değişir. Daily export genellikle düşük maliyetlidir (ayda birkaç dolar). Streaming export ise yüksek trafikli sitelerde maliyeti önemli ölçüde artırabilir. Başlangıçta yalnızca daily export ile başlayın.
3. GA4 BigQuery Export Şeması
GA4 verileri BigQuery'de belirli bir şema (yapı) ile saklanır. Bu yapıyı anlamak SQL sorguları yazmak için zorunludur.
a) Ana Tablo Yapısı
Her gün için bir tablo oluşturulur: events_YYYYMMDD (ör. events_20250401)
| Sütun | Tür | Açıklama |
|---|---|---|
event_name | STRING | Event adı (page_view, purchase, vb.) |
event_timestamp | INTEGER | Microsecond cinsinden zaman damgası |
user_pseudo_id | STRING | Anonim kullanıcı ID |
event_params | RECORD (REPEATED) | Event parametreleri (key-value çiftleri) |
user_properties | RECORD (REPEATED) | Kullanıcı özellikleri |
items | RECORD (REPEATED) | E-ticaret ürün bilgileri |
traffic_source | RECORD | İlk edinim kaynağı |
device | RECORD | Cihaz bilgileri |
geo | RECORD | Coğrafi konum |
b) event_params Yapısı (UNNEST)
event_params iç içe (nested) bir yapıdadır. Değerlere erişmek için UNNEST fonksiyonu kullanılır:
SELECT
event_name,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location') AS page_url,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'engagement_time_msec') AS engagement_time
FROM `project.dataset.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20250301' AND '20250331'
graph TD
ROW["📄 Tek Event Satırı"] --> EN["event_name\n'purchase'"]
ROW --> EP["event_params\n(REPEATED)"]
ROW --> UP["user_properties\n(REPEATED)"]
ROW --> IT["items\n(REPEATED)"]
EP --> EP1["key: 'transaction_id'\nvalue: 'T-123'"]
EP --> EP2["key: 'value'\nvalue: 3847.80"]
EP --> EP3["key: 'currency'\nvalue: 'TRY'"]
IT --> IT1["item_id: 'SKU-A100'\nitem_name: 'Trençkot'\nprice: 1899.00"]
style ROW fill:#E8F6FC,stroke:#29ABE2
style EP fill:#DCFCE7,stroke:#22C55E
style IT fill:#FEF3C7,stroke:#F59E0B
4. Temel SQL Sorguları
a) Günlük Event Sayısı
SELECT
event_name,
COUNT(*) AS event_count
FROM `project.dataset.events_20250401`
GROUP BY event_name
ORDER BY event_count DESC
LIMIT 20;
b) Kaynak/Ortam Bazlı Dönüşümler
SELECT
traffic_source.source,
traffic_source.medium,
COUNTIF(event_name = 'purchase') AS purchases,
SUM(
(SELECT value.double_value FROM UNNEST(event_params) WHERE key = 'value')
) AS total_revenue
FROM `project.dataset.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20250301' AND '20250331'
AND event_name = 'purchase'
GROUP BY 1, 2
ORDER BY purchases DESC;
c) Benzersiz Kullanıcı Sayısı
SELECT
COUNT(DISTINCT user_pseudo_id) AS unique_users
FROM `project.dataset.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20250301' AND '20250331';
💡 İpucu: BigQuery'de
events_* ile wildcard kullanıp _TABLE_SUFFIX ile tarih filtrelemek, sorgu maliyetini önemli ölçüde azaltır. Tüm tabloyu taramak yerine yalnızca ihtiyacınız olan tarihleri sorgulayın.
