1. Maak de tabel. Maak een dataset in de regio waar de data moet staan, en daarna de tabel uit het meegeleverde schema. Partitioneer op event_date en cluster op event_name: bijna elke query filtert daarop en het houdt de kosten laag.
bq --location=europe-west4 mk --dataset my-project:sgtm
bq mk --table \
--schema bigquery-event-tag-schema.json \
--time_partitioning_type DAY \
--time_partitioning_field event_date \
--clustering_fields event_name \
my-project:sgtm.events
Eigen kolommen toevoegen mag. De tag schrijft alleen wat hij kent, en BigQuery negeert velden die de tabel niet heeft. Een insert breekt er dus nooit op, maar een veld dat de tag stuurt verdwijnt stil tot de kolom bestaat.
2. Geef de container toegang. De tag schrijft onder het serviceaccount waar je container mee draait. Geef dat account BigQuery Data Editor op de dataset. Meer is niet nodig: geen queryrechten en geen Editor op projectniveau.
bq add-iam-policy-binding \
--member=serviceAccount:<runtime-sa> \
--role=roles/bigquery.dataEditor \
my-project:sgtm
3. Importeer de template. In de server-container: Templates, Tag Templates, Search Gallery, en voeg BigQuery Event Tag by New North toe. Wil je een nieuwere versie dan in de gallery staat, importeer dan template.tpl uit de repository.
4. Richt de tag in. Alleen project, dataset en tabel zijn verplicht; de rest heeft bruikbare standaardwaarden. Zet Event Name op de ingebouwde variabele {{Event Name}}, en User ID op een Event Data-variabele als je een eigen ingelogde gebruiker meestuurt. Vuur de tag op een custom trigger waar Client Name equals de naam van je GA4-client. Events die je nooit in BigQuery wilt, zoals advertentie-impressies bij hoog volume, sluit je in diezelfde trigger uit.
5. Test en publiceer. Open Preview in de server-container, klik een request aan en controleer of de tag onder Tags Fired staat. Met Log to console zie je de exacte rij. Gestreamde rijen zijn binnen seconden te bevragen:
SELECT event_timestamp, event_name, user_pseudo_id
FROM `my-project.sgtm.events`
WHERE event_date = CURRENT_DATE()
ORDER BY event_timestamp DESC
LIMIT 20
Publiceer daarna en kijk in je Cloud Run-logs of er BigQuery insert FAILED voorbijkomt. Die regel betekent dat een insert twee keer mislukte, en noemt de tabel en het event. Zet er een log-based alert op, dan weet je het voordat er een gat in je data zit.