BigQuery streaming vs daily tables
The GA4 BigQuery export produces two table types: events_intraday_YYYYMMDD streaming tables that fill through the day, and events_YYYYMMDD daily tables finalized afterward. A row can appear in intraday and then again in the consolidated daily table. Querying both, or assuming intraday is complete, distorts counts. This page distinguishes streaming and daily export tables and how to query them safely.
Two table shapes, one day
When streaming export is enabled, GA4 writes events_intraday_YYYYMMDD continuously as events arrive. After the day closes, a consolidated events_YYYYMMDD daily table is produced. The intraday table is fast but provisional; the daily table is the finalized record. Both can exist for the same date during the transition.
Selecting from a wildcard that matches both prefixes therefore sums provisional and final rows for that day.
- events_intraday_YYYYMMDD: streaming, provisional, in-day
- events_YYYYMMDD: finalized after the day closes
- Both may exist for the same date briefly
Querying safely
For finalized analysis, restrict your table wildcard to events_* and exclude events_intraday_*; for near-real-time, read intraday alone and treat its totals as not yet final. Do not union the two for the same date. When the daily table appears, the intraday one for that date is removed, so a job timed across the swap can also miss or double rows.
This is distinct from intraday schema differences — here the risk is which table you read, not which columns it has.
How it appears in analytics and logs
Counts that come out high often mean a query spanned both events_intraday_ and the matching events_ daily table for the same day.
Diagnostic use case
Query the GA4 BigQuery export without double-counting by knowing when to read events_intraday_ versus the finalized events_ daily tables.
What WebmasterID can help detect
WebmasterID provides an independent first-party event count you can reconcile against either export table when validating a pipeline.
Common mistakes
- Wildcarding both events_ and events_intraday_ for one date.
- Treating intraday totals as final.
- Running jobs across the intraday-to-daily swap without guarding dates.
Privacy and accuracy notes
Export tables can contain pseudonymous identifiers and parameters; query them under your retention and consent rules. This page is educational, not legal advice.
Related pages
- Intraday vs daily export tables
The GA4 BigQuery export writes provisional intraday tables during the day and a finalised daily table afterwards. Intraday data is incomplete and can be reprocessed, and once the daily table lands the intraday one is removed. Querying both, or trusting intraday as final, causes double counts and shifting numbers. This page explains the two table types and how to query them correctly.
- BigQuery intraday table schema
GA4's events_intraday_ streaming table is not always schema-identical to the finalized events_ daily table. Some fields populated after processing — certain attribution, session, or derived columns — may be empty or absent intraday. Queries written against the daily schema can fail or return nulls against intraday. This page explains intraday schema differences so real-time queries do not silently lose fields.
- Streaming export gaps in BigQuery
GA4 offers two BigQuery export modes — continuous streaming and a once-daily batch — and they do not always agree. Streaming optimises for freshness and can omit or delay some events that the daily export later includes after fuller processing. Comparing the two for the same day reveals a gap. This page explains why streaming and daily exports differ and which to trust for a given purpose.
- Event Explorer
Cross-check export totals against first-party events.
Sources and verification notes
Last reviewed 2026-06-24. Facts are checked against primary/official sources where available; uncertain specifics are marked “Data not yet verified” rather than guessed.