Skip to main content

Insights

Measured Opinions

The latest news, provocative views and some handy how-tos from the world of data, analytics, cloud and AI.

Browse the archive

234 results · Page 1 of 13

How to make an AI agent accurate in BigQuery

A year ago, I wrote about getting a BigQuery warehouse ready for AI ( Easy ways to prepare your BigQuery warehouse for AI) , but didn't look properly into Knowledge Catalog (known as Dataplex at the time). We decided to go back and look through Google's Knowledge Catalog properly: what's actually in there, how it works and what it relates to. What Knowledge Catalog is Knowledge Catalog is Google's metadata layer for BigQuery data (and a few other sources). It sits alongside your tables rather

Katie Kaczmarek-

What's actually in Google's Knowledge Catalog

Google's Knowledge Catalog has been renamed four times. Data Catalog, then Dataplex Catalog, then BigQuery universal catalog, then Dataplex Universal Catalog, and now Knowledge Catalog, as of 10 April 2026. The API, gcloud and IAM roles still all say "dataplex". If you land on a page that mentions Dataplex and wonder whether you're reading something out of date, you're probably not. That's just the product's fifth name in four years. I spent some time looking through the different sections of K

Katie Kaczmarek-

BigQuery Tips: When your query is technically correct but BigQuery won't run it

There is a particular kind of frustration that comes from staring at a query you know is correct and watching it fail. No syntax error. No logic problem. Just a wall. We hit two of them on the same project. What we were building The job was to migrate ga4_daily_snapshot for a large enterprise client from a BigQuery scheduled query into a proper Dataform pipeline. The scheduled query had been added to over time until it was too large to maintain with any confidence. Moving it to Dataform w

Katie Kaczmarek-

BigQuery Tips: The subquery in your WHERE clause that's scanning your entire table

There is a pattern that appears in a lot of BigQuery pipelines and looks completely reasonable. You have a control table that stores the latest processed date. Rather than hardcoding a date into your query, you pull it dynamically: SELECT * FROM `project.dataset.events` WHERE event_date = ( SELECT latest FROM `project.dataset.control_table` ); The query returns the right results. The logic is clean. And if your events table is large and date-partitioned, you might be scanning the entire

Katie Kaczmarek-

BigQuery Tips: Arrays in BigQuery - what they are and how to get data out of them

If you have ever opened a GA4 export in BigQuery for the first time and found yourself looking at a column called event_params that seemed to contain an entire table inside each row, this post is for you. Arrays are not trying to make your life harder. Once you understand why they exist and what to do with them, they stop being intimidating. Why BigQuery uses arrays GA4 tracks events. Each event can have many parameters. A purchase event might have a transaction ID, a value, a currency an

Katie Kaczmarek-

BigQuery Tips: How to put a spend cap on your BigQuery queries

At some point, most BigQuery users run a query they instantly regret. A missing WHERE clause on a table that turned out to be enormous. A JOIN that multiplied rows in a way nobody intended. A curiosity query on an unfamiliar dataset that scanned several terabytes before you could cancel it. By the time the query finishes you already know something went wrong. And you don't find out the cost until the billing report lands. There is a setting in BigQuery that sits between you writing a query a

Katie Kaczmarek-

BigQuery Tips: Why LAST_VALUE keeps returning the wrong result

Say you want to find the entry page and exit page for every session in your events table. The natural query writes itself: SELECT CONCAT(ga_session_id, '-', user_pseudo_id) AS session_key, event_timestamp, page_path, FIRST_VALUE(page_path) OVER ( PARTITION BY CONCAT(ga_session_id, '-', user_pseudo_id) ORDER BY event_timestamp ) AS entry_page, LAST_VALUE(page_path) OVER ( PARTITION BY CONCAT(ga_session_id, '-', user_pseudo_id) ORDER BY event_timestamp ) AS exit_pag

Katie Kaczmarek-

Whose stack is it anyway?

Google's running two in parallel - Marketing and Cloud. You'll likely still be using both for the next few years. So here's how to work with them and make them your own. Three Google announcement events recently - Cloud Next in April, I/O on May 19-20, Google Marketing Live on May 20. The Marketing Live keynote actually overlapped with the second day of I/O, which struck me as not accidental - Gemini is running under all of it. And, in doing so, rebuilding your measurement stack. What Google

Mark Rochefort-

Siloed data, central intelligence

Someone in your organisation has already connected an AI agent to a live data source. Probably several people have. They've pointed Claude at HubSpot, asked it to pull numbers from Google Analytics, had it read a Jira board or reconcile figures across two systems. The data never moved. Nobody waited for a pipeline. Nobody asked the data team. They did this because it was easy. And people will always go where the friction is least. This is happening everywhere, across every function, in organis

Matthew Hooson-

What we learned building AI agents for clients (and ourselves)

From internal experiments to client-facing data products Eighteen months ago, we started building AI agents internally. Not as a product play - as a way to stop doing repetitive work. Documentation, QA checklists, data validation. The kind of tasks that every analytics consultancy does hundreds of times a year and nobody enjoys. That experiment became our first internal AI assistant. And what we learned building it changed how we think about data products for clients. Here's what we know now

Mark Rochefort-

What is a semantic layer and why your AI agents need one

Companion piece to Measure Pod #139 with Colin Zima and #98 with David Jayatillake Your warehouse is full of tables. Your agents can query them. The question is whether they'll get the same answer. Ask three different agents "what's our monthly revenue?" and you'll get three different numbers. Not because the data is wrong - because nobody defined what "revenue" means in a way machines can consistently resolve. Is it gross or net? Recognised or invoiced? Including refunds or not? Each agent ma

Mark Rochefort-

What 70% more data actually means for your ad performance

Server-side GTM is usually sold on technical grounds. Better data quality. Reduced client-side load. Privacy compliance. All true, all important, and all completely abstract to the person signing off the budget. Here's what they actually want to know: what does it do for my numbers? We can answer that. When we deployed server-side GTM for Unily, they recovered 70% of previously lost session data. That's not a rounding error. That's a step change in what you can see, what you can attribute, and

Mark Rochefort-