ecem.fyi
Back to blogData Engineering

Controlling BigQuery Costs on the GA4 Raw Export

·8 min read

The raw GA4 export lands one table per day, nested and repeated to the point that a naive SELECT * over a month of data can scan more bytes than the rest of your warehouse combined.

Start with partition and cluster pruning

SELECT event_name, COUNT(*) AS events
FROM `project.analytics_123456.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20260301' AND '20260331'
GROUP BY event_name
ORDER BY events DESC

Filtering on _TABLE_SUFFIX instead of a derived date column is the single biggest cost lever available on this dataset — it decides which daily tables even get scanned.

Materialize the flattened views you actually query

Most dashboards need three or four denormalized event tables (sessions, ecommerce items, conversions), not the raw nested export. A scheduled query that flattens event_params and items once a day turns a multi-terabyte scan into a multi-gigabyte one for every query after it.