<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Data Analytics</title><link>https://cloud.google.com/blog/products/data-analytics/</link><description>Data Analytics</description><atom:link href="https://cloudblog.withgoogle.com/blog/products/data-analytics/rss/" rel="self"></atom:link><language>en</language><lastBuildDate>Thu, 06 Aug 2026 18:26:03 +0000</lastBuildDate><image><url>https://cloud.google.com/blog/products/data-analytics/static/blog/images/google.a51985becaa6.png</url><title>Data Analytics</title><link>https://cloud.google.com/blog/products/data-analytics/</link></image><item><title>Agentic Future Ready With BigQuery: Continually Improving Price-Performance, Zero Effort</title><link>https://cloud.google.com/blog/products/data-analytics/bigquery-performance-optimizations/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;In the modern data landscape, query performance tuning and managing system price-performance is challenging, especially as the number of agentic workloads increase. Even for experienced developers and DBAs, constantly analyzing query execution plans, tweaking schemas, and adding query hints with ever exploding volume, variety, and velocity of data is a never-ending cycle that drains business velocity. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;While performance tuning is a common practice, a modern data platform should do more. As data platforms evolve from systems of intelligence to systems of action, and analytics workloads shift from humans running a few queries per day to countless agents running many thousands of queries per minute, the old way of manual query tuning doesn’t work. When queries are generated by agents and applications automatically based on user actions, manual optimization becomes practically impossible. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;BigQuery has evolved from a data warehouse to the primary engine for the Agentic AI era. Building on a unique, truly disaggregated storage and compute architecture, serverless processing, and fine grained compute management, BigQuery continues to push the boundaries of autonomous query processing. Our North Star is an autonomous query processor powering both humans and agents for hands-free optimum price-performance regardless of query, schema, data, or workloads. Just in 2025, we delivered up to 35% better query performance and as much as 40% reduction in query processing costs (slot usage). &lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/Figure_1_-_Last12MonthsOfPerfImprovements.max-1000x1000.png"
        
          alt="Figure_1 - Last12MonthsOfPerfImprovements"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="uamdh"&gt;Figure 1. Summary of BigQuery price-performance improvements throughout 2025 based on industry standard benchmarks.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The following are some of the major innovations contributing to these improvements in performance and total cost of ownership (TCO), including the built-in guardrails against regression.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;BigQuery’s Self-Learning Engine: History-Based Optimizations (HBO)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;One of the foundational capabilities of BigQuery’s autonomous query processor is &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/history-based-optimizations"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;history-based optimizations. &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Traditional query optimizers rely on static statistics, metadata and cardinality estimates, which can be wildly inaccurate when faced with highly complex, multi-table joins and rapidly growing/changing data. Managing these is part of the critical path for administrators and automation has to be tailored to individual workloads to be effective and efficient. Even when everything is up-to-date and correct, queries can still have vastly different behavior due to natural data skew or changes in available compute resources. History-based optimizations change the paradigm: in addition to BigQuery’s already adaptive query execution that can change plans and resource allocations while a query is running, &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;it learns from past executions and automatically applies additional optimizations for future executions.&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;It tracks runtime statistics of past queries to "remember" which optimizations were beneficial and continue to apply them, and learn from prior mistakes to ensure they are not repeated. When the same or similar query runs again, BigQuery automatically applies any additional optimization technique that is known to be beneficial and avoids those that can cause regressions.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;No User Action Required &amp;amp; Built-in Safety Guardrails&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;History-based optimizations require no application rewrites, SQL modifications, or schema changes. Users literally do nothing, and their recurring dashboards, ELT pipelines, agentic workloads, or line of business modules run faster.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Crucially, this is a self-maintaining, self-improving closed-loop system with built-in safety guardrails. History-based optimizations only apply an optimization when there is high confidence it will improve performance. &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;What if an optimization makes the wrong decision?&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; This capability is inherently self-correcting. When an optimization is applied, the system measures the result. If the expected improvement is observed, the optimization is accepted. If it does not significantly improve performance—or worse, regresses or leads to failure—the optimization is immediately rejected, revoked, and never tried again for that query. This includes detecting data skew so queries that have parameter sensitive plans do not run into major performance issues when just a single parameter (aka WHERE clause) is changed. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The result? A decrease in execution times and a reduction of slots.  One enterprise customer reported P90 execution times drop by up to 50%, with slot usage falling by up to 15% resulting in substantial price-performance improvements and no regressions.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/Figure_2_-_HBO.max-1000x1000.png"
        
          alt="Figure_2 - HBO"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="uamdh"&gt;Figure 2. One example of History Based Optimization performance improvement reported by an enterprise customer.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Teaching the BigQuery execution engine newer tricks: Advanced runtime&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;BigQuery’s autonomous capabilities extend deep into the execution layer with &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/advanced-runtime"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery advanced runtime&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. This engine upgrade automatically determines the best physical execution path for a query without any manual knob-turning.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;1. Enhanced vectorization&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;While vectorized execution is not a new concept, BigQuery enhanced its implementation by taking advantage of the newer processor efficiencies in Single Instruction Multiple Data (SIMD) instructions. The engine autonomously identifies opportunities to avoid duplicate computations, processing data in dictionary and run-length encodings natively. It couples with state-of-the-art parallel algorithms and is applied at eligible query stages to increase the opportunities for acceleration. The Impact: Fully automated, safely accelerating qualifying queries by up to 10x, yielding up to a 40% overall slot time reduction.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/Figure_3_-_AR-EV.max-1000x1000.png"
        
          alt="Figure_3 - AR-EV"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="uamdh"&gt;Figure 3. Advanced runtime - Enhanced vectorization&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;2. Short query optimizations&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;For high-concurrency and low latency BI dashboards or agentic applications generating thousands of queries that require sub-second latency, distributed processing overhead can be a bottleneck. BigQuery now autonomously accelerates eligible "short" queries without impacting other queries running concurrently. By reducing the number of stages hence reducing data shuffling, BigQuery improves overall query latency and resource efficiency. BigQuery has effectively implemented an efficient symmetric multi-processing (SMP) query path transparently within a scalable massively parallel processing (MPP), distributed databases. The Impact&lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;:&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; up to 10x lower slot usage for short queries, with P99 sub-second query latencies. Because each query uses slots for shorter periods, we observed some customer workloads having up to 3x higher throughput—all completely transparent to the end-user.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/Figure_4_AR-SQO_GGNgpTD.max-1000x1000.png"
        
          alt="Figure_4_AR-SQO"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="uamdh"&gt;Figure 4. Advanced runtime - Short query optimizations&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Same Benefits Regardless of Data Formats&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We believe you shouldn't have to sacrifice autonomous performance when adopting open lakehouse architectures using open table formats like Apache Iceberg. BigQuery performance improvements work the same regardless of the underlying table or data format. That means you still get the same benefits whether you’re using BigQuery’s native &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/bigquery/inside-capacitor-bigquerys-next-generation-columnar-storage-format"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;capacitor storage format&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; or Iceberg tables where the underlying data is in parquet format.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Whether it’s automatically pushing down filters, employing &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/data-analytics/understanding-the-bigquery--column-metadata-cmeta-index/"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Column Metadata Index (CMETA&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;) pruning, and optimizing the I/O layer with page skipping and asynchronous read or employing the same enhanced vectorization, open formats benefit from the same hands-free acceleration as native tables. &lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/Figure_5_-_OSS-comp.max-1000x1000.png"
        
          alt="Figure_5 - OSS-comp"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="uamdh"&gt;Figure 5. BigQuery on Lakehouse Iceberg tables performance and costs tested internally against a popular open source, distributed SQL query engine using a benchmark derived from TPC-DS (10TB)&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Fluid Scaling: The True Only-Pay-For-What-You-Use Autoscaler&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Because BigQuery’s compute models are tied directly to slot-seconds consumed rather than a slice of nodes or clusters, autonomous performance gains can translate directly to cost savings. &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/slots#slot-autoscaling"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery autoscaler&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; enhanced with fluid scaling enables you to run any mix of highly variable workloads with a premier autoscaling model that does not require a cost-and-performance trade-off. Fluid scaling in BigQuery enables true per-second billing for compute resources (slots) consumed and lowers costs by up to 34% on average for autoscaling workloads.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/Figure_6_-FluidScaling_stating_vw77BjY.gif"
        
          alt="Figure_6 -FluidScaling_stating"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="uamdh"&gt;Figure 6. Fluid scaling enhanced autoscaler&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;On the price-performance benefits of fluid scaling, Chen Shalit, the CEO and Co-Founder at RISE, a leading AdTech company that processes 1 PB+ data per day and manages 3 trillion+ monthly bids across publishers and advertisers, summed it best&lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;. “In the high-stakes world of advertising, every cent counts. BigQuery’s Fluid Scaling has reduced our infrastructure cost by 25% allowing us to scale our slot consumption and accelerate our entire workflow. By delivering faster model results and increasing our hourly data processing throughput, we’re providing our customers with the 'freshest' data possible.”&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;The foundation for the agentic future&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;These autonomous capabilities are not just about making today's business intelligence dashboards and analytics queries run faster; they are foundational to the future of modern data platforms. As organizations rapidly deploy AI and machine learning, they are shifting toward agentic workloads.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;AI agents do not interact with data the way humans do. Their query latency and concurrency (QPS) requirements are orders of magnitude more demanding than what human users generate—which is the limit of what most traditional analytics platforms were designed for. When autonomous agents are firing off thousands of distinct queries per second to make real-time decisions, human-in-the-loop query tuning is simply impossible.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;BigQuery's differentiated abilities in a self-tuning and self-learning system include built-in safety guardrails against regression.  With this standard of autonomy, you can spend your time and effort where it truly matters: delivering the best experiences for your users with advanced agentic applications, rather than wasting critical engineering cycles on manual infrastructure management, reactive query optimization, or trying to rein in spiraling compute costs.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;BigQuery’s aggregate TCO impact: Faster and more cost-effective price-performance&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;When you combine a self-learning history-based optimizer with an auto-scaling advanced runtime engine supported by a highly scalable metadata platform (CMETA), you can see real impact on performance and total cost of ownership (TCO).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Our goal is for BigQuery to automatically and safely optimize queries without user action so our users can “&lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;just come in to work and BigQuery is faster than it was the day before."&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;You no longer need to worry about data skew or stale statistics causing performance regressions. No more trying to figure out which plan guide works best for which queries at what time of the day or month. No more hoping you won’t run out of budget because there aren’t enough low priced spot instances. Just focus on your organization’s goals, and your BigQuery data platform can deliver optimized price-performance for both agent and human workloads autonomously; it just works.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Learn more about BigQuery’s data and AI capabilities and &lt;/span&gt;&lt;a href="https://cloud.google.com/bigquery"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;get started with a free trial&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. &lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Thu, 06 Aug 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/data-analytics/bigquery-performance-optimizations/</guid><category>Data Analytics</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Agentic Future Ready With BigQuery: Continually Improving Price-Performance, Zero Effort</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/products/data-analytics/bigquery-performance-optimizations/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Joe Yong</name><title>Product Manager</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Manan Goel</name><title>Group Product Manager</title><department></department><company></company></author></item><item><title>Solving the "Noisy Neighbor": How Sharded Architecture Protects Multi-Tenant Platforms</title><link>https://cloud.google.com/blog/products/data-analytics/solving-the-noisy-neighbor-with-sharded-architecture/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Whether you are a multi-tenant SaaS provider, a large enterprise managing internal data platforms, or a company handling mixed-workload data processing, managing a shared infrastructure environment means facing a common threat: the 'noisy neighbor'. A single tenant with a massive data burst or a failing database instance can bring down the entire neighborhood, manifesting as significant backlog accumulation and global Service Level Agreement (SLA) violations across critical data pipelines&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Here is how to transition from a monolithic architecture to a sharded hub-and-spoke pattern to ensure platform resilience.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;The problem: The monolithic bottleneck&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;A typical legacy architecture processes data for all tenants and business domains through a single, massive stream. Because the pipeline is unified, a performance issue with one specific database tenant instance creates back pressure that degrades performance for every other tenant on the platform.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Painful effects:&lt;/span&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;100% Blast radius: One database failure can stop all processing.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;Inefficient scaling: Resources often have to be scaled for the "worst-case" tenant, leading to significant wasted spend.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;SLA instability: Maintaining a global SLA is nearly impossible when one high-volume tenant can lag the entire system.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;The solution: sharded hub-and-spoke architecture&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To solve this, processing is decoupled into a "hub" for routing and "spokes" for isolated execution.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/1_AstMUiw.max-1000x1000.png"
        
          alt="1"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;1. The hub: The router pipeline&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The Hub is a lightweight Dataflow job that acts as a traffic controller. It reads from unified source topics, parses the Tenant ID or Business Domain, and fans the data out into isolated buffers. This keeps the entry point simple and robust.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;2. The buffer: Durable isolation&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://cloud.google.com/pubsub"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Pub/Sub&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; topics are introduced between the Hub and the Spokes. These act as a durable shock absorber, preventing a slow downstream sink from backing up the original source.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;3. The spokes: Isolated execution&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Instead of one giant pipeline, multiple, smaller &lt;/span&gt;&lt;a href="https://cloud.google.com/products/dataflow"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Dataflow&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; instances are deployed and categorized by workload:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;Tier 1 (high-priority): Dedicated pipelines with high resource allocation for critical tenants.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;Shared tiers: Grouped pipelines for smaller tenants to optimize costs.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;Domain specific: Specialized pipelines for complex logic (e.g., separating distinct business domains) to isolate code complexity.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;Comparative Benefits at a Glance&lt;/strong&gt;&lt;/h2&gt;
&lt;div align="left"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;&lt;table&gt;&lt;colgroup&gt;&lt;col/&gt;&lt;col/&gt;&lt;col/&gt;&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Feature&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Monolithic (legacy)&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Hub-and-spoke&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Fault tolerance&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;One failing DB stops everything&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Failures isolated to specific spoke&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Blast radius&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;100%&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;&amp;lt; 5% (Isolated to one spoke)&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Resource scaling&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Scaled for "worst-case"&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Independent scaling per tenant load&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Maintenance&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Global updates affect everyone&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Update one domain without touching others&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;Pro-Tips for Implementation&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Moving to this architecture is more than just shifting boxes on a diagram. Additional "Spoke" level optimizations are recommended for maximum stability:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;Implement Dead Letter Queues (DLQ): Do not let a single SQL exception stall the pipeline. Route failed records to storage (like BigQuery or Google Cloud Storage) for later investigation.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;Strict connection pooling: Databases have connection limits. Use a thread-safe singleton pattern and set a low MaximumPoolSize (e.g., 1-2) per worker to avoid exhausting the database during autoscaling.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;Asynchronous I/O: Use the GroupIntoBatches transform to buffer writes, which reduces the connection overhead that often triggers database-induced latency.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;By adopting a sharded approach, platforms can guarantee that a "noisy neighbor" is no longer a threat to the neighborhood. This architecture provides the isolation needed to maintain strict SLAs while allowing for independent scaling and safer deployments&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To learn more about implementing a sharded hub-and-spoke architecture, explore the &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/dataflow/docs"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Dataflow documentation&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Wed, 05 Aug 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/data-analytics/solving-the-noisy-neighbor-with-sharded-architecture/</guid><category>Data Analytics</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Solving the "Noisy Neighbor": How Sharded Architecture Protects Multi-Tenant Platforms</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/products/data-analytics/solving-the-noisy-neighbor-with-sharded-architecture/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Sri Harshini Donthineni</name><title>Cloud Data Engineer, Google Cloud</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Abdullateef Abdulsalam</name><title>Cloud Data Consultant, Google Cloud</title><department></department><company></company></author></item><item><title>How Target is enhancing retail discovery and cutting database maintenance by 50% with Spanner Graph</title><link>https://cloud.google.com/blog/topics/retail/how-target-rebuilt-retail-discovery-with-spanner-graph/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;In today’s retail environment, shoppers expect highly personalized product discovery experiences and conversational assistance that feels genuine, natural, and genuinely helpful. Today, successful product discovery is about understanding semantic meaning and the rich, connected relationships between products, categories, and guest intent. It is no longer just about keywords and basic browsing. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;At Target, this work is handled by our Guest Product Confidence platform team. They are responsible for building the features that establish trust and guide purchasing decisions, such as ratings, reviews, and AI-driven digital shopping assistants. An exciting example of this is our&lt;/span&gt; &lt;a href="https://www.target.com/gift-finder" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Gift Finder chat agent&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, which we launched during the 2025 holiday season online and in the Target app to help shoppers discover the perfect items through friendly, conversational dialogue.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To deliver real-time personalization and context-rich semantic responses like these at global scale, we identified a critical architectural need to move away from a fragmented data ecosystem toward a unified data platform. We needed a solution capable of supporting high-throughput transactional workloads, highly connected graph relationships, vector similarity search, and full-text keyword search all at once. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;In this post, we’ll explore how we achieved all four with Spanner.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Overcoming fragmented architecture&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Previously, Target’s discovery data ecosystem relied on a combination of Elasticsearch clusters for search and inverted indexes, alongside separate NoSQL datastores for our transactional data. While functional, this fragmented architecture presented significant operational and technical challenges.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Disconnected context: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;Keeping separate search, vector, and transactional databases in perfect sync was a constant challenge. Siloed information led to missing context, disconnected attribute relationships, and inconsistent query results.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;High operational overhead: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;Managing independent clusters, tuning search indexes, and handling complex, custom synchronization and aggregation logic required intensive manual intervention from our engineering teams.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Expansion bottlenecks:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Expanding our retail data domains required adding new database collections, maintaining complex joins, and navigating weak transactional guarantees across our discovery and core transactional systems.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Siloed intelligence:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; We lacked the ability to query graph relationships, vector similarity, and keyword search indexes in a single transaction.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To build the next generation of AI-driven guest experiences, we needed to consolidate on one platform.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Building the enterprise ontology on Spanner Graph&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We evaluated multiple specialized technologies, including standalone vector databases and niche graph databases. However, adding more single-purpose databases would have only worsened our operational complexity and data synchronization pipelines.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We ultimately chose&lt;/span&gt; &lt;a href="https://docs.cloud.google.com/spanner/docs/graph/overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Spanner Graph&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; to build our enterprise ontology, which is a "graph-of-graphs" paradigm that allows us to construct a massive, generative AI-powered shopping graph.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;By unifying our data, we bring semantic data, graph relationships, vector embeddings, and operational transactions under one roof. This establishes Spanner as our single authoritative source of truth for both transactional state and semantic intelligence.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Our high-level architecture now consists of three core pillars:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;1. Enterprise augmentation&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;This layer captures our enterprise retail catalog, aggregates relevant metadata from multiple backend sources, and utilizes generative AI for agentic data enrichment to dramatically improve the quality and depth of the product data we ingest.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;2. Unified graph, vector, and search store&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;br/&gt;&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;Instead of shifting data across multiple databases, Spanner Graph stores our entity nodes, relationship edges, and vector embeddings in the same database engine. Spanner Graph natively supports multi-hop graph traversals, semantic vector similarity, and full-text keyword queries over our relational tables. Because this multi-model synergy is native, we get strict ACID transactions for absolute correctness across distributed workloads without the need for fragile external sync pipelines.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;3. Orchestration and AI layer&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;This layer powers our conversational guest interfaces, utilizing rich, structured context fed directly from Spanner Graph to ground our LLMs. It extracts highly specific product relationships to power tools like the &lt;/span&gt;&lt;a href="https://www.target.com/gift-finder" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Gift Finder&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; while governing responsible AI processes and evaluating generated outputs.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;A smooth, zero-downtime incremental migration&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Transitioning critical search and discovery infrastructure that millions of guests rely on required a cautious, zero-downtime approach. We executed this migration in four structured phases.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Schema and ontology mapping:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; We defined the specific retail entities, such as products, categories, brands, and guest preferences, and their corresponding relationships within the Spanner Graph schema.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Data integration and parallel replay:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; We built mutation-based data integrations in a parallel pipeline. This allowed us to continuously replay live transactional updates, apply schema transformations, generate embeddings, and write them directly into Spanner Graph in real-time.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Canary deployment:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; We gradually shifted live read traffic to the new Spanner Graph-backed platform, validating query performance, semantic accuracy, and database stability under real retail workloads.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Cutover and cleanup:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Once performance was thoroughly verified, we fully transitioned all search and discovery traffic to Spanner and deprecated our legacy Elasticsearch stack, entirely removing the maintenance burden of those clusters.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Business impact&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;By building directly on Spanner Graph, we unlocked measurable technical and business outcomes:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;The ultimate GraphRAG foundation:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Traditional RAG relies on flat vector similarity, which often misses the structured associations between products, such as matching a toy with its compatible accessories or age-appropriateness. By combining deep graph traversals with semantic vector search in a unified GraphRAG architecture, we grounded our LLMs with highly precise context. This directly improved our recommendation relevancy, enhanced guest satisfaction, and boosted our Net Promoter Score.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Consolidated SQL + GQL interoperability:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; With Spanner Graph, our developers query structured relational catalog data and connected graph relationships in a single query using standard SQL and GQL (Graph Query Language). This eliminates the need for data duplication, latency, or complex ETL pipelines to bridge these paradigms.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Serverless scalability with zero growth ceiling:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Spanner automatically handled massive, unpredictable traffic spikes during peak retail events like Black Friday and Cyber Monday. Spanner's built-in autoscaler dynamically adjusted computing capacity to handle burst traffic during high-intensity, limited-time promotional offers without sacrificing performance.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;50% reduction in infrastructure maintenance: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;By consolidating our transactional NoSQL and search index databases into a single managed Google Cloud service, we eliminated the operational burden of maintaining separate database clusters. Our developers now spend 50% less time on database administration and infrastructure upkeep, allowing us to build and deploy new, customer-facing AI features much faster.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Migrating to Spanner Graph has accelerated our generative AI roadmap, serving as the ultimate proof of what is possible when you build on&lt;/span&gt; &lt;a href="https://cloud.google.com/transform/shift-system-of-action-architecting-the-agentic-data-cloud-AI"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;the right data foundation&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;Want to supercharge your AI apps? It starts with databases with the right graph capabilities at virtually unlimited scale. Discover how Spanner Graph can &lt;/span&gt;&lt;a href="https://cloud.google.com/products/spanner/graph"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;turn data into action&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;for your organization.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Tue, 04 Aug 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/topics/retail/how-target-rebuilt-retail-discovery-with-spanner-graph/</guid><category>AI &amp; Machine Learning</category><category>Data Analytics</category><category>Databases</category><category>Customers</category><category>Retail</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>How Target is enhancing retail discovery and cutting database maintenance by 50% with Spanner Graph</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/topics/retail/how-target-rebuilt-retail-discovery-with-spanner-graph/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Sayanti Dey</name><title>Principal Engineer, Target</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Kaushik Shelat</name><title>Sr. Engineering Manager, Target</title><department></department><company></company></author></item><item><title>Cortex Framework v7 is GA: Build agentic workflows without disrupting SAP operations</title><link>https://cloud.google.com/blog/products/sap-google-cloud/cortex-framework-v7-power-ai-agents-with-sap-data-faster/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Businesses want to quickly and safely deploy AI agents to drive revenue, mitigate risk, and optimize capital, all without disrupting mission-critical ERP systems. And to power AI agents, you need more than raw data: You need interoperable &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/cortex/docs/data-product"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;data products&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; that act as a single, reusable source of truth, turning cryptic source system records into clear business terms. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Today, we are announcing the &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/cortex/docs/overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;general availability of Google Cloud Cortex Framework version 7&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. This release modernizes your data architecture for agent readiness, helping you quickly deploy, customize, and extend robust data products while simplifying orchestration and reducing the infrastructure overhead of traditional approaches.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;While ERP systems hold a wealth of foundational data, turning those transactional records into AI-ready data products is difficult, especially without slowing down core operations. Cortex Framework v7 solves this with purpose-built &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/cortex/docs/data-product#available_data_products"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;data product accelerators&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; for SAP. Deployed directly in &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; and &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/dataplex/docs"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Knowledge Catalog&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, these data products feed &lt;/span&gt;&lt;a href="https://cloud.google.com/products/gemini-enterprise-agent-platform?e=48754805"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini Enterprise Agent Platform&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; with accurate business context so your AI agents can execute with high fidelity. It also simplifies data orchestration using a modular, scalable deployment architecture powered by &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/dataform/docs"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Dataform&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, an end-to-end experience that helps data teams build, version control, and orchestrate workflows in BigQuery. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Read on for more details about what you’ll find in Cortex Framework v7, how it integrates with the recently released &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/sap-google-cloud/sap-and-google-cloud-launch-bdc-connect-for-bigquery"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;SAP Business Data Cloud Connect for BigQuery&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, what our customers are saying, and how to get started.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;What’s new in Cortex Framework v7&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;1. Deliver agent-ready data products &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Traditional business intelligence (BI) dashboards tell you what happened last quarter, but modern AI models and agents help you act in real time. To power this shift, Cortex Framework v7 packages your enterprise data into semantically rich data products that contain AI-friendly metadata. This enables your agents to reason, orchestrate, and execute high-impact workflows.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;By translating raw SAP tables into clear business terms, dynamically ingesting custom fields, and natively handling advanced logic (like SAP TCURX currency decimal shifts), the Framework maintains the high data fidelity required for large language model (LLM) interactions and enterprise analytics.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/Image_1__Deployed_data_products_inside_Big.max-1000x1000.png"
        
          alt="Image 1_ Deployed data products inside BigQuery"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="rbt7t"&gt;Image showing Cortex Framework v7 deployed data products for SAP ERP inside BigQuery with built-in description metadata for field names and descriptions.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;These purpose-built &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/cortex/docs/data-product#available_data_products"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;data product accelerators&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; for SAP ERP and SAP Business Data Cloud deploy directly in BigQuery. Once they’re deployed, you can trigger &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/cortex/docs/knowledge-catalog"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;automatic registration in Knowledge Catalog&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; to easily discover data and connect it with your AI agents.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/Image_2__Knowledge_Catalog_registration.max-1000x1000.png"
        
          alt="Image 2_ Knowledge Catalog registration"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="rbt7t"&gt;Image showing a Cortex Framework v7 data product registered in Knowledge Catalog with built-in metadata for descriptions and labels.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To accelerate custom AI projects, this release also includes &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/cortex/docs/agentic-skills-for-data-product-building#agent_skills"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;agent skills&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; for an&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/cortex/docs/agentic-skills-for-data-product-building"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt; agentic data product builder&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; that helps data and knowledge engineers use natural language to generate custom data products. Using the Framework's provided content, an AI agent can automatically handle the build process, including adapting to specific source data requirements and customizations.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/Image_3__Agentic_Data_Product_Builder.gif"
        
          alt="Image 3_ Agentic Data Product Builder"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="rbt7t"&gt;GIF showing Cortex Framework v7 delivered agentic data product builder skills in action using Google Antigravity with Gemini to automate the build and deployment of new data products using natural language prompts.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;With v7 you can also &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/cortex/docs/extensibility-guide"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;extend Cortex Framework&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; to maintain a clean separation between Cortex Framework-delivered content and your custom models. This helps you apply the latest code updates without impacting your custom work. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;2. Build faster with modular deployments&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Dataform powers the modernized data pipelines in Cortex Framework v7, offering version-controlled SQL and native dependency management. When you select a packaged data product for deployment, Cortex Framework retrieves and processes only the required tables. Dependency resolution automatically handles order-of-operations and generates a dependency graph for efficient processing. You can also add custom fields or logic without breaking standard models.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/Image_4__Dataform_data_pipelines.max-1000x1000.png"
        
          alt="Image 4_ Dataform data pipelines"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="rbt7t"&gt;Image showing Cortex Framework v7 data products in Dataform with automated dependency graph showing data asset and table dependencies as well as built-in metadata like natural language tags.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;This modular approach extends natively to complex, multi-system SAP environments. Using built-in logic differentiation, Dataform compiles and deploys Cortex Framework data products for SAP ECC, SAP S/4HANA, and SAP BDC source systems in parallel, while dynamic schema discovery automatically ingests and processes custom SAP fields such as Z-fields. Together, these capabilities help you bring in data from multiple systems simultaneously, reducing the need to manually refactor pipelines.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;3. Scale cost-effectively with flexible processing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Cortex Framework now defaults to BigQuery incremental loading and non-destructive schema updates, processing only new or modified data. This approach minimizes compute time and significantly lowers operational expenses. Because orchestration relies on Dataform’s serverless, BigQuery-native execution, data processing scales without additional infrastructure overhead.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;You can also use a bring-your-own (BYO) change data capture (CDC) approach. You can use this approach to bypass built-in CDC data processing and connect your existing CDC-processed pipelines directly.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Interoperability with SAP Business Data Cloud&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Following the recent general availability of &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/sap-google-cloud/sap-and-google-cloud-launch-bdc-connect-for-bigquery"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;SAP Business Data Cloud Connect for BigQuery&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, Cortex Framework v7 now natively supports SAP BDC standard and custom data products. By combining Cortex Framework-delivered data products with SAP BDC data products, you can uncover new business opportunities. To accelerate this, v7 includes &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/cortex/docs/solution-samples/overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;solution samples&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; across both SAP BDC and SAP ERP data to help you quickly answer a wide range of critical questions such as assessing the health of your sales pipeline or identifying procurement inefficiencies. &lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/Image_5__Solution_samples_on_SAP_BDC_Data_.max-1000x1000.png"
        
          alt="Image 5_ Solution samples on SAP BDC Data Products"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="rbt7t"&gt;Image showing Cortex Framework v7 consumption data product solution samples deployed on SAP BDC sourced data products via SAP Business Data Cloud Connect for BigQuery integration.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Co-innovating with industry leaders&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We’ve worked closely with our &lt;/span&gt;&lt;a href="https://cloud.google.com/consulting/portfolio/sap-cortex-value-accelerator"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Professional Services Organization&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; and industry leaders to test these new capabilities. By serving as our lighthouse customers, these organizations provided valuable feedback to help us shape a framework built for enterprise-scale agility and AI readiness. &lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 40px;"&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;“As an existing Cortex Framework customer, we are excited about the capabilities introduced with the latest v7 release. Bridging complex SAP ECC and S/4 environments with Google Cloud’s AI capabilities requires a trusted data foundation with accurate business context. Based on the capabilities announced for Cortex Framework v7, including the agentic data product builder, we see significant potential to accelerate and scale the creation of enterprise data products for analytics and agentic AI use cases. The direction of the platform is particularly promising for organizations looking to make SAP data more accessible, semantically meaningful, and ready to support future reporting and AI initiatives.”&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;br/&gt;&lt;/span&gt;&lt;strong style="font-style: italic; vertical-align: baseline;"&gt;-&lt;/strong&gt;&lt;strong style="vertical-align: baseline;"&gt; Dr Jwan Ibrahim, Director, Data and Analytics, &lt;/strong&gt;&lt;a href="https://www.slb.com/" rel="noopener" target="_blank"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;SLB&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Get started&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Cortex Framework v7 changes how enterprises operationalize their most critical data for AI agents. By combining serverless execution, AI-ready semantics, and native SAP integration, Google Cloud helps you turn complex enterprise data into a strategic asset. To get started, check out the following resources:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Execute a deployment:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Try a Cortex Framework &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/cortex/docs/demo-deployment"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;demo deployment&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; (with a predefined sample dataset) to explore your first v7 data products today.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Learn more:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Read the comprehensive Cortex Framework v7 &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/cortex/docs/overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;technical documentation&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; for deep dives into production deployment steps, configuration, extensibility, source system integration, and packaged data products.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Talk to an expert:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;a href="https://cloud.google.com/contact"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Contact your Google Cloud account team&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; to learn how Cortex Framework v7 can accelerate your specific data-to-AI journey.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Mon, 03 Aug 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/sap-google-cloud/cortex-framework-v7-power-ai-agents-with-sap-data-faster/</guid><category>Data Analytics</category><category>SAP on Google Cloud</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/images/cortex_framework_v7.max-600x600.jpg" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Cortex Framework v7 is GA: Build agentic workflows without disrupting SAP operations</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/images/cortex_framework_v7.max-600x600.jpg</image><site_name>Google</site_name><url>https://cloud.google.com/blog/products/sap-google-cloud/cortex-framework-v7-power-ai-agents-with-sap-data-faster/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Snehanshu Shah</name><title>Managing Director, Cortex Framework GTM, Google Cloud</title><department></department><company></company></author></item><item><title>Unifying public and private data: Scale knowledge graphs with Data Commons on Spanner</title><link>https://cloud.google.com/blog/products/databases/unify-public-and-private-data-with-data-commons-on-spanner-graph/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To make informed decisions, businesses often need to connect their internal data with public reference data, to create a knowledge graph that connects real-world things and their relationships. However, bridging data from public and private worlds has traditionally been complex. Today, we are streamlining these connections with the general availability of &lt;/span&gt;&lt;a href="https://datacommons.org/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Data Commons&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; on Spanner Graph and the preview of the new Data Commons Platform to unify your private knowledge with knowledge graphs from public datasets. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The overarching Data Commons project supports Google’s mission to organize the world's information and make it universally accessible and useful. Data Commons unifies fragmented public datasets from over 100 authoritative providers, including the United Nations, World Bank, US Census Bureau, Eurostat, WHO, and NOAA, with over 400 billion data points structured using standardized &lt;/span&gt;&lt;a href="http://schema.org" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Schema.org&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; definitions. Data Commons provides data exploration tools, MCP tools, and cloud-based APIs to access and integrate the clean datasets. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Data Commons integrates public information across multiple domains, including agriculture, demographics, economy, environment, and health. This standardized approach unlocks powerful use cases, for instance, letting you analyze national GDP trends, map regional smoke pollution levels, track local health equity, or demographic distributions over time, all using data that has already been preprocessed and normalized for you.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Data Commons knowledge graph dimensions&lt;/strong&gt;&lt;/h3&gt;
&lt;div align="left"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;&lt;table&gt;&lt;colgroup&gt;&lt;col/&gt;&lt;col/&gt;&lt;col/&gt;&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Dimension&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Size&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Technical description&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Statistical observations&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;400+ billion&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Individual metric data points&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Graph edges&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;2.6+ billion&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Relationships&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Knowledge graph nodes&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;1.7+ billion&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Standardized entities&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Data sources&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;100+ providers&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Authoritative institutions&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;sup&gt;&lt;em&gt;&lt;span style="vertical-align: baseline;"&gt;Data Commons makes meaningful quantities of public administrative data available to users on readily consumable cloud-based infrastructure.&lt;/span&gt;&lt;/em&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;A modern infrastructure powered by Spanner Graph&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;When we first built Data Commons, our goal was to aggregate massive, disparate public datasets using the tools available at the time. The platform relied on Bigtable as a caching layer, which was an effective strategy for handling large-scale lookups in the absence of native graph database technology.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Today, we have transitioned our architecture to a native graph model with &lt;/span&gt;&lt;a href="https://cloud.google.com/products/spanner/graph?e=48754805"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Spanner Graph&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, which brings the convenience of a SQL-like interface and graph expressiveness to Spanner, with its high availability, horizontal scale-out, multi-region transactional consistency, and native ISO/IEC 39075 &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-intro"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Graph Query Language (GQL) support&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;By adopting a multi-entity Spanner Graph schema, we represent entities as nodes and their domain links as dynamic graph edges, allowing us to move away from pre-computed cache structures and perform complex relationship queries directly within the database using GQL.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;This architecture also simplifies our pipelines by removing the need for complex, pre-computed indices that require costly in-memory rebuilds and multiple snapshots. Spanner Graph enables incremental updates to specific datasets without refreshing the entire database, while stale reads maintain consistent data snapshots during ingestion.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Key benefits by moving to Spanner Graph&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Unified storage and incremental updates&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: By utilizing Spanner Graph’s multi-entity schema, the platform replaces complex caches with a model that supports incremental data imports, allowing for targeted updates to specific datasets.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Dynamic graph traversals via GraphRAG&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: The system executes multi-hop queries such as navigating hierarchies like continent → country → state → county → city on the fly. This removes reliance on static caches and enables GraphRAG workflows, where the database maps natural language queries directly to structured path-matching traversals.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Consistent data snapshots&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Leveraging Spanner &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/spanner/docs/true-time-external-consistency"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;TrueTime&lt;/strong&gt;&lt;/a&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;and &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/spanner/docs/reads"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;stale reads&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, the platform provides you with a version-consistent snapshot of data, maintaining integrity across distributed nodes following batch ingestion cycles.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Operational analytics at scale&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Spanner’s &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/spanner/docs/columnar-engine"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;columnar engine&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; efficiently scans massive time-series datasets by reading only the necessary fields, while &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/spanner-federated-queries"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery federation&lt;/strong&gt;&lt;/a&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;that leverages &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/spanner-federated-queries#data_boost"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Spanner’s Data Boost&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; technology performs complex aggregations via &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/federated_query_functions#external_query"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;EXTERNAL_QUERY&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; in an isolated environment, helping isolate production traffic.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Bridging systems with SDMX 3.0 interoperability&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To facilitate the use of complex statistical data, Data Commons adopts a lean implementation of Statistical Data and Metadata eXchange (SDMX) technical standard. As an ISO specification, SDMX provides a consistent approach for describing and exchanging statistical data along with descriptive statistical meta-information.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;In this Data Commons Platform update we added support for the SDMX technical standard version 3.0, providing out-of-the-box integration with third-party tools like Tableau, Flourish, and Observable for multi-dimensional datasets. This is made possible using the API standard SDMX-JSON and SDMX-CSV 2.0 formats across two high-value endpoints:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;The availability API&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: A programmatic discovery mechanism to identify existing dimensions, variables, and date ranges without reading raw values.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;The data API&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Retrieves actual observations and metadata, using named parameters to help prevent code from breaking when dimensions are added.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Transforming private instances of Data Commons Platform&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For organizations that want to build &lt;/span&gt;&lt;a href="https://datacommons.org/build" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;private instances&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; of the Data Commons Platform, this new modern architecture resolves legacy scaling limits and simplifies data schematization. Developers can instantiate a private instance of the Data Commons Platform leveraging the same scalable technology that powers Google’s Data Commons instance. As a private instance, users retain full control of their own data and have the ability to limit access, while enabling natural language queries to blend results from their private data with Google’s public data that is hosted on the Google Data Commons instance. By federating across our public knowledge graph and a private knowledge graph containing your own data, you can light up exciting new use cases, while maintaining data isolation and ensuring no data duplication. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For instance, a retail enterprise can combine public data such as national GDP trends, regional demographic breakdowns, and employment statistics, with their own enterprise data, including sales histories, store performance metrics, and supply chain logistics. This allows analysts to contrast public macroeconomic indicators against their own company transactions to optimize merchandise distribution and identify untapped markets.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/1_bmsqbGv.max-1000x1000.png"
        
          alt="1"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;Example of a natural language query combining statistical data from the Directorate General of Commercial Intelligence and Statistics (DGCIS) stored in a Data Commons Platform private instance with World Development Indicators from the World Bank stored in the Google Data Commons public instance.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/2_OHrJTCJ.gif"
        
          alt="2"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;A user is querying a Data Agent for average annual temperature trends in the country. The agent retrieves information from Data Commons, explaining that while historical data is available, it provides projected temperature changes, climate drivers, and CMIP6 climate model scenarios (SSPs), with options to export the generated report.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/3_zldA0Ku.gif"
        
          alt="3"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;A user asks the Data Agent to compare the Worker Population Ratio (WPR) of rural versus urban males in a country. Fetching data from Data Commons, the agent defines WPR—the percentage of workers relative to the total population—and outlines the available demographic variables to analyze and compare both groups.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/4_RTCAs1A.gif"
        
          alt="4"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Get started today&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Explore Data Commons&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Visit &lt;/span&gt;&lt;a href="http://datacommons.org" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;datacommons.org&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; to query global statistical knowledge.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;Explore Spanner Graph's&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;a href="https://cloud.google.com/products/spanner/graph?hl=en"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;use cases&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; and &lt;/span&gt;&lt;a href="https://cloud.google.com/spanner/docs/graph/set-up"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;setup guide&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; for your knowledge graphs.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Deploy Data Commons Platform&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: contact &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;support@datacommons.org&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; to request preview access and to review the developer tools.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Mon, 03 Aug 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/databases/unify-public-and-private-data-with-data-commons-on-spanner-graph/</guid><category>Data Analytics</category><category>Spanner</category><category>Databases</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Unifying public and private data: Scale knowledge graphs with Data Commons on Spanner</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/products/databases/unify-public-and-private-data-with-data-commons-on-spanner-graph/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Randeep Toor</name><title>Senior Technical Program Manager, Data Commons</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Piyush Mathur</name><title>Group Product Manager, Databases</title><department></department><company></company></author></item><item><title>The borderless Lakehouse: Bring AWS, Databricks and Snowflake data to your AI agents</title><link>https://cloud.google.com/blog/products/data-analytics/introducing-the-borderless-lakehouse/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Today’s data lakehouse is no longer mere data repository, but increasingly a system of action, actively executing tasks via always-on, autonomous AI agents. Rather than waiting for static reports, these agents run continuous, real-time reasoning loops, monitoring supply chains, flagging anomalies, and executing business workflows. To scale this model, AI agents need to access your entire data estate and the right context to understand what data to use and when. However, traditional data architectures, with their high costs, fragmented security, and weak governance, don’t make it easy.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Today at Next Tokyo, we’re introducing enhancements to our &lt;/span&gt;&lt;a href="https://cloud.google.com/solutions/data-lakehouse"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;borderless Lakehouse&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. Built on open Apache Iceberg, it connects your on-premises, cross-cloud operational systems, and SaaS application clouds, so you can activate and query your data wherever it lives, without moving it.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Federating multiple catalogs with Iceberg REST&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The borderless Lakehouse enables Gemini Enterprise and conversational agents to analyze and act on data regardless of its physical location. Built on the Iceberg REST catalog, it lets you discover and query remote data instantly, eliminating the high costs and delays of building data pipelines. This connectivity is made possible with catalog federation (now in preview) for &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/lakehouse/docs/set-up-cross-cloud-lakehouse-aws-glue"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;AWS Glue&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/lakehouse/docs/set-up-cross-cloud-lakehouse-databricks"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Databricks Unity&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, and &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/lakehouse/docs/set-up-cross-cloud-lakehouse-snowflake"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Snowflake Horizon&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, providing secure, bi-directional access via BigQuery, Managed Service for Apache Spark, and any Iceberg-compatible engine.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;This open approach also extends to the application layer, with zero copy data integrations to major SaaS applications like SAP, Salesforce, and Workday. BigQuery can now directly query live application data in these platforms without complex ETL pipelines, while they can run &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/generative-ai-overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery's AI&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; engines on their own data in-place to easily unify finance, HR, and customer data. These capabilities unlock three significant benefits:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Zero-copy, cross-cloud analytics&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Instantly discover and query enterprise data across platforms without duplicating files, allowing various data teams to analyze the exact same copy of Apache Iceberg data.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Bidirectional interoperability&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Read and write across environments, querying external tables from BigQuery or Managed Spark, then sharing derived datasets enriched by Google AI back to partner systems for downstream action.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Unified governance and access control&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Get out-of-the-box governance with trusted context and Gemini insights for your agents. Secure access control at the table level with support for credential vending, regardless of which platform initiates the query.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The borderless Lakehouse expands to Google Cloud’s database portfolio which lets you integrate transactional systems with data lakehouses: &lt;/span&gt;&lt;a href="https://cloud.google.com/products/spanner/omni"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Spanner Omni&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; lets you run the highly scalable database in any environment outside of Google Cloud, and &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/alloydb/docs/lakehouse-federation-overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Lakehouse Federation for AlloyDB&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; allows transactional systems to directly query warehouses. By eliminating costly data movement, your teams can securely and efficiently analyze live operational and historical data together in real time. Now your lakehouse is truly borderless.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Bring Google AI directly to your AWS and Azure data&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Historically, running advanced analytics or training ML models across clouds meant a cross-cloud tax: high egress fees, network latency, and fragile ETL pipelines. The borderless Lakehouse solves this with &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/network-connectivity/docs/interconnect/concepts/cci-overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Cross-Cloud Interconnects&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. These private, dedicated links deliver consistent bandwidth and lower latency than the public internet, at a fraction of the cost of traditional cross-cloud connections. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The borderless Lakehouse supports zero variable egress costs when accessing your data from AWS&lt;/span&gt;&lt;sup&gt;&lt;span style="vertical-align: baseline;"&gt;&lt;span style="vertical-align: super;"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/sup&gt;&lt;span style="vertical-align: baseline;"&gt;. With &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/network-connectivity/docs/interconnect/concepts/partner-cci-for-aws-overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Partner Cross-Cloud Interconnect&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; pricing, you get predictable monthly costs with an SLA-backed connection. This managed, private connectivity simplifies provisioning from 1G to 100G using a flat-rate, subscription-based model.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;In addition, intelligent cross-cloud caching in the borderless Lakehouse securely stores remote data fragments temporarily inside Google Cloud to eliminate repeated, costly transfers for subsequent ad-hoc or BI queries. These capabilities, combined with BigQuery's vectorized processing, &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/data-analytics/deep-dive-into-bigquery-ai-agg-function"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery AI functions for multimodal analysis&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;,  &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/data-analytics/lighting-engine-for-apache-spark-performance-deep-dive"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Spark's Lightning Engine runtime&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, and scalable metadata storage, scale to petabytes of data without sacrificing performance and enable: &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;In-place AI and machine learning&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Apply powerful AI models and Gemini directly to AWS data and Azure without migration. Ingesting metadata and context right where it lives helps guarantee high-accuracy grounding and a faster time-to-market.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Avoid the cost and delay of data copying:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Query live data stored in other clouds directly and bring your data closer to your agents.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Unified analytics experience&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Deliver consistent, hardware-optimized performance across BigQuery, Spark, or open-source engines by centralizing multi-cloud compute back to Google Cloud’s infrastructure.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Bridging the agent trust gap with universal context&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To prevent hallucinations, AI agents need more than raw technical metadata; they need deep business context. The borderless Lakehouse relies on &lt;/span&gt;&lt;a href="https://cloud.google.com/products/knowledge-catalog"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Knowledge Catalog&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, our always-on agentic context engine, to establish a unified view of your enterprise context across clouds, without moving physical files.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To support this, the borderless Lakehouse’s runtime catalog automatically synchronizes with AWS Glue, Databricks Unity Catalog, and Snowflake Horizon, all in preview&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; Knowledge Catalog then ingests these feeds to aggregate, extract, and index their metadata, translating raw schemas into clear business terminology and searchable column-level lineage. As schemas change, Knowledge Catalog instantly updates their business meaning, delivering:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Lower costs and overhead:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Minimize expensive, time-consuming data migration pipelines while gaining a consolidated view of your entire multi-cloud estate.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Trustworthy AI decisions&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Provide agents with a clear semantic layer and lineage tracking so they can quickly discover, trust, and accurately interpret data.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Automated governance&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Embed security directly into the metadata layer, helping ensure AI agents strictly respect compliance guardrails and access permissions.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Build and scale agents with Gemini Enterprise&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;By pairing the open-source Google Cloud &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/data-analytics/data-agent-kit-brings-data-skills-and-tools-to-your-ide-or-cli"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Data Agent Kit&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; with the Conversational Analytics API, you can build and publish custom data agents that operate on the borderless Lakehouse directly into &lt;/span&gt;&lt;a href="https://cloud.google.com/gemini-enterprise"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini Enterprise&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. This allows business users to talk to their data using natural language. The Data Agent Kit is a full-stack collection of agent building capabilities — meeting developers inside their favorite IDEs (like VS Code) — to package pre-codified analytical skills and Model Context Protocol (MCP) tools. With the borderless Lakehouse, your agents operate across your entire data estate and help with:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Integrated data and agent ecosystem&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Built-in MCP tools establish secure, direct connections to BigQuery, Managed Spark, and Cloud Storage, eliminating the need to write complex pipeline code or copy-paste massive table schemas into LLM prompts.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Self-service analytics&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Business users bypass static dashboards, querying and visualizing multi-cloud datasets instantly in plain language within the Gemini Enterprise interface.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Grounded, high-accuracy agent results:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Agents run on top of the Knowledge Catalog, ensuring that natural-language-to-SQL translations are anchored in curated business schemas, highly secure, and strictly governed.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;The economics of the borderless Lakehouse and agents&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The borderless Lakehouse redefines enterprise AI economics by delivering compounded savings across data transfer, compute, and token consumption. By utilizing Cross-Cloud Interconnects and zero-copy sharing, you bypass fragile data pipelines and unpredictable egress fees to query remote datasets at a flat, predictable rate. Knowledge Catalog filters and delivers the precise, minimal business context required for each prompt, preventing token bloat and eliminating unnecessary reasoning loops. BigQuery AI prevents runaway agent billing through &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/bigqueryml-syntax-ai-count-tokens"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;built-in token controls&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; that let you estimate token usage pre-query, enforce strict limits, and leverage an optimized mode that automatically uses smaller, distilled models. In fact, customers are seeing 230x reduction in token consumption using BigQuery’s cost-optimized, built-in AI functions.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Next steps&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The future belongs to the system of action, and the borderless Lakehouse allows your AI agents to query, reason, and act on your data wherever it lives — safely, instantly, and cost-effectively. To start building, check out the official &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/lakehouse/docs/lakehouse-basics"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud Lakehouse About Guide&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; and explore our &lt;/span&gt;&lt;a href="https://codelabs.developers.google.com/next26/multicloud-lakehouse#0" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Building a borderless Lakehouse codelab&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;sub&gt;&lt;em&gt;&lt;span style="vertical-align: baseline;"&gt;1. Customers are required to pay an hourly fee for interconnection service.&lt;/span&gt;&lt;/em&gt;&lt;/sub&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Wed, 29 Jul 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/data-analytics/introducing-the-borderless-lakehouse/</guid><category>Data Analytics</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>The borderless Lakehouse: Bring AWS, Databricks and Snowflake data to your AI agents</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/products/data-analytics/introducing-the-borderless-lakehouse/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Sirish Chandrasekaran</name><title>VP, Product Management</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Will Ochandarena</name><title>Group Product Manager</title><department></department><company></company></author></item><item><title>Bringing Conversational Analytics to your entire data ecosystem</title><link>https://cloud.google.com/blog/products/data-analytics/conversational-analytics-in-google-data-cloud-in-q326/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Increasing the adoption of generative AI across the enterprise requires you to do more than deploy a generic chatbot with a custom wrapper. Interacting with business-critical databases demands absolute trust, strict governance, and deep grounding in enterprise semantics.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Over the last year, Conversational Analytics (CA) in Google Cloud has moved from isolated experiments to scaled, enterprise-wide deployments. &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/data-analytics/introducing-conversational-analytics-in-bigquery"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery Conversational Analytics&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; and the &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/gemini/data-agents/conversational-analytics-api/overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Conversational Analytics API&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; are now generally available, adding to the &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/business-intelligence/looker-conversational-analytics-now-ga"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;general availability of Conversational Analytics in Looker&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; last year. Building on this momentum, &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/gemini/data-agents/conversational-analytics"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Conversational Analytics in Databases&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; are also available in Preview. And so much more has happened — Google Cloud Conversational Analytics is available for more data, across more surfaces, with more enterprise controls, and greater capability than ever before.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Let’s take a deeper look at the state of Conversational Analytics in the Google Data Cloud — what you can do with it, the benefits that it brings, and how to get started with it today. &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Query across multi-cloud and database workloads&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Conversational Analytics is now generally available for BigQuery and Looker, and in preview for AlloyDB, Cloud SQL, and Spanner. You can also analyze data stored in Lakehouse Managed Service tables, Apache Iceberg REST catalogs, and federated AWS S3 Unity Catalogs. Whether your data resides exclusively in Google Cloud or across multiple cloud providers, your agents can query it natively.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style="vertical-align: baseline;"&gt;For data practitioners, Conversational Analytics is integrated directly into BigQuery Studio, BigQuery Data Canvas, Database Studio and &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/data-cloud-extension"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Data Agent Kit&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. For business teams, these conversational capabilities extend directly into &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/business-intelligence/looker-conversational-analytics-now-ga?e=48754805"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Looker&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;a href="https://cloud.google.com/data-studio?e=48754805"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Data Studio&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, and &lt;/span&gt;&lt;a href="https://cloud.google.com/gemini-enterprise"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini Enterprise&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. Data teams can publish Conversational Analytics agents created in BigQuery, Looker, AlloyDB, Spanner, and Cloud SQL directly into Gemini Enterprise, giving business leaders a centralized interface to query complex data safely.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Our &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/gemini/data-agents/conversational-analytics-api/overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;APIs&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; and &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/ai-machine-learning/google-managed-mcp-servers-are-available-for-everyone?e=48754805"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;MCP tools&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; let you embed Conversational Analytics wherever your business users work, like custom applications and multi-agent systems, or as &lt;/span&gt;&lt;a href="https://github.com/looker-open-source/ca-demos-and-tools/tree/main/ca-slack-demo" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;slack chatbot&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; that can answer questions across data sources, as we showed at Google Cloud Next.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Enterprise security and governance controls&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;Scaling generative AI to tens of thousands of users requires ironclad governance and transparent &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/gemini/data-agents/conversational-analytics-api/manage-costs"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;cost controls&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. Conversational Analytics includes &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/kms/docs/cmek"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Customer Managed Encryption Keys (CMEK)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;a href="https://cloud.google.com/vpc/docs/private-google-access"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Private IP&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, and &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/vpc/docs/overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Virtual Private Cloud (VPC)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; controls.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We guarantee &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/assured-workloads/docs/data-residency"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Data Residency (DRZ)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; at rest and machine learning processing inside multi-region endpoints within the European Union and the United States, along with HIPAA compliance. For data access, role-based controls, including &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/alloydb/docs/parameterized-secure-views-overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;parameterized secure views&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; in &lt;/span&gt;&lt;a href="https://cloud.google.com/products/alloydb"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;AlloyDB for PostgreSQL&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, help ensure users chatting with an agent only see data they are authorized to view, enforced down to row- and column-level permissions.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/1_n7Jglje.gif"
        
          alt="1"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="x1rnx"&gt;Monitoring Conversational Analytics in BigQuery to track agent fleet health, active users, query volumes, and top knowledge sources.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;As usage grows, administrators need tools to manage costs, observe system health, and improve accuracy. You can configure native cost controls to define limits on maximum query sizes in bytes, and track usage through BigQuery query labels and Looker system activity logs.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To maintain fleet visibility, agents can also export health, tool usage, latency, and token consumption metrics via OpenTelemetry (OTEL) standards. Integrated feedback loops allow administrators to review agent traces and user feedback, establishing a foundation for continuous evaluation and accuracy improvements over time.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Grounded context through agent and data co-design&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;Wrapping a generic LLM around an enterprise database can sometimes lead to hallucinated logic. To minimize this, we co-designed Conversational Analytics agents alongside the data platforms they query.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For instance, agents leverage Knowledge Catalog for data discovery, glossaries, and automated context enrichment like table joins and descriptions. &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/data-analytics/introducing-bigquery-graph?e=48754805"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery Graphs&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; and &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/spanner/docs/graph/overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Spanner Graphs&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; allow agents to query structured and unstructured data across multi-hop relationships. Additionally, Looker’s semantic layer (LookML) grounds agent responses in &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/business-intelligence/looker-updates-for-agentic-bi-at-next26"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;centrally governed metric definitions&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, helping ensure answers remain deterministic rather than relying on guessed SQL joins.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/2_FMMmN2h.max-1000x1000.png"
        
          alt="2"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="x1rnx"&gt;Grounding Conversational Analytics across Knowledge Catalog, BigQuery Graph, and Looker’s semantic model helps ensure deterministic, enterprise-governed responses.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Conversational Analytics agents are also co-designed with the data they query. This means their tools are context-aware, to have the best understanding of the metadata. They also benefit from built-in capabilities like multimodal data querying using BigQuery object tables, operating over multimodal data with &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;ai.search&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;ai.generate_embedding&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;ai.classify&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;ai.score&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; and using &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;ai.forecast &lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;and &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;ai.detect_anomalies &lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;to use the &lt;/span&gt;&lt;a href="https://research.google/blog/a-decoder-only-foundation-model-for-time-series-forecasting/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;TimesFM&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; foundation for forecasting and anomaly detection.&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;Additionally,&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt; ai.key_drivers&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; performs automated contribution analysis to pinpoint exactly what is driving unexpected changes in your data. When integrated with Looker, these agents leverage the semantic layer to ground their responses in centrally governed, deterministic metrics. To avoid AI hallucinations, this API-first approach (using 'Golden Queries') ensures agents retrieve verified business logic rather than guessing at SQL joins. Looker additionally equips the agents to seamlessly navigate high-cardinality datasets with dynamic filtering, automatically enforce row-level security during the chat experience, and surface context-aware suggested questions.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Proactive insights with Agentic Workflows&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Analytics is moving beyond reactive question-answering toward proactive intelligence. That is, instead of requiring users to ask the right question at the right time, Conversational Analytics agents can run multidimensional deep dives to analyze 10 to 20 contributing factors behind a change in a metric.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;With Agentic Workflows, now in preview, you can schedule automated reporting routines delivered directly into your chat workflow. Agents continuously run anomaly detection across key metrics, sending daily or weekly summaries straight to your team. Streaming anomaly detection can also launch an agent automatically the moment a key metric deviates from baseline thresholds.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/3_PYuc6UH.gif"
        
          alt="3"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="x1rnx"&gt;Running a multi-step deep dive in Conversational Analytics to automatically investigate complex data relationships across enterprise datasets.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Flexible integration with APIs, SDKs, and MCP&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Conversational Analytics is available to developers and business users in their existing environments. The Conversational Analytics API includes native SDKs for Node.js, Java, Go, Python, PHP, Ruby, and .NET and keeps insights where the work happens. We are expanding how and where people use Conversational Analytics, starting with &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/looker/docs/dashboards"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Looker Dashboards&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; and &lt;/span&gt;&lt;a href="https://datastudio.google.com/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Data Studio&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, as well as supporting &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/create-data-agents#publish-agent-gemini-enterprise"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;publishing agents to Gemini Enterprise&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;You can also add Conversational Analytics to other &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;multi-agent systems. Using the Agent Development Kit (ADK) and Model Context Protocol (MCP), you can integrate Conversational Analytics into custom applications, Slack bots, or multi-agent orchestrators. For example, a supply chain orchestrator agent can query a financial data agent to calculate the margin impact of a shipping delay in real time.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Get started with Conversational Analytics&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Google Cloud Conversational Analytics unifies your data estate, security control plane, and developer APIs to deliver proactive data insights wherever your team works. Explore our &lt;/span&gt;&lt;a href="https://cloud.google.com/bigquery/docs/conversational-analytics"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Conversational Analytics documentation&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, review our quickstart repositories, and &lt;/span&gt;&lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSfSz-AnPwi-Dk2DJB7614gRcsKF_tUTXj1DOMCDbce_I0EyRQ/viewform" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;sign up to try our&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; new previews today.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Tue, 28 Jul 2026 17:30:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/data-analytics/conversational-analytics-in-google-data-cloud-in-q326/</guid><category>AI &amp; Machine Learning</category><category>Business Intelligence</category><category>Data Analytics</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Bringing Conversational Analytics to your entire data ecosystem</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/products/data-analytics/conversational-analytics-in-google-data-cloud-in-q326/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Richard Kuzma</name><title>Group Product Manager, Data Agents</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Ganesh Kumar Gella</name><title>Sr. Director of Engineering, Data Agents</title><department></department><company></company></author></item><item><title>Announcing general availability of SAP Business Data Cloud Connect for BigQuery</title><link>https://cloud.google.com/blog/products/sap-google-cloud/sap-and-google-cloud-launch-bdc-connect-for-bigquery/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Traditional data replication techniques often struggle to deliver the data freshness that modern workflows require. To help organizations overcome this challenge, SAP and Google Cloud are announcing that SAP Business Data Cloud Connect for BigQuery is now generally available. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;As the next phase of our &lt;/span&gt;&lt;a href="https://news.sap.com/2025/05/harnessing-the-power-of-data-with-sap-business-data-cloud-and-google-bigquery/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;long-standing partnership&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, SAP BDC Connect for BigQuery gives you zero-copy access to data products across SAP Business Data Cloud and BigQuery – reducing silos, preserving valuable business context, and accelerating analytics and AI.  This makes current, semantically rich data available across both environments, helping AI agents execute complex business tasks while your teams remain in control.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Stop copying data for AI projects&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Built to support a zero-copy architecture, SAP BDC Connect for BigQuery establishes a secure, bi-directional connection between SAP Business Data Cloud and Google’s data and AI ecosystem. Access SAP tables, metadata, and business semantics directly in BigQuery and &lt;/span&gt;&lt;a href="https://cloud.google.com/products/knowledge-catalog"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Knowledge Catalog&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;  (formerly Dataplex) and vice versa. Ground your AI agents in operational reality instead of raw, isolated database fields.&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;SAP BDC Connect for BigQuery enables organizations to:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Scale AI on trusted data:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Build governed, trustworthy AI grounded on a semantically rich data foundation with live, zero-copy access to data products across SAP Business Data Cloud and BigQuery.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Deploy multi-agent workflows&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Orchestrate workflows with intelligent agents across SAP and Google with Gemini Enterprise Agent Platform and SAP Joule.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Discover deeper patterns:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Combine mission-critical SAP data with unique datasets, such as Google Trends and Google Maps geospatial data, to create better business context. You can then publish this enriched data directly back to SAP.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Improve business analytics:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Empower employees to ask open-ended business questions in natural language using Gemini Enterprise or Joule and receive immediate, context-aware answers grounded in SAP and Google Cloud data.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Scale your data value without inflating costs&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;SAP BDC Connect for BigQuery’s zero-copy architecture helps lower your total cost of ownership (TCO) compared to alternative data platforms by minimizing the need to replicate, store, and maintain duplicate copies of your data. Because you can query data in place, you don’t incur data sharing fees. This creates a predictable billing model that insulates your organization from unexpected charges.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;How customers translate shared data into actions &lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Organizations with preview access to SAP BDC Connect for BigQuery are already using its zero-copy architecture to solve more complex operational challenges. By speeding up data pipelines, early adopters are breaking down global data silos, predicting supply chain disruptions, and responding to fluctuating customer demands faster. Contrast that with traditional data practices where data connections take weeks to build, stalling enterprise AI initiatives. By interacting directly with SAP and Google data, teams can rapidly build functional prototypes and accelerate return on their AI investments.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;ElringKlinger &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;is a global automotive supplier managing complex, multi-country manufacturing and supply chain data, and is using zero-copy to break down data silos. By querying real-time ERP data without having to replicate it, the company aims to reduce the complexity of its data infrastructure while supporting rapid production analytics with localized inventory reporting.&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 40px;"&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;"Operating a global automotive footprint means managing vast, complex supply-chain and production data. Today, the majority of that data sits in SAP BW/4HANA, our established reporting backbone. Testing SAP BDC Connect for BigQuery showed a powerful new path forward: BigQuery as an analytical layer on top of our existing BW/4HANA assets — no data copy, no migration — unlocking AI-based Conversational Analytics while fully preserving our prior investment. This also lays the groundwork for agentic use cases that automate supply chain processes, giving teams real-time visibility into manufacturing signals worldwide." &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;- Cleve Bankston, Project Manager and Dirk Brümmer Head of IT Architecture, ElringKlinger &lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Unify data to build smart workflows with partners&lt;/strong&gt;&lt;/h3&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;SAP and Google Cloud’s global partner network is actively building use cases with SAP BDC Connect for BigQuery. These help you move from isolated AI experiments to amplifying your team's ability to handle highly variable tasks that are difficult to manage manually. To make this possible, our partners combine trusted SAP data with broader sources to help you deploy agentic AI and autonomous operations. With this unified approach, your team can connect disparate systems, maintain governance, and drive operations that deliver bottom-line impact.&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 40px;"&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;“As enterprises accelerate their reinvention agenda, the ability to unify data across business systems is foundational to scaling agentic AI. And that’s where SAP Business Data Cloud Connect for BigQuery is quite powerful. It enables enterprises real-time access to trusted financial, operational, and sustainability data, eliminating traditional data silos. This, combined with Gemini Enterprise and Accenture's deep industry expertise, allows organizations to build intelligent agents, drive autonomous operations, and modernize their digital core faster while unlocking new levels of business value.” &lt;/span&gt;&lt;strong style="font-style: italic; vertical-align: baseline;"&gt;–  Chetna Sehgal, Global Practice Lead, Accenture Google Business Group&lt;/strong&gt;&lt;/p&gt;
&lt;p style="padding-left: 40px;"&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;“Organizations don’t want a data science project; they want concrete business outcomes like working capital improvement and reduced operational costs. By leveraging this zero-copy integration, we built an autonomous procurement agent for a client. Because the agent reads live SAP inventory levels and market data inside BigQuery simultaneously, it autonomously re-routed orders during a recent supplier shift — saving millions in potential downtime and demonstrating that agentic AI tied to real-time data can deliver bottom-line impact.”&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;- Piyush Bhandari, Managing Director, Deloitte Consulting LLP&lt;/strong&gt;&lt;/p&gt;
&lt;p style="padding-left: 40px;"&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;“Based on a recent assessment and prototyping experience with a KPMG member firm energy client, we believe there is strong potential for SAP BDC Connect for BigQuery to help organizations modernize enterprise planning, analytics, and data integration on a scalable foundation. KPMG firms’ evaluations indicate that this integration can support higher-volume analytical workloads at enterprise scale, helping to provide a critical data foundation to allow exploration of future AI and agentic use cases. As with any transformation, realizing the full business value can depend on the implementation approach, data quality, and organizational readiness.”&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;strong style="font-style: italic; vertical-align: baseline;"&gt;- Mark Shank, Principal, Advisory, Banking, Tech &amp;amp; Data Engineering, Google in KPMG US&lt;/strong&gt;&lt;/p&gt;
&lt;p style="padding-left: 40px;"&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;“Our clients aren't just looking for more information; they’re looking for better business decisions. At PwC, we’re helping organizations unify SAP business data with broader enterprise data sources inside Google Cloud. This creates a single, trusted foundation for AI that strengthens analytics, supports robust governance and compliance, and drives intelligent workflows across the enterprise. This unified approach is how organizations move from isolated AI experiments to true, enterprise-wide business transformation.” &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;- Patrick Pugh, Global and US Alliances and Ecosystem Leader, PwC US&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;&lt;span style="vertical-align: baseline;"&gt;Power of agentic data: Perspectives from SAP and Google Cloud&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;div class="block-paragraph_with_image"&gt;&lt;div class="article-module h-c-page"&gt;
  &lt;div class="h-c-grid uni-paragraph-wrap"&gt;
    &lt;div class="uni-paragraph
      h-c-grid__col h-c-grid__col--8 h-c-grid__col-m--6 h-c-grid__col-l--6
      h-c-grid__col--offset-2 h-c-grid__col-m--offset-3 h-c-grid__col-l--offset-3"&gt;

      






  

    &lt;figure class="article-image--wrap-small
      
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/google_cloud_wrapped.max-1000x1000.jpg"
        
          alt="google cloud wrapped"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  





      &lt;p data-block-key="tcx7m"&gt;&lt;i&gt;"Every enterprise is striving to inject intelligence and automation into the core of their business operations. By uniting SAP Business Data Cloud with BigQuery and Gemini, we are breaking down one of the biggest walls in enterprise data. We are going far beyond raw data access by actively sharing rich semantic metadata and agentic context across platforms at zero data-sharing cost. This ensures our joint customers can deploy autonomous AI agents that operate with complete, real-time business awareness — executing complex supply chain and financial processes with absolute precision."&lt;/i&gt; &lt;b&gt;- Andi Gutmans, VP/GM, Agentic Data Cloud, Google Cloud&lt;/b&gt;&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="block-paragraph_with_image"&gt;&lt;div class="article-module h-c-page"&gt;
  &lt;div class="h-c-grid uni-paragraph-wrap"&gt;
    &lt;div class="uni-paragraph
      h-c-grid__col h-c-grid__col--8 h-c-grid__col-m--6 h-c-grid__col-l--6
      h-c-grid__col--offset-2 h-c-grid__col-m--offset-3 h-c-grid__col-l--offset-3"&gt;

      






  

    &lt;figure class="article-image--wrap-small
      
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/SAP_logo_wrapped.max-1000x1000.jpg"
        
          alt="SAP logo wrapped"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  





      &lt;p data-block-key="tcx7m"&gt;&lt;i&gt;"SAP Business Data Cloud Connect for Google BigQuery delivers real-time, bidirectional, zero‑copy data sharing that brings SAP’s mission‑critical data to Google BigQuery making it accessible to Google Gemini and Gemini Enterprise Agent Platform. With SAP BDC Connect, customers can unify SAP and non‑SAP data without complex extracts or custom APIs, reducing data complexity, strengthening governance, and accelerating trusted, AI powered business outcomes."&lt;/i&gt; &lt;b&gt;- Irfan Khan, President &amp;amp; Chief Product Officer, SAP Data &amp;amp; Analytics&lt;/b&gt;&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Regional availability&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;SAP Business Data Cloud:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Available today in Google Cloud regions in Australia (Sydney), Brazil (São Paulo), India (Mumbai), Israel (Tel Aviv), Germany (Frankfurt), Japan (Osaka), Saudi Arabia (Dammam) and the United States (Iowa).&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;SAP BDC Connect for BigQuery:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Generally available globally for all Google Cloud customers.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Cross-cloud support: SAP &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;BDC Connect for BigQuery supports SAP Business Data Cloud instances hosted on Google Cloud and AWS, with support for SAP Business Data Cloud instances hosted on Microsoft Azure coming soon.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Get started&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To learn more, &lt;/span&gt;&lt;a href="https://cloud.google.com/solutions/sap/bdc"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;visit our website&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; or speak with your Google Cloud account representative. For details on getting started with SAP BDC connect for BigQuery, visit our &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/lakehouse/docs/sap-bdc-overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;documentation page&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; to get started with your zero-copy connection today.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 27 Jul 2026 16:30:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/sap-google-cloud/sap-and-google-cloud-launch-bdc-connect-for-bigquery/</guid><category>Data Analytics</category><category>SAP on Google Cloud</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Announcing general availability of SAP Business Data Cloud Connect for BigQuery</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/products/sap-google-cloud/sap-and-google-cloud-launch-bdc-connect-for-bigquery/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Snehanshu Shah</name><title>Managing Director, Cortex Framework GTM, Google Cloud</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Jan Bungert</name><title>Chief Revenue Officer, SAP Business AI Platform</title><department></department><company></company></author></item><item><title>Open Knowledge format v0.2 tackles agentic trust</title><link>https://cloud.google.com/blog/products/data-analytics/okf-v0-2-adds-trust-signals/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;When we &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;introduced the Open Knowledge Format&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; (OKF) in June 2026, we asserted that the context that agents need (table schemas, metric definitions, runbooks) should live in a format, not in a proprietary service, and not scattered across unstructured text blobs. Accordingly, OKF v0.1 started simple: just markdown, YAML frontmatter, and a handful of conventions.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The strong response and contributions from the developer community informed our focus for the next version. Since launch, contributors opened extension proposals (typed relationship edges, agent-routing hint fields, an optional erasure conformance profile, an .okfignore convention, and more), sent new sample bundles, and begun cataloging OKF ecosystem tools built outside Google. Many of these contributions and contributor feedback reflected a larger concern about OKF: once agents are writing to the corpus, can it really be trusted?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The most valuable OKF bundles won't be written by hand once and then read forever. They're written continuously, by agents, and consumed by a different set of agents. A human-authored wiki page comes with an implicit guarantee: a person wrote it, and you can hold them accountable if it is wrong. When an agent generates ten thousand concepts overnight, that guarantee is gone. To provide accountability, a consumer (often another agent) has to judge each concept on explicit signals instead, and needs to answer five questions:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;What was this created from? (&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;provenance&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;How much should I trust it? (&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;trust&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;Is it still true? (&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;freshness&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;Is it the current version? (&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;lifecycle&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;Was this number produced the way we said it must be? (&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;attestation&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;In OKF v0.2, it is now possible to answer all five of those questions from frontmatter, while the format remains as minimally opinionated as v0.1. It adds vocabulary, not rules: &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;type&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; is still the only always-required field, every new field is opt-in, custom keys are still preserved rather than rejected, and a bundle that adopts none of the additions is exactly as valid as it was under v0.1. Everything new below is optional, but its absence now carries meaning: an unverified concept is distinguishable from a verified one (although never rejected for the difference).                    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;From describing to deciding&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;&lt;span style="vertical-align: baseline;"&gt;v0.1 already kept metadata in frontmatter: &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;type&lt;/code&gt;&lt;code style="vertical-align: baseline;"&gt;, &lt;/code&gt;&lt;code style="vertical-align: baseline;"&gt;title&lt;/code&gt;&lt;code style="vertical-align: baseline;"&gt;, &lt;/code&gt;&lt;code style="vertical-align: baseline;"&gt;description&lt;/code&gt;&lt;code style="vertical-align: baseline;"&gt;, &lt;/code&gt;&lt;code style="vertical-align: baseline;"&gt;resource&lt;/code&gt;&lt;code style="vertical-align: baseline;"&gt;, &lt;/code&gt;&lt;code style="vertical-align: baseline;"&gt;tags&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;. &lt;/span&gt;Those fields describe a concept: what it is and what it points at. v0.2 adds a second kind of frontmatter field, the kind you use to decide something about a concept before you read it: who produced it, whether it has been verified, whether it is still current, and how a value it reports should be computed.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The reason these fields belong in frontmatter is that most interactions with a concept never actually progress to accessing the information in the body of the file. A consumer, whether a person, deterministic code, or an agent scanning during search and discovery, first has to decide whether a concept is relevant at all. Everything in a concept should be concise, but frontmatter has the narrower job of elevating exactly the signals needed to make decisions about relevance and trustworthiness, so it can be made cheaply and often, without spending tokens on prose. The content that must be read in full stays in the body, accessed only once a concept is chosen. Trust becomes something you can filter on &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;before&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; you commit to reading.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To make the sections that follow concrete, every example below draws from a small OKF v0.2 bundle we've prepared as a companion to this post: &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;acme_retail&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;, a fictional US retail company's shared knowledge for AI-assisted analytics over BigQuery:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;acme_retail/\r\n├── index.md, log.md\r\n├── tables/       orders.md\r\n├── metrics/      revenue.md, gross-margin.md, gross-margin-legacy.md\r\n├── computations/ revenue-ytd.md, gross-margin-period.md\r\n├── skills/       run-on-bq.md\r\n├── attesters/    sql_equality.py\r\n└── policies/     revenue-recognition.md, margin-standard.md&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe3122ea190&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Each section that follows shows the corresponding file. Here is &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;tables/orders.md&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;, a concept carrying the new signals:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;---\r\ntype: BigQuery Table\r\ntitle: Customer Orders\r\ndescription: One row per completed customer order across web, mobile, and marketplace channels. The grain is the order, not the line item.\r\nresource: https://bigquery.googleapis.com/v2/projects/acme/datasets/sales/tables/orders\r\ntags: [sales, orders, revenue]\r\ngenerated: { by: reference_agent/gemini-2.5-pro, at: 2026-06-30T14:00:00Z }\r\nverified:\r\n  - { by: human:kliu@acme, at: 2026-07-01T16:00:00Z }\r\nstatus: stable\r\nstale_after: 2026-12-31\r\nsources:\r\n  - id: warehouse-schema\r\n    resource: https://wiki.acme.internal/data/warehouse/schemas/sales\r\n    title: Acme Retail warehouse schema — sales dataset\r\n    author: team:data-platform\r\n    usage_count: 1240\r\n    last_modified: 2026-06-15\r\n  - id: revenue-policy\r\n    resource: policies/revenue-recognition.md\r\n    title: Revenue Recognition Policy (FY2026)\r\n    author: human:jsmith@acme\r\n    last_modified: 2026-06-15\r\n---\r\n\r\n# Schema\r\n\r\n| Column         | Type          | Description                                                                            |\r\n|----------------|---------------|----------------------------------------------------------------------------------------|\r\n| `order_id`     | STRING        | Globally unique order id. [^warehouse-schema]                                          |\r\n| `order_ts`     | TIMESTAMP     | Order placement time in UTC; drives fiscal-year assignment. [^revenue-policy]          |\r\n| `order_status` | STRING        | Revenue is recognized only at `&amp;#x27;delivered&amp;#x27;` and after the 30-day return window. [^revenue-policy] |\r\n| `net_amount`   | NUMERIC(18,4) | `gross_amount - discount_amount`. The recognized-revenue amount per policy. [^revenue-policy] |&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe3122ea910&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Each of those families answers one of the five questions.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Provenance: sources, not a score&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The new&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;sources&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; field records the materials a concept derives from: an external doc, a bundle-relative path, or even a scope descriptor like "all queries in project X." At the same time, an entry can carry objective &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;credibility signals&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;author&lt;/code&gt;&lt;code style="vertical-align: baseline;"&gt;, &lt;/code&gt;&lt;code style="vertical-align: baseline;"&gt;usage_count&lt;/code&gt;&lt;code style="vertical-align: baseline;"&gt;, &lt;/code&gt;&lt;code style="vertical-align: baseline;"&gt;last_modified&lt;/code&gt;&lt;code style="vertical-align: baseline;"&gt;.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The deliberate choice here is what we &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;didn't&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; add. OKF records the signals, not a credibility score. A score is subjective, doesn't port across consumers, and goes stale the moment it's written. Instead, credibility is inferred from the signals by whoever is consuming (and can be dynamically scored by the consumer, if desired), the same way you'd trust a heavily used, recently updated, authoritatively authored source more than an anonymous one. And when the body cites a specific source, it does so with an ordinary markdown footnote keyed to the source &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;id&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; (&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;[^export-schema]&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;), so attribution is per-claim instead of a dangling list at the bottom.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Trust: &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;generated&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;verified&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Trust is established using two fields, kept deliberately distinct, because &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;who wrote something need not be who confirmed it&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;code style="vertical-align: baseline;"&gt;generated: { by, at }&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;: how the current content was produced, and when it last meaningfully changed.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;code style="vertical-align: baseline;"&gt;verified: [ { by, at } ]&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;: a list of independent confirmations against the sources or the underlying resource; a human sign-off, a nightly finance process, or both.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;From &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;verified&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, a consumer derives a &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;trust tier&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: no &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;verified&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; key is unverified; confirmation by machine actors only is machine-confirmed; confirmation by a &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;human:&amp;lt;id&amp;gt;&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; actor is human-reviewed. Tiers are advisory signals, not access control, but they let a consumer say "only surface human-reviewed metrics in the executive dashboard" as a frontmatter filter.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;In &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;acme_retail&lt;/strong&gt;&lt;strong style="vertical-align: baseline;"&gt;:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;metrics/revenue.md&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; is authored by the reference agent and verified by the VP of Finance, which places it in the human-reviewed tier. An executive-dashboard consumer configured with a trust-tier filter surfaces it; a throwaway testing environment can accept lower-tier concepts:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;type: Metric\r\ntitle: Revenue\r\ngenerated: { by: reference_agent/gemini-2.5-pro, at: 2026-06-30T14:00:00Z }\r\nverified:\r\n  - { by: human:jsmith@acme, at: 2026-07-01T09:00:00Z }&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe3122eaaf0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Freshness and lifecycle: &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;stale_after&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;status&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;OKF v0.2 establishes freshness and lifecycle with the &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;stale_after&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; and &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;status&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; fields. &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;status&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; moves a concept through &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;draft → stable → deprecated&lt;/code&gt;&lt;code style="vertical-align: baseline;"&gt; &lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;(absent means &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;stable&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;). &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;stale_after&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; is a single absolute date. We chose an absolute date over a relative TTL on purpose: staleness becomes a plain date comparison with no reference to &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;when&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; the concept happened to be read, which is exactly the kind of determinism a non-LLM consumer wants.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;In &lt;/strong&gt;&lt;strong style="vertical-align: baseline;"&gt;acme_retail&lt;/strong&gt;&lt;strong style="vertical-align: baseline;"&gt;:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;metrics/revenue.md&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; and &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;metrics/gross-margin.md&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; both carry &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;stale_after&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;: &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;2026-12-31&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; because Acme's finance team re-approves the underlying policies every January. On 2027-01-01 both concepts require re-verification against the FY2027 policy before serving.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;And &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;metrics/gross-margin-legacy.md&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; is&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt; &lt;/code&gt;&lt;code style="vertical-align: baseline;"&gt;status: deprecated&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;. Acme changed its cost allocation standard in Feb 2026 (the old formula excluded shipping and fulfillment from its cost of goods sold). The legacy definition is preserved for historical query reproducibility but not surfaced to new work:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;type: Metric\r\ntitle: Gross Margin (legacy, pre-FY2026)\r\nstatus: deprecated&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe3122ea610&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Attestation: Was this number computed the sanctioned way?&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Provenance answers where a claim came from. Attestation answers a harder question that matters the moment an agent reports a dollar figure: was this number produced the way we said it must be, or did the agent improvise its own SQL?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;OKF v0.2 introduces a new concept type, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;Attested Computation&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;. It carries not just what a value means but a sanctioned way to compute it, and the means to check that the sanctioned thing actually ran. Here is &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;acme_retail/computations/revenue-ytd.md&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;---\r\ntype: Attested Computation\r\ntitle: Revenue for a fiscal year\r\nruntime: bigquery\r\nparameters:\r\n  - { name: year, type: integer, required: true }\r\nexecutor:\r\n  resource: skills/run-on-bq.md\r\n  receipt: [job_id, executed_sql, result]\r\nattester:\r\n  resource: attesters/sql_equality.py\r\ngenerated: { by: reference_agent/gemini-2.5-pro, at: 2026-06-30T14:00:00Z }\r\nverified:\r\n  - { by: human:jsmith@acme, at: 2026-07-01T09:00:00Z }\r\nstatus: stable\r\nstale_after: 2026-12-31\r\nsources:\r\n  - id: revenue-policy\r\n    resource: policies/revenue-recognition.md\r\n    title: Revenue Recognition Policy (FY2026)\r\n    author: human:jsmith@acme\r\n    last_modified: 2026-06-15\r\n---\r\n\r\n# Computation\r\n\r\nSELECT\r\n  SUM(\r\n    CASE\r\n      WHEN o.currency = &amp;#x27;USD&amp;#x27; THEN o.net_amount\r\n      ELSE o.net_amount * fx.rate_to_usd\r\n    END\r\n  ) AS revenue_usd\r\nFROM `acme.sales.orders` AS o\r\nLEFT JOIN `acme.finance.fx_daily_rates` AS fx\r\n  ON fx.currency = o.currency\r\n  AND fx.rate_date = DATE(o.order_ts)\r\nWHERE o.order_status = &amp;#x27;delivered&amp;#x27;\r\n  AND DATE_DIFF(CURRENT_DATE(), DATE(o.order_ts), DAY) &amp;gt;= 30\r\n  AND EXTRACT(YEAR FROM o.order_ts) = @year&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe3122ea3d0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The agent may only fill the declared &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;parameters&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;; it must never author or edit the computation. A consumer runs the computation through the &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;executor&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, which returns a &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;receipt&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; (here: a BigQuery &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;job_id&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, the SQL that was actually executed, and the result). Then a deterministic, no-LLM &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;attester&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; inspects that receipt and returns a verdict: did the query that ran equal the sanctioned computation bound with the claimed parameters, and does the displayed value match the receipt's authoritative source? Because the comparison is mechanical, a rewritten query, a swapped computation file, or a mutated dependency fails the check.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;In &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;acme_retail&lt;/strong&gt;&lt;strong style="vertical-align: baseline;"&gt;:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; the attester at &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;attesters/sql_equality.py&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; canonicalizes both SQLs (strips comments, collapses whitespace, uppercases known keywords) and refuses to return &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;ok&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; if the canonical forms differ. A swapped table name, an added filter, a dropped JOIN all fail attestation. The consumer refuses to display the value when the verdict comes back false.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;While we used BigQuery (and SQL) in this example, the abstraction is deliberately flexible. Attested computations can correspond to invoking semantic models (in Looker, AtScale, or other systems), querying structured knowledge graphs, or even making arbitrary API calls.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Crucially, OKF records the computation and how to check it; it never executes anything itself. And attestation is distinct from verification: &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;verified&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; confirms the definition still matches policy (slow, doc-level, stored in the bundle); attestation confirms a single run produced the value correctly (per-call, runtime, never stored in the bundle). A stale definition can still attest cleanly; a freshly-verified definition still needs attestation on every run. That's why both exist.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;What we're releasing with v0.2&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;As with v0.1, the reference implementations are deliberately proofs of concept; nothing about OKF requires them. Here’s what’s changing in the Github repo:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;reference_agent&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; now emits the provenance and trust families as it generates, so a freshly-minted bundle arrives with &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;generated&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;sources&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;, and citations already in place.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;The static visualizer&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; surfaces trust tier, status, and staleness alongside the concept graph, so these signals are visible, not just parseable.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Updated sample bundles&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; (GA4 e-commerce, Stack Overflow, Bitcoin, and the acme retail example used in this blog post) carry the v0.2 fields.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;A Knowledge Catalog demo&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; shows a bundle round-tripping through Google Cloud's &lt;/span&gt;&lt;a href="https://cloud.google.com/products/knowledge-catalog"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Knowledge Catalog&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; (formerly Dataplex): clean OKF on disk, trust and provenance signals preserved through the catalog and back.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Compatibility&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;v0.2 is a minor version bump that is additive, backward-compatible, with two deliberate renames: &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;timestamp&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; is superseded by &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;generated.at&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, and the body &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;# Citations&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; list is superseded by &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;sources&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;; in both cases a v0.2 consumer can fall back to the v0.1 form. A v0.1 bundle drops in unchanged.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Where we go from here&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Read the spec (it's still short). Write a producer that emits trust signals for your source system. Write a consumer that filters on them. Try an &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;Attested Computation&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; against your own finance definitions. File issues, send PRs, propose extensions. A lingua franca is only as good as the number of parties who speak it, and now they can also check each other's work.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;OKF v0.2 spec, samples, and reference implementations: &lt;/span&gt;&lt;a href="https://github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Fri, 24 Jul 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/data-analytics/okf-v0-2-adds-trust-signals/</guid><category>Frontier and center</category><category>Data Analytics</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Open Knowledge format v0.2 tackles agentic trust</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/products/data-analytics/okf-v0-2-adds-trust-signals/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Sam McVeety</name><title>Tech Lead, Data Analytics, Engineering, Data Cloud</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Amir Hormati</name><title>Tech Lead, BigQuery, Engineering, Data Cloud</title><department></department><company></company></author></item><item><title>Your AI agents are ready. Is your data?</title><link>https://cloud.google.com/blog/topics/ai-infrastructure/state-of-ai-infrastructure-report-and-the-agentic-data-cloud/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;What’s one of the biggest bottlenecks stopping organizations from scaling&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; their &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;AI initiatives? It isn’t the capabilities of today’s models — it’s their access to business context and semantic meaning. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;In the agentic era, enterprises need to go beyond simply storing data to activating it with trusted context, moving from passive systems of record to proactive &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;systems of action&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;But AI agents operate with nonlinear speed; for example, a single prompt can trigger the agent to independently browse, query, and execute across multiple systems, placing stress on the underlying infrastructure. If the compute, networking, and storage layers aren't optimized for agentic AI, the data platform sitting on top of them will buckle.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;It’s no wonder that, according to our &lt;/span&gt;&lt;a href="https://cloud.google.com/resources/content/state-of-infrastructure-in-the-agentic-ai-era"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;State of infrastructure report&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;83% of organizations believe they require infrastructure upgrades&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; to support production-grade agentic AI systems.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/2_bR2eV1x.max-1000x1000.png"
        
          alt="2"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To solve this problem, we introduced the Agentic Data Cloud at Google Cloud Next 2026; unifying your data, AI models, and operational databases into a single System of Action. To make an Agentic Data Cloud work, it must be AI-native from the chip to the model. The underlying infrastructure must be able to accommodate agentic load.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/3_pykJFMI.max-1000x1000.png"
        
          alt="3"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="9vxs9"&gt;Google’s Agentic Data Cloud&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_with_image"&gt;&lt;div class="article-module h-c-page"&gt;
  &lt;div class="h-c-grid uni-paragraph-wrap"&gt;
    &lt;div class="uni-paragraph
      h-c-grid__col h-c-grid__col--8 h-c-grid__col-m--6 h-c-grid__col-l--6
      h-c-grid__col--offset-2 h-c-grid__col-m--offset-3 h-c-grid__col-l--offset-3"&gt;

      






  

    &lt;figure class="article-image--wrap-small
      
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/4_W9sTAZx.max-1000x1000.png"
        
          alt="4"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  





      &lt;p data-block-key="tre7b"&gt;Let’s explore how the right infrastructure foundation empowers an Agentic Data Cloud to solve the biggest data challenges organizations face today.&lt;/p&gt;&lt;h3 data-block-key="avld0"&gt;&lt;b&gt;Overcoming a lack of context&lt;/b&gt;&lt;/h3&gt;&lt;p data-block-key="15qo8"&gt;To be effective, agentic systems require access to context that is often found in fragmented data systems and legacy architectures. This can make it hard for agents to get this context, leading to incomplete, inaccurate results. In fact, our report found that &lt;b&gt;43% of IT leaders cite “difficulty integrating with legacy APIs and data sources”&lt;/b&gt; as their biggest agentic AI infrastructure gap.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;But organizations cannot simply move massive datasets and connect them to AI without increasing complexity and cost. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Our Agentic Data Cloud solves this by leveraging a &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;borderless &lt;/strong&gt;&lt;a href="https://cloud.google.com/products/lakehouse?hl=en"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Lakehouse&lt;/strong&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;running on open, flexible infrastructure. By accessing powerful native engines like BigQuery and Spanner over open standards (Apache Spark, Apache Iceberg), agents can read, reason over, and activate data across environments as if it were local, bypassing the latency and costs of traditional setups.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Escaping unnecessary manual work &lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Scaling agents on a patchwork of disconnected systems can create significant bottlenecks. In our research, &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;81% of leaders called out &lt;/strong&gt;&lt;strong style="vertical-align: baseline;"&gt;operational complexity and engineering overhead&lt;/strong&gt;&lt;strong style="vertical-align: baseline;"&gt; as top unforeseen expenses &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;when scaling AI&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;,&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; citing the time engineers spend doing manual work to patch together AI agents across disparate systems.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To move from thinking to doing, agents must be able to connect real-time data across both analytical and operational sources. This requires vertical integration. When an Agentic Data Cloud is built on an AI-native infrastructure where the models, data systems, and underlying accelerators are co-designed, there are fewer network hops and tooling is better integrated. This unified system allows an agent to reach an insight and trigger secure transactions without the typical engineering overhead.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Bringing trust and knowledge to the data&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;It’s not enough for agents to just discover and query data. To take safe, accurate actions, agents also need rich context and business logic. Yet, &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;36% of leaders cite a lack of specialized, high-throughput vector databases &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;used for AI model grounding, as a key infrastructure gap, hindering their ability to give agents context.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;In order to work to their full potential, agents need a foundation which is built to read and write data systems in real-time, including legacy ERPs and third-party CRMs. It also gives them the long-term memory to recall a user’s preference from, say, three weeks ago, while executing a complex task today. And without this real-time automation, agents have to re-process data for every single query.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To provide context for AI, organizations are using &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/data-analytics/introducing-the-google-cloud-knowledge-catalog?e=48754805"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Knowledge Catalog&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; to aggregate and enrich data in their data lakes, and enable agentic searches. By extracting meaning from unstructured data and automatically generating semantics, the catalog acts as an active reasoning layer. That catalog in turn, must be backed by high-throughput infrastructure, so that agents can retrieve the right context.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;The path forward&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To turn AI into a true competitive advantage, it’s time to build a connected, active data ecosystem. Giving your agents seamless access to all of your data is a must to move from pilots to production, and this must be supported by an infrastructure that can handle the demands of the agentic era. &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;The winners in 2026 and beyond won’t necessarily be the ones with the smartest agents. They’ll be the ones who can feed those agents the right knowledge — securely, cost-effectively, and at scale. Is your data ready for the agentic era? &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;See how leaders are taking an AI-optimized approach to architecture in the &lt;/span&gt;&lt;a href="https://cloud.google.com/resources/content/state-of-infrastructure-in-the-agentic-ai-era"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;State of infrastructure in the agentic AI era&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; report. &lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-related_article_tout"&gt;





&lt;div class="uni-related-article-tout h-c-page"&gt;
  &lt;section class="h-c-grid"&gt;
    &lt;a href="https://cloud.google.com/blog/products/compute/state-of-ai-infrastructure-report-overview/"
       data-analytics='{
                       "event": "page interaction",
                       "category": "article lead",
                       "action": "related article - inline",
                       "label": "article: {slug}"
                     }'
       class="uni-related-article-tout__wrapper h-c-grid__col h-c-grid__col--8 h-c-grid__col-m--6 h-c-grid__col-l--6
        h-c-grid__col--offset-2 h-c-grid__col-m--offset-3 h-c-grid__col-l--offset-3 uni-click-tracker"&gt;
      &lt;div class="uni-related-article-tout__inner-wrapper"&gt;
        &lt;p class="uni-related-article-tout__eyebrow h-c-eyebrow"&gt;Related Article&lt;/p&gt;

        &lt;div class="uni-related-article-tout__content-wrapper"&gt;
          &lt;div class="uni-related-article-tout__image-wrapper"&gt;
            &lt;div class="uni-related-article-tout__image" style="background-image: url('https://storage.googleapis.com/gweb-cloudblog-publish/images/Blog_1_Banner_2.max-500x500.png')"&gt;&lt;/div&gt;
          &lt;/div&gt;
          &lt;div class="uni-related-article-tout__content"&gt;
            &lt;h4 class="uni-related-article-tout__header h-has-bottom-margin"&gt;Report: 83% of organizations need to upgrade their infrastructure to support agentic AI&lt;/h4&gt;
            &lt;p class="uni-related-article-tout__body"&gt;Highlights from the State of AI Infrastructure report detailing how organizations are rethinking infrastructure to build resilient, fluid...&lt;/p&gt;
            &lt;div class="cta module-cta h-c-copy  uni-related-article-tout__cta muted"&gt;
              &lt;span class="nowrap"&gt;Read Article
                &lt;svg class="icon h-c-icon" role="presentation"&gt;
                  &lt;use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#mi-arrow-forward"&gt;&lt;/use&gt;
                &lt;/svg&gt;
              &lt;/span&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;/section&gt;
&lt;/div&gt;

&lt;/div&gt;</description><pubDate>Thu, 23 Jul 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/topics/ai-infrastructure/state-of-ai-infrastructure-report-and-the-agentic-data-cloud/</guid><category>Data Analytics</category><category>Databases</category><category>AI infrastructure</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/images/1_TdmG649.max-600x600.png" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Your AI agents are ready. Is your data?</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/images/1_TdmG649.max-600x600.png</image><site_name>Google</site_name><url>https://cloud.google.com/blog/topics/ai-infrastructure/state-of-ai-infrastructure-report-and-the-agentic-data-cloud/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Sirish Chandrasekaran</name><title>VP, Product Management</title><department></department><company></company></author></item><item><title>From maintenance to innovation: Checkout's migration to Managed Service for Apache Airflow</title><link>https://cloud.google.com/blog/products/data-analytics/how-checkout-com-tallies-data-with-cloud-composer-3/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Data engineering teams often face a “Day 2” operational reality after building a data platform: the ongoing work of maintaining the orchestrator itself.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For the Data Platform team at &lt;/span&gt;&lt;a href="https://www.checkout.com/" rel="noopener" target="_blank"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Checkout.com&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, managing a self-hosted Apache Airflow environment on another hyperscaler was consuming time the team wanted to spend elsewhere as server management, patching, and incident response were pulling focus from building pipelines.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;By migrating to &lt;/span&gt;&lt;a href="https://cloud.google.com/composer"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Managed Service for Apache Airflow (Gen 3)&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, Google Cloud’s fully managed Airflow service, Checkout.com transformed its reliability and cost structure. Here’s how they built a more scalable, cost-efficient, and robust data foundation.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;The starting point: self-managed Airflow&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Before the migration, Checkout.com ran Airflow on self-managed infrastructure. While functional, maintaining the underlying resources required significant attention. Patching, upgrades, and server management created regular interruptions.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Operational data from the past year illustrates some of the challenges the company was navigating:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Reducing operational friction:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; In its self-managed environment, Checkout.com faced stability challenges, particularly during high-load periods. &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Complex dependency management:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Upgrading packages and ensuring compatibility was a constant, manual struggle. With Managed Airflow (Gen 3), the company was able to simplify this by handling dependencies at the image level, ensuring seamless compatibility out-of-the-box during routine environment upgrades.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;DAG sync time:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Syncing DAGs to the scheduler took approximately six minutes after deployment to S3, which affected iteration speed.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Manual processes:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Scaling required manual intervention, and onboarding new teams meant manually creating secrets and variables for dbt.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;The solution: Managed Service for Apache Airflow (Gen 3)&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Checkout.com’s team migrated to Managed Airflow to offload infrastructure responsibility and take advantage of Google Cloud's managed scalability. The results were immediate and measurable across three areas: reliability, cost, and developer velocity.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/checkout-managed-airflow-chart.max-1000x1000.png"
        
          alt="checkout-managed-airflow-chart"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h4&gt;&lt;span style="vertical-align: baseline;"&gt;Dynamic scaling in action&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;In the previous elastic container service setup, the team allocated the maximum number of workers required for peak loads. This meant paying for peak capacity around the clock, regardless of actual usage.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Managed Airflow provides built-in dynamic scaling, eliminating the need for manual resource management. The environment automatically adjusts the number of workers based specifically on the workload demands. When tasks spike, the system scales up; when they drop, it scales down to save resources. Similarly, moving from fixed provisioning to dynamic scaling reduced monthly costs by an estimated 30%.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="vertical-align: baseline;"&gt;Reliability and DAG isolation&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Achieving increased stability was a primary driver for Checkout.com’s migration since in the past, a single problematic DAG could affect its entire environment. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Managed Airflow introduced a number of critical architecture improvements:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;DAG isolation:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Each DAG runs in its own execution environment. If one DAG fails or consumes excessive resources, it doesn’t affect the entire environment.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Managed operations:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Google Cloud handles patching and upgrades during scheduled windows, removing the need for manual upgrade management.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Improved visibility:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Integration with &lt;/span&gt;&lt;a href="https://cloud.google.com/monitoring"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud Monitoring&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; and &lt;/span&gt;&lt;a href="https://cloud.google.com/logging"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Cloud Logging&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; provides clear visibility into task execution. Engineers can now debug issues independently without escalating to the platform team.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="vertical-align: baseline;"&gt;Faster developer workflows&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The migration also improved day-to-day workflows for &lt;/span&gt;&lt;a href="http://checkout.com" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Checkout.com&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;’s data engineers.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Faster deployments:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Using &lt;/span&gt;&lt;a href="https://cloud.google.com/storage"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Cloud Storage&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; for DAGs enabled near-instant syncing.&lt;/span&gt;&lt;/li&gt;
&lt;li role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Simpler onboarding:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Teams no longer needed platform support to create variables before onboarding.&lt;/span&gt;&lt;/li&gt;
&lt;li role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Modernizing dbt execution:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; One of the company’s most significant wins was changing how it runs dbt. Previously, its engineers had to manually install and manage complex virtual environments for every supported dbt version. By leveraging containerized dbt runs, Managed Airflow (Gen 3) eliminates dependency bottlenecks. This ensures complete dependency isolation, allowing teams to run any required dbt model with minimal setup and no manual infrastructure overhead.&lt;/span&gt;&lt;/li&gt;
&lt;li role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Environment updates:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; The company no longer needs to redeploy the entire Airflow environment to add new roles or update Python packages.&lt;/span&gt;&lt;/li&gt;
&lt;li role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;AI-powered troubleshooting with &lt;/strong&gt;&lt;a href="https://docs.cloud.google.com/composer/docs/composer-3/troubleshooting-dags#investigations"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini Cloud Assist&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;:&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;In a self-managed environment, a failed task often triggered a frantic hunt through fragmented logs and metrics. With Managed Airflow, Checkout.com can initiate a Gemini investigation directly from its Airflow DAG UI in the Google Cloud console.&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Gemini doesn't just provide generic error messages; it generates a scorecard that evaluates different hypotheses with both supporting and contradictory evidence, which can drastically reduce mean time to recovery.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Conclusion&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For Checkout.com, the move to Managed Airflow (Gen 3) marked a strategic shift, one that freed its engineers to focus on delivering value.&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 40px;"&gt;&lt;span style="vertical-align: baseline;"&gt;"With Managed Service for Apache Airflow, we’ve achieved significant improvements in efficiency, scalability, and reliability. Managed infrastructure, automated scaling, faster deployments, and isolated execution environments have transformed how we operate." &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;— &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Keisi Mancellari, Data Platform Engineer, Checkout.com&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;With a stable, scalable, and cost-efficient platform in place, Checkout.com is now able to  focus on the future of its data pipelines, confident that its orchestration layer is ready for whatever comes next.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Learn more about&lt;/span&gt; &lt;a href="https://cloud.google.com/composer"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Managed Service for Apache Airflow&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; and how it can support your data platform.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;sub&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;Special thanks to the following contributors to this post: Serge Bouschet and&lt;/span&gt;&lt;span data-rich-links='{"per_n":"Keisi Mancellari","per_e":"keisi.mancellari@checkout.com","type":"person"}' style="font-style: italic; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;a href="mailto:keisi.mancellari@checkout.com"&gt;&lt;span data-rich-links='{"per_n":"Keisi Mancellari","per_e":"keisi.mancellari@checkout.com","type":"person"}' style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;Keisi Mancellari&lt;/span&gt;&lt;/a&gt;&lt;/sub&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Wed, 22 Jul 2026 14:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/data-analytics/how-checkout-com-tallies-data-with-cloud-composer-3/</guid><category>Customers</category><category>Retail</category><category>Financial Services</category><category>Data Analytics</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/images/checkout-airflow-migration-google-cloud-2.max-600x600.png" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>From maintenance to innovation: Checkout's migration to Managed Service for Apache Airflow</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/images/checkout-airflow-migration-google-cloud-2.max-600x600.png</image><site_name>Google</site_name><url>https://cloud.google.com/blog/products/data-analytics/how-checkout-com-tallies-data-with-cloud-composer-3/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Piotr Wieczorek</name><title>Lead Product Manager, Managed Airflow</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Michelle Liu</name><title>Customer Engineer</title><department></department><company></company></author></item><item><title>Level Up Your Column-level Security: Using IAM Data Governance Tags in BigQuery</title><link>https://cloud.google.com/blog/products/data-analytics/level-up-your-column-level-security-using-iam-data-governance-tags-in-bigquery/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Many BigQuery customers rely on policy tags for protecting their sensitive information in BigQuery. Policy tags were the go-to solution for applying column-level access controls, allowing only users with the right permission to view sensitive columns like personally identifiable information (PII). It was a robust and effective system — for its time.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;However, data ecosystems have grown in complexity, and the tools we use to help secure them need to evolve with them. New challenges include creating and managing a taxonomy that supports multiple tags across multiple regions and locations, enabling disaster recovery, and integrating with a broad centralized governance strategy.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To help you meet the needs of today’s data ecosystems, we're excited to introduce the &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;preview of&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;data governance tags&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; in BigQuery&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;. &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;Built on Google Cloud's Identity and Access Manager’s (IAM) Resource Manager infrastructure, data governance tags provide a scalable, and robust method to help you manage access controls and protect your BigQuery column data.&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;What are IAM data governance tags?&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Data governance tags are a special type of &lt;/span&gt;&lt;a href="https://cloud.google.com/resource-manager/docs/tags/tags-overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Resource Manager tags&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;.  You can create it by setting the purpose field to DATA_GOVERNANCE when creating a tag key in IAM, you designate it for use in BigQuery column-level security. You can create a hierarchical tree of data governance tags specifically for column-data governance purposes and apply them directly to your BigQuery columns. &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Why use data governance tags for column-level security?&lt;/span&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Global scope, regional enforcement&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;:&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;Unlike policy tags (which are regional-only), data governance tags are global. You can define a single tag key:value pair (like “data_sensitivity:high”) at the organization level and use it across any project or region in your organization.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Managed disaster recovery&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Security policies should persist during a failover. Data governance tags and their associated data policies are automatically replicated to secondary regions. If you need to switch regions, your security posture moves with you automatically.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Hierarchical security&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;:&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;You can now build a tree of tags up to five levels deep. This allows for inheritance and more granular classification (such as PII &amp;gt; Financial &amp;gt; CreditCardNumber).&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Decoupled governance&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;:&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;You can tag your data to organize and classify it before you decide to enforce security. Access control only kicks in once you define a data policy for that tag, giving your team more flexibility during data onboarding&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Three steps to column-level security&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Step 1: Create the tag key and values&lt;/strong&gt;&lt;/p&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;1. &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Create data governance tag key&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;:&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;First you create an IAM tag key in Console&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;, &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;gcloud CLI, or API. The magic happens when you specify the purpose field as &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;--purpose=&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;DATA_GOVERNANCE&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; for the tag key. This key change tells Google Cloud that this tag will be used for column-level security in BigQuery.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Example: Creating a Data Governance tag key named &amp;quot;data_class&amp;quot;\r\ngcloud resource-manager tags keys create data_class \\\r\n  --parent=projects/my-governance-project \\\r\n  --purpose=DATA_GOVERNANCE&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe310167820&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;2. &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Create tag values&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Once your data governance tag key has been created, you need to create specific tag values under the key that you will use to categorize/classify your column data.  One of the useful features of data governance tags is the ability to build a hierarchical tree of tag values. The tag-values tree allows you to create broad categories and then drill down into specific categories based on data type. You can go up to five levels deep for granular access control.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Level 1: Create a tag value called &amp;quot;pii&amp;quot;\r\ngcloud resource-manager tags values create pii \\\r\n  --parent=my-governance-project/data_class\r\n\r\n\r\n# Level 2: Create a child value under &amp;quot;pii&amp;quot; for &amp;quot;private&amp;quot; data\r\ngcloud resource-manager tags values create private \\\r\n  --parent=my-governance-project/data_class/pii\r\n\r\n\r\n# Level 3: Create another child tag value for &amp;quot;email&amp;quot; under &amp;quot;private&amp;quot;\r\n# You can go up to 5 levels deep for granular control\r\ngcloud resource-manager tags values create email \\\r\n  --parent=my-governance-project/data_class/private&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe3101678b0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Step 2: Attach tags to your columns via JSON schema&lt;/strong&gt;&lt;/p&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;1. &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Export your existing schema&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For existing tables, the most efficient way to manage tags is by updating the table schema using a JSON file and using API or BQ CLI because it allows you to tag multiple columns at once.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Save the current table schema to a local JSON file.\r\nbq show --schema --format=prettyjson my_project:my_dataset.my_table &amp;gt; schema.json&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe310167b20&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;2. &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Add the dataGovernanceTags to your JSON file&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Open schema.json and add the tag mapping to your sensitive columns. Note the use of the namespaced key and the short name for the value.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;[\r\n  {\r\n    &amp;quot;name&amp;quot;: &amp;quot;user_email&amp;quot;,\r\n    &amp;quot;type&amp;quot;: &amp;quot;STRING&amp;quot;,\r\n    &amp;quot;dataGovernanceTagsInfo&amp;quot;: {\r\n      &amp;quot;dataGovernanceTags&amp;quot;: {\r\n        &amp;quot;my-governance-project/data_class&amp;quot;: &amp;quot;email&amp;quot; \r\n      }\r\n    }\r\n  },\r\n  {\r\n    &amp;quot;name&amp;quot;: &amp;quot;phone_number&amp;quot;,\r\n    &amp;quot;type&amp;quot;: &amp;quot;STRING&amp;quot;,\r\n    &amp;quot;dataGovernanceTagsInfo&amp;quot;: {\r\n      &amp;quot;dataGovernanceTags&amp;quot;: {\r\n        &amp;quot;my-governance-project/data_class&amp;quot;: &amp;quot;private&amp;quot;\r\n      }\r\n    }\r\n  },\r\n  {\r\n    &amp;quot;name&amp;quot;: &amp;quot;government_id&amp;quot;,\r\n    &amp;quot;type&amp;quot;: &amp;quot;STRING&amp;quot;,\r\n    &amp;quot;dataGovernanceTagsInfo&amp;quot;: {\r\n      &amp;quot;dataGovernanceTags&amp;quot;: {\r\n        &amp;quot;my-governance-project/data_class&amp;quot;: &amp;quot;pii&amp;quot;\r\n      }\r\n    }\r\n  }\r\n]&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe310167250&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;3. &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Update the table:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Apply the schema to your BigQuery table.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Overwrite the table schema with your newly tagged JSON file.\r\nbq update --project_id=my-data-project --schema=schema.json my_dataset.my_table&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe3101679a0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Alternatively you can also use SQL to bind data governance tags to BigQuery table columns.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;CREATE OR REPLACE TABLE my_dataset.my_table(\r\n  user_email STRING\r\n  OPTIONS (\r\n    data_governance_tags = [(&amp;#x27;my-governance-project/data_class&amp;#x27;, &amp;#x27;email&amp;#x27;)]),\r\n  );\r\nALTER TABLE my_dataset.my_table\r\nALTER COLUMN phone_number\r\n  SET OPTIONS (\r\n    data_governance_tags = [(&amp;#x27;my-governance-project/data_class&amp;#x27;, &amp;#x27;private&amp;#x27;)]);\r\nALTER TABLE my_dataset.my_table\r\nADD COLUMN government_id\r\n  STRING\r\n    OPTIONS (\r\n      data_governance_tags = [(&amp;#x27;my-governance-project/data_class&amp;#x27;, &amp;#x27;pii&amp;#x27;)]);&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe310167f40&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;You can also remove a column tag by setting it to [], for example:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;ALTER TABLE my_dataset.my_table\r\nALTER COLUMN phone_number\r\n  SET OPTIONS (\r\n    data_governance_tags = []\r\n);&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe310167700&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;You can use information_schema COLUMNS view to see the columns tags:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;SELECT\r\n  column_name,\r\n  data_governance_tags[SAFE_OFFSET(0)].key AS tag_key,\r\n  data_governance_tags[SAFE_OFFSET(0)].value AS tag_value,\r\nFROM `my_project.my_dataset.INFORMATION_SCHEMA.COLUMNS`\r\nWHERE table_name = &amp;#x27;my_table&amp;#x27;&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe310167520&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The result is similar to the following:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;+---------------+----------------------------------+-----------+\r\n|  column_name  |            tag_key               | tag_value |\r\n+---------------+----------------------------------+-----------+\r\n| user_email    | my-governance-project/data_class | email     |\r\n| phone_number  | my-governance-project/data_class | private   |\r\n| government_id | NULL                             | NULL      |\r\n+---------------+----------------------------------+-----------+&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe3101679d0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Step 3: Create data policies&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Finally, define a BigQuery &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;data policy&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; to govern access to these tagged columns. These policies explicitly reference the tag values you attached previously. Note that, &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;while data governance tags are global, &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;data policies are regional&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To protect your data, the policy must be created in the same region where your BigQuery table is located&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;. Once the policy is defined, access is only granted to the specified grantees; all others will be denied access to the sensitive column data.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Also, keep in mind that security in BigQuery is layered. For a data policy to be effective, the users (grantees) &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;must first&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; possess base-level access to the table itself (typically via a role like &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;roles/bigquery.dataViewer&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;). Data policy then acts as a second security layer, determining whether they view the raw, sensitive column data or a masked, obfuscated version.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Masking policy for ‘pii’ tagged column-data (SHA256 Masking):&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;curl --request POST &amp;quot;https://bigquerydatapolicy.googleapis.com/v2/projects/myProject/locations/us-east1/dataPolicies&amp;quot; \\\r\n  --header &amp;quot;Authorization: Bearer $(gcloud auth print-access-token)&amp;quot; \\\r\n  --header \&amp;#x27;Accept: application/json\&amp;#x27; \\\r\n  --header \&amp;#x27;Content-Type: application/json\&amp;#x27; \\\r\n  --data \&amp;#x27;{\r\n  &amp;quot;dataPolicy&amp;quot;: {\r\n    &amp;quot;dataPolicyType&amp;quot;: &amp;quot;DATA_MASKING_POLICY&amp;quot;,\r\n    &amp;quot;dataMaskingPolicy&amp;quot;: { &amp;quot;predefinedExpression&amp;quot;: &amp;quot;SHA256&amp;quot; },\r\n    &amp;quot;grantees&amp;quot;: [ &amp;quot;principalSet://goog/group/grp-sales@corp.com&amp;quot; ],\r\n    &amp;quot;dataGovernanceTag&amp;quot;: { &amp;quot;key&amp;quot;: &amp;quot;myProject/data_class&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;pii&amp;quot; }\r\n  },\r\n  &amp;quot;dataPolicyId&amp;quot;: &amp;quot;masking_policy_for_data_class_pii&amp;quot;\r\n}\&amp;#x27; \\\r\n  --compressed&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe31035c460&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt; Raw access policy for ‘pii’ tagged column-data&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;curl --request POST &amp;quot;https://bigquerydatapolicy.googleapis.com/v2/projects/myProject/locations/us-east1/dataPolicies&amp;quot; \\\r\n  --header &amp;quot;Authorization: Bearer $(gcloud auth print-access-token)&amp;quot; \\\r\n  --header \&amp;#x27;Accept: application/json\&amp;#x27; \\\r\n  --header \&amp;#x27;Content-Type: application/json\&amp;#x27; \\\r\n  --data \&amp;#x27;{\r\n  &amp;quot;dataPolicy&amp;quot;: {\r\n    &amp;quot;dataPolicyType&amp;quot;: &amp;quot;RAW_DATA_ACCESS_POLICY&amp;quot;,\r\n    &amp;quot;grantees&amp;quot;: [ &amp;quot;principal://goog/subject/abc@xyz.com&amp;quot; ],\r\n    &amp;quot;dataGovernanceTag&amp;quot;: { &amp;quot;key&amp;quot;: &amp;quot;myProject/data_class&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;pii&amp;quot; }\r\n  },\r\n  &amp;quot;dataPolicyId&amp;quot;: &amp;quot;raw_access_policy_data_class_pii&amp;quot;\r\n}\&amp;#x27; \\\r\n  --compressed&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe310a68d90&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Masking policy for “private” tagged column data (NULL Masking):&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;curl --request POST &amp;quot;https://bigquerydatapolicy.googleapis.com/v2/projects/myProject/locations/us-east1/dataPolicies&amp;quot; \\\r\n  --header &amp;quot;Authorization: Bearer $(gcloud auth print-access-token)&amp;quot; \\\r\n  --header \&amp;#x27;Accept: application/json\&amp;#x27; \\\r\n  --header \&amp;#x27;Content-Type: application/json\&amp;#x27; \\\r\n  --data \&amp;#x27;{\r\n  &amp;quot;dataPolicy&amp;quot;: {\r\n    &amp;quot;dataPolicyType&amp;quot;: &amp;quot;DATA_MASKING_POLICY&amp;quot;,\r\n    &amp;quot;dataMaskingPolicy&amp;quot;: { &amp;quot;predefinedExpression&amp;quot;: &amp;quot;ALWAYS_NULL&amp;quot; },\r\n    &amp;quot;grantees&amp;quot;: [ &amp;quot;principal://goog/subject/abc@xyz.com&amp;quot; ],\r\n    &amp;quot;dataGovernanceTag&amp;quot;: { &amp;quot;key&amp;quot;: &amp;quot;myProject/data_class&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;private&amp;quot; }\r\n  },\r\n  &amp;quot;dataPolicyId&amp;quot;: &amp;quot;null_policy_data_class_private&amp;quot;\r\n}\&amp;#x27; \\\r\n  --compressed&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe310a68e80&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;With these three steps, your column data is now protected. The next time a principal queries your BigQuery table, our authorization engine automatically evaluates their identity against your data policies. If the principal is part of the policy, they get to see the masked or raw data as per the policy; if they are not, then they will be denied access. &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Get started today&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Data governance tags are a powerful new tool to enhance your data security and governance strategy in BigQuery. We are continuously working to enhance data governance capabilities in BigQuery. Future updates include support for using SQL to create tags and tag based policies, ability to attach multiple tags to a single column,  ability to define policies based on combinations of tags, and deeper integrations with services like Knowledge Catalog.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;You can start tagging your columns and defining fine-grained access controls at scale. To learn more, dive into the &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/tags#data-governance-tags"&gt;&lt;span style="vertical-align: baseline;"&gt;Data Governance Tags documentation&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Fri, 17 Jul 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/data-analytics/level-up-your-column-level-security-using-iam-data-governance-tags-in-bigquery/</guid><category>BigQuery</category><category>Data Analytics</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Level Up Your Column-level Security: Using IAM Data Governance Tags in BigQuery</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/products/data-analytics/level-up-your-column-level-security-using-iam-data-governance-tags-in-bigquery/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Vignesh Rajamani</name><title>Product Manager</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Pramod Busam</name><title>Software Engineer</title><department></department><company></company></author></item><item><title>Bridging the gap between SQL and Python with BigQuery and the %%bqsql magic</title><link>https://cloud.google.com/blog/products/data-analytics/bridge-sql-and-python-with-bigquery/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Data scientists and data engineers often find themselves caught between two worlds: SQL and Python. Some find SQL more intuitive, especially when combined with a powerful engine like BigQuery to process data at scale. Others find it easier to work in Python with its rich ecosystem of libraries and runtimes. Historically, using these languages together in one notebook required moving data from SQL results to in-memory and writing from Python memory to temporary tables for SQL to access.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;To solve this friction, the Google Cloud team introduced &lt;/strong&gt;&lt;a href="https://docs.cloud.google.com/colab/docs/sql-cells"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;SQL cells in Colab Enterprise&lt;/strong&gt;&lt;/a&gt;&lt;strong style="vertical-align: baseline;"&gt;. Now, we are expanding that seamless experience to the broader open-source ecosystem. With the &lt;/strong&gt;&lt;a href="https://dataframes.bigquery.dev/notebooks/getting_started/magics.html" rel="noopener" target="_blank"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;%%bqsql IPython cell magic&lt;/strong&gt;&lt;/a&gt;&lt;strong style="vertical-align: baseline;"&gt;, you can now effortlessly chain data processing workloads across SQL and Python code cells.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Thanks to open-source packages like Jupyter, pandas, BigFrames, and the &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/sandbox"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery sandbox&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, you can follow all steps in this guide for free* and without a credit card.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*See the &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/sandbox"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;BigQuery sandbox&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt; documentation for limitations.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;Setting up your environment&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To get started,&lt;/span&gt;&lt;/p&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;1. Enable the &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/sandbox"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery sandbox&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. Make note of your Google Cloud project ID.&lt;/span&gt;&lt;/p&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;2. Set up a local Python development environment, or alternatively, open &lt;/span&gt;&lt;a href="https://colab.research.google.com/github/googleapis/google-cloud-python/blob/main/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;this notebook in Colab&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, which has a Python environment already installed. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To set up a local python environment, see the &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/python/docs/setup"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;steps on Google Cloud Documentation&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. Continue with the following steps, if you choose to set up a local python environment, else jump to the &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;next section&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;3. Activate the &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;venv&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; you created in the previous step to isolate Python dependencies.&lt;/span&gt;&lt;/p&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;On Linux or macOS, use these commands (update to your preferred Python version):&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;. ./env/bin/activate&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe311402d00&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;4. &lt;span style="vertical-align: baseline;"&gt;Install the Jupyter, bigframes, and python-calamine packages.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;pip install --upgrade jupyterlab bigframes python-calamine&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe311402ca0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;5. Start Jupyter Lab.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;jupyter lab&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe3114024f0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;6. Open a web browser to the URL listed in the output. It will be something like &lt;/span&gt;&lt;a href="http://localhost:8888/lab?token=somesupersecretvaluehere" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;http://localhost:8888/lab?token=somesupersecretvaluehere&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; .&lt;/span&gt;&lt;/p&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;7. Create a new notebook using the Jupyter Lab UI (File &amp;gt; New &amp;gt; Notebook). Alternatively, download the &lt;/span&gt;&lt;a href="https://github.com/googleapis/google-cloud-python/blob/main/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;notebook associated with this tutorial from the BigQuery DataFrames GitHub repository&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; and open it.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="vertical-align: baseline;"&gt;Accessing and preparing local data&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;In this tutorial, you'll analyze the &lt;/span&gt;&lt;a href="https://www.ers.usda.gov/data-products/wheat-data" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;USDA wheat data&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. Pandas will download the data, mimicking a typical local data analysis workflow.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;url = &amp;quot;https://www.ers.usda.gov/media/5706/wheat-data-all-years.xlsx?v=52690&amp;quot;&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe311402670&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Next, read the data into a local pandas DataFrame. Use the &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;pyarrow&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;dtype_backend&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; when preparing local pandas data for SQL processing. This ensures more consistent handling of NULL values and seamless schema mapping when you hand off the data to the BigQuery SQL engine. For this example, read the 'Table05' sheet, which contains annual wheat supply and disappearance data:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;import pandas as pd\r\n\r\ndf = pd.read_excel(\r\n    url,\r\n    sheet_name=&amp;quot;Table05&amp;quot;,\r\n    dtype_backend=&amp;quot;pyarrow&amp;quot;,\r\n    engine=&amp;quot;calamine&amp;quot;,\r\n    header=1,  # Skip the first row.\r\n)\r\ndf&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe311402dc0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Before querying the local DataFrame with SQL, ensure that the column names are SQL-friendly. BigQuery supports &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/schemas#flexible-column-names"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;flexible column names&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, allowing most unicode characters, but special characters like "/" and "" must be removed or replaced.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;df.columns = [name.replace(&amp;quot;/&amp;quot;, &amp;quot;&amp;quot;) for name in df.columns]\r\ndf&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe3114022b0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Perform a basic filter using standard Python/pandas syntax to remove rows with missing data. This represents the initial Python-only stage of a processing chain.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;full_rows = df[~df[&amp;#x27;Beginning stocks&amp;#x27;].isna()]\r\nfull_rows&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe311402190&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;Initializing the BigQuery SQL magic&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The BigQuery DataFrames library provides the &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;%%bqsql&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; magic, which acts as the bridge between your Python and SQL environments. It allows the BigQuery query engine to directly reference and query your local pandas DataFrames (by implicitly uploading them as temporary tables) as well as actual BigQuery tables and external tables in GCS (Parquet, Iceberg, CSV).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To enable this integration in your notebook, load the &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;bigframes&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; extension.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;%load_ext bigframes&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe310a2a130&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Note:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; The extension is pre-loaded in BigQuery Studio and Colab environments.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To ensure the correct Google Cloud project is billed for query usage, including free tier usage, configure the project ID used by the magics. Even in the free sandbox tier, a project ID is required to allocate query resources. If you don't set it explicitly, BigFrames will try to discover it from your environment (e.g., your Application Default Credentials).&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;import bigframes.pandas as bpd\r\n\r\nbpd.options.bigquery.project = &amp;quot;your-project-id-here&amp;quot;&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe310a2a430&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;span style="vertical-align: baseline;"&gt;Querying local pandas DataFrames with SQL&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;With the project configured, you can now run SQL queries directly against your local pandas DataFrame (&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;full_rows&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;) as if it were a table in BigQuery. Simply reference the variable name inside braces &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;{full_rows}&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; in your SQL query. You may be prompted for an authorization code, which you'll obtain by following the link provided as part of the same message.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;%%bqsql\r\nSELECT * FROM {full_rows}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe3108363d0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;span style="vertical-align: baseline;"&gt;Chaining SQL and Python: Saving SQL Results&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The true power of the &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;%%bqsql&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; magic lies in chaining. By providing a destination variable name as an argument to &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;%%bqsql&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; (e.g., &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;%%bqsql destination_var&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;), the query result is saved as a BigQuery DataFrame to that variable.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;This DataFrame lives on the BigQuery engine but behaves like a pandas DataFrame in Python. You can immediately use it in subsequent Python cells, or reference it again in another SQL cell. This allows you to build a multi-step, hybrid processing pipeline.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Filter the data to only yearly entries using SQL, and save the result into a new BigFrames DataFrame named yearly:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;%%bqsql yearly\r\nSELECT *\r\nFROM {full_rows}\r\nWHERE STARTS_WITH(`Time period`, &amp;#x27;MY&amp;#x27;)&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe310836100&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Now, you can chain another SQL operation. Reference the yearly BigFrames DataFrame that you just created, extract the year using SQL regular expressions, cast it to a timestamp, and save the results into a new BigFrames DataFrame named &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;timeseries&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;%%bqsql timeseries\r\nSELECT\r\n  * EXCEPT (`Marketing year 1`),\r\n  TIMESTAMP(CONCAT(\r\n    REGEXP_EXTRACT(`Marketing year 1`, r&amp;#x27;([0-9]+)\\/&amp;#x27;),\r\n    &amp;#x27;-01-01&amp;#x27;)) AS `year`\r\nFROM {yearly}&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe310836d00&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Notice how you are building a chain from Python to SQL and back again.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="vertical-align: baseline;"&gt;Returning to Python for visualization&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Now that you've completed some SQL transformations, you can chain back to Python for visualization. Because BigFrames DataFrames implement the pandas API, you can call standard visualization methods (like &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;.plot.line()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;) directly on the timeseries DataFrame without downloading the full dataset first. The computations happen in BigQuery, and only the summarized chart data is sent back to the notebook.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;timeseries.set_index(&amp;#x27;year&amp;#x27;).sort_index().plot.line()&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe3108365b0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Alternatively, download the time series as a pandas DataFrame to use with your visualization library of choice.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;pddf = timeseries.set_index(&amp;#x27;year&amp;#x27;).sort_index().to_pandas()&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe310836880&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;Why a hybrid pipeline matters&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;By pairing BigQuery DataFrames with  &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;%%bqsql&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; magics, you have built a powerful, interoperable pipeline that seamlessly transitions between SQL and Python.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;local pandas &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;df&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; and &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;full_rows&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; DataFrames&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;to SQL filter&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;to BigFrames &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;yearly&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; DataFrame&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;to SQL transform&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;to BigFrames &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;timeseries&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; DataFrame&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;to Python data visualization&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;to local pandas DataFrame.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;This architecture offers key advantages:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Optimal tool selection&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Use SQL for what it does best (heavy aggregations, window functions, and complex joins) and Python for what it does best (visualization, statistical modeling, and ML orchestration).&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Improved code readability&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Instead of writing massive SQL queries with dozens of common table expressions (CTEs), or doing complex aggregations using pandas APIs which are often convoluted compared to SQL, you can split your pipeline into logical steps, alternating between SQL and Python.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Seamless scaling&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: The exact same &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;%%bqsql&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; code can scale from a tiny local pandas DataFrame to billions of rows in a production BigQuery table. You only need to swap the initial local pandas DataFrame with a BigQuery DataFrame reference.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="vertical-align: baseline;"&gt;Next steps and scaling up&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Check out the &lt;/span&gt;&lt;a href="https://dataframes.bigquery.dev/user_guide/index.html" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;other notebooks&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; in the &lt;/span&gt;&lt;a href="https://dataframes.bigquery.dev/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigFrames API reference site&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. In addition to the &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;%%bqsql&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; cell magic, BigFrames also registers a &lt;/span&gt;&lt;a href="https://dataframes.bigquery.dev/reference/index.html#pandas-extensions" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery Accessor&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; on standard pandas DataFrames, allowing you to run SQL scalar functions directly on local pandas data.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For example, you can call powerful Google Cloud community &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/user-defined-functions"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;UDFs&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; from &lt;/span&gt;&lt;a href="https://github.com/GoogleCloudPlatform/bigquery-utils/tree/master/udfs#bigquery-udfs" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery Utils&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;a href="https://unytics.io/bigfunctions/bigfunctions/#function-categories" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigFunctions&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, or &lt;/span&gt;&lt;a href="https://docs.carto.com/data-and-analysis/analytics-toolbox-for-bigquery" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;CARTO Analytics Toolbox for BigQuery&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; using &lt;/span&gt;&lt;a href="https://dataframes.bigquery.dev/reference/api/bigframes.bigquery.sql_scalar.html" rel="noopener" target="_blank"&gt;&lt;code style="text-decoration: underline; vertical-align: baseline;"&gt;df.bigquery.sql_scalar(...)&lt;/code&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;import pandas as pd\r\nimport bigframes.pandas as bpd  # Registers the accessor\r\n\r\nbpd.options.bigquery.project = &amp;quot;your-project-id&amp;quot;\r\ndf = pd.DataFrame({&amp;quot;x&amp;quot;: [1, 2, 3]})\r\npandas_s = df.bigquery.sql_scalar(&amp;quot;`bqutil`.fn.cw_setbit({x}, 2)&amp;quot;)&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe310836c40&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;While the BigQuery sandbox offers a powerful environment to test these hybrid Python-SQL workflows for free, some advanced features like BigQuery Machine Learning (BQML) are restricted. By connecting a billing account to your Google Cloud project, you can unlock advanced capabilities such as the &lt;/span&gt;&lt;a href="https://dataframes.bigquery.dev/reference/api/bigframes.bigquery.ai.forecast.html#bigframes.bigquery.ai.forecast" rel="noopener" target="_blank"&gt;&lt;code style="text-decoration: underline; vertical-align: baseline;"&gt;bigframes.bigquery.ai.forecast&lt;/code&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; function to predict time-series data using Google's state-of-the-art foundational models directly from your SQL/Python chain.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;forecasted_pandas_df = (\r\n    pddf\r\n    .reset_index(drop=False)\r\n    .bigquery.ai.forecast(\r\n        data_col=&amp;quot;Production&amp;quot;,\r\n        timestamp_col=&amp;quot;year&amp;quot;,\r\n        horizon=10,\r\n    )\r\n)\r\n\r\n# Plot the results\r\nforecasted_pandas_df_sorted = forecasted_pandas_df.sort_values(by=\&amp;#x27;forecast_timestamp\&amp;#x27;)\r\nplt.plot(pddf.index, pddf[\&amp;#x27;Production\&amp;#x27;], label=\&amp;#x27;Real Production\&amp;#x27;, color=\&amp;#x27;blue\&amp;#x27;)\r\nplt.plot(forecasted_pandas_df_sorted[\&amp;#x27;forecast_timestamp\&amp;#x27;], forecasted_pandas_df_sorted[\&amp;#x27;forecast_value\&amp;#x27;], label=\&amp;#x27;Forecasted Production\&amp;#x27;, color=\&amp;#x27;red\&amp;#x27;, linestyle=\&amp;#x27;--\&amp;#x27;)\r\nplt.fill_between(\r\n   forecasted_pandas_df_sorted[\&amp;#x27;forecast_timestamp\&amp;#x27;],\r\n   forecasted_pandas_df_sorted[\&amp;#x27;prediction_interval_lower_bound\&amp;#x27;],\r\n   forecasted_pandas_df_sorted[\&amp;#x27;prediction_interval_upper_bound\&amp;#x27;],\r\n   color=\&amp;#x27;red\&amp;#x27;,\r\n   alpha=0.2,\r\n   label=\&amp;#x27;Confidence Interval\&amp;#x27;\r\n)\r\n# ...\r\nplt.show()&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe310836eb0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/image1_NjiKU61.max-1000x1000.png"
        
          alt="image1"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The BigFrames team would love to hear your feedback on the hybrid Python-SQL experience:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Email&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: &lt;/span&gt;&lt;a href="mailto:bigframes-feedback@google.com"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;bigframes-feedback@google.com&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Issues&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: File bug reports or feature requests on the &lt;/span&gt;&lt;a href="https://github.com/googleapis/google-cloud-python/issues" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;open-source BigFrames repository&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Updates&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: To receive news and updates, subscribe to the &lt;/span&gt;&lt;a href="https://docs.google.com/forms/d/10EnDyYdYUW9HvelHYuBRC8L3GdGVl3rX0aroinbRZyc/edit?resourcekey=0-QUsnpzF91gm9hsp04rSA6Q" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigFrames email list&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Learn more:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Read the BigFrames API reference and user guides in the &lt;/span&gt;&lt;a href="https://dataframes.bigquery.dev/index.html" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;documentation&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Thu, 16 Jul 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/data-analytics/bridge-sql-and-python-with-bigquery/</guid><category>Data Analytics</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Bridging the gap between SQL and Python with BigQuery and the %%bqsql magic</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/products/data-analytics/bridge-sql-and-python-with-bigquery/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Tim Swena</name><title>TL for BigQuery DataFrames</title><department></department><company></company></author></item><item><title>How to Analyze and Govern Gemini Enterprise App Usage at Scale with BigQuery</title><link>https://cloud.google.com/blog/products/data-analytics/analyze-and-govern-gemini-enterprise-at-scale-with-bigquery/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;Deploying the &lt;/span&gt;&lt;a href="https://cloud.google.com/gemini-enterprise"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini Enterprise app&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; across an organization marks a transformative leap forward in workforce productivity, providing employees with an amazing, high-performance suite of agentic AI tools, search-grounded assistants, and specialized solutions like NotebookLM. As adoption grows to a large scale, it can introduce a critical administrative scale challenge: how to audit, govern, and extract insights from a massive volume of telemetry without getting bogged down in manual overhead. To help administrators succeed, Google Cloud provides comprehensive, &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/gemini/enterprise/docs/view-analytics"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;out-of-the-box analytics&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; via pre-computed dashboards to track day-to-day adoption, user engagement, and active user metrics. While this provides a product-centric lens to look at Gemini Enterprise app's usage, to understand the impact of agentic AI, administrators might need a more nuanced, organization-centric perspective tailored to their own internal context. This is where using Google BigQuery becomes a crucial tool in the administrator's arsenal to run deep-dive forensics across their organization to analyze and govern the adoption of agentic AI.&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Why Gemini Enterprise app + BigQuery is a game-changer&lt;/strong&gt;&lt;/h2&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;Augmenting the Gemini Enterprise app with BigQuery through &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/logging/docs/routing/overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;log sinks&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; allows a lean administrative team to analyze and govern a large-scale deployment. Specifically, it empowers IT, Data, and Security teams to:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation" style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Profile nuanced adoption and behaviors:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Segment usage patterns by department to see which teams are building custom agents, track NotebookLM utilization, and calculate agent-to-employee ratios.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation" style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Quantify organizational value:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Combine conversational logs with HR or line-of-business datasets to calculate actual employee hours saved, trace value creation, and build executive Looker dashboards.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation" style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Execute precision compliance audits:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Audit grounding queries across Google Drive folders and enterprise directories to prevent data leaks and protect corporate IP.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation" style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Investigate safety alerts instantly:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Query historical logs when security filters flag a prompt, identifying the exact text that triggered a &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/gemini/enterprise/docs/enable-model-armor"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Model Armor&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; block to resolve compliance alerts.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;To support these use cases, the telemetry is partitioned into five distinct log tables in BigQuery, capturing unique data fields:&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;&lt;table style="width: 100%;"&gt;&lt;colgroup&gt;&lt;col style="width: 41.4625%;"/&gt;&lt;col style="width: 58.5375%;"/&gt;&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;BigQuery Destination Table&lt;/strong&gt;&lt;/p&gt;
&lt;/th&gt;
&lt;th scope="col" style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Telemetry Captured&lt;/strong&gt;&lt;/p&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Gen AI User Messages&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;`discoveryengine_googleapis_com_g&lt;br/&gt;en_ai_user_message`&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;Verbatim prompt inputs typed by users&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Gen AI Choices&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;`discoveryengine_googleapis_com_g&lt;br/&gt;en_ai_choice`&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;Verbatim model responses, finish reasons, and LLM reasoning steps&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;User Activity Telemetry&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;`discoveryengine_googleapis_com_g&lt;br/&gt;emini_enterprise_user_activity`&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;Corporate identity (IAM emails) and grounding file access paths&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Cloud Audit Activity&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;`cloudaudit_googleapis_com_activity`&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;Control plane configuration changes and administrative user logs&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Cloud Audit Data Access&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;`cloudaudit_googleapis_com_data_ac&lt;br/&gt;cess`&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;High-volume data plane interactions and search queries&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Aggregate OOB Metrics&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;(Batch Export Table)&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;Pre-aggregated seats claimed, seat purchases, and engagement metrics from the past 30 days. To be pulled asynchronously via custom daily batch runs of the &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;analytics:exportMetrics&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; API to build high-level adoption and cost dashboards.&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Ingestion pipeline and architecture&lt;/strong&gt;&lt;/h2&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;To implement scale-ready observability, administrators establish an automated telemetry pipeline. Moving your Gemini Enterprise data to BigQuery does not require complex custom software development; instead, it leverages a continuous Cloud Logging Log Router Sink for conversational logs and an asynchronous batch export API for high-level aggregate seat metrics.&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;The diagram below illustrates the ingestion pipeline and how telemetry is mapped to BigQuery:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/1_qzsx4jm.max-1000x1000.png"
        
          alt="1"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;Here is your blueprint for connecting Gemini Enterprise to BigQuery to build the ultimate analytics and governance foundation for your organization.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Routing pipelines: Continuous logging and audit sinks&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To capture your telemetry, establish log sinks within Cloud Logging to intercept and route runtime events to BigQuery:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;The streaming pipeline (detailed logs):&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Streams row-by-row conversational data (user prompts, model choices, and grounding events). Ensure prompt and response logging is enabled in your Gemini Enterprise Admin Console (see &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/gemini/enterprise/docs/set-up-usage-audit-logs"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Set Up Usage &amp;amp; Audit Logs&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;).&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li style="list-style-type: none;"&gt;
&lt;ul&gt;
&lt;li aria-level="2" style="list-style-type: circle; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;Inclusion Filter (replace &lt;/span&gt;&lt;code style="font-style: italic; vertical-align: baseline;"&gt;[PROJECT_ID]&lt;/code&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt; with your Google Cloud Project ID):&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;logName=&amp;quot;projects/[PROJECT_ID]/logs/discoveryengine.googleapis.com%2Fgemini_enterprise_user_activity&amp;quot; OR\r\nlogName=&amp;quot;projects/[PROJECT_ID]/logs/discoveryengine.googleapis.com%2Fgen_ai.user.message&amp;quot; OR\r\nlogName=&amp;quot;projects/[PROJECT_ID]/logs/discoveryengine.googleapis.com%2Fgen_ai.choice&amp;quot;&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe303347580&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;The governance pipeline (audit logs):&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Captures administrative actions (Admin Activity) and data plane operations (Data Access, such as grounding data connector lookups).&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li style="list-style-type: none;"&gt;
&lt;ul&gt;
&lt;li aria-level="2" style="list-style-type: circle; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;Inclusion Filter (replace &lt;/span&gt;&lt;code style="font-style: italic; vertical-align: baseline;"&gt;[PROJECT_ID]&lt;/code&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt; with your Google Cloud Project ID):&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;logName:&amp;quot;projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com&amp;quot; AND \r\nprotoPayload.serviceName=&amp;quot;discoveryengine.googleapis.com&amp;quot;&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe303347160&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;ul&gt;
&lt;li style="list-style-type: none;"&gt;
&lt;ul&gt;
&lt;li aria-level="2" style="list-style-type: circle; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;Admin Activity Logs:&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; Always enabled by default; tracks resource changes (e.g., custom agent creation, updates, deletions).&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="2" style="list-style-type: circle; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;Data Access Logs:&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; Off by default; must be enabled in GCP IAM settings for the &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Discovery Engine API&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; to log user-level data read/write interactions during chats.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2 style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Unlock advanced intelligence in BigQuery&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Transform raw telemetry into insights&lt;/strong&gt;&lt;/h3&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;BigQuery provides AI-powered analysis tools that make understanding and navigating telemetry effortless. By leveraging &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/gemini-overview"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini in BigQuery&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, administrators can translate raw log streams into visual insights and clear documentation without manual guesswork.&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;No-Code Conversational Analytics (BigQuery CA)&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;Querying nested JSON schemas is made simple with &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/data-analytics/introducing-conversational-analytics-in-bigquery"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Conversational Analytics in BigQuery&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; (BQ CA). BQ CA acts as an intelligent agent within BigQuery Studio, automatically generating and executing SQL grounded in your schema, business metadata, and verified queries/UDFs to ensure metrics consistency. It also surfaces its "thinking process" alongside the generated code to build administrative trust. &lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;For example, as shown in the screenshot below, asking &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;"Compare the usage of notebooklm, deep research and custom agents using oob_metrics?"&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; generates the correct SQL, runs the query and outputs the result in seconds:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/2_gf21B9L.max-1000x1000.png"
        
          alt="2"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;As shown in the screenshot below, BQ CA goes beyond traditional querying and standard SQL generation by allowing users to execute sophisticated AI and machine learning tasks directly within the console. Administrators can leverage these native capabilities to run advanced analysis, such as classification of user prompt sentiment or forecasting future adoption trends, streamlining the governance process.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/3_EhlARG6.max-1000x1000.png"
        
          alt="3"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Auto-generated schema documentation and insights&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;Understanding telemetry fields like &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;useriamprincipal&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;finish_reason&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, or &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;groundedContent&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; is crucial for extracting the right insights. BigQuery simplifies this through automated schema documentation and AI-powered context:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Automated profiling and metadata:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; By pairing&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/data-profile-scan"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Knowledge Catalog Data Profiling&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; with Gemini, you can evaluate unique value counts, null rates, and data distributions in raw tables. With a single click,&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/data-insights"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Data Insights&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; generates descriptive metadata for both tables and individual nested columns.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Unified data insights:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Gemini leverages this rich context to surface insights across your entire data estate. It automatically recommends queries to find anomalies or safety failures within a single table (like &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;gen_ai_user_message&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;). At the dataset level (&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/generate-dataset-insights"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Preview&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;), it generates an interactive relationship graph to map cross-table join paths and suggests queries that combine data—like user activity and model outputs—to calculate task complexity.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Seamless agent integration and glossaries:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Table and data insights integrate directly into the BigQuery Conversational Analytics (BQ CA) agent UI, giving agents immediate access to enriched metadata and few-shot examples. To ensure agents accurately interpret domain-specific prompts, BQ CA also supports &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;business glossaries&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;. You can define custom terms directly for your agents or import existing glossaries from Knowledge Catalog to establish a standardized vocabulary.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;Administrators can then leverage the profiling, enriched metadata and insights to navigate logged fields, understand the telemetry structure, and catalog data for compliance audits. As shown in the screenshots below, the output of Gemini-powered auto generation of schemas, descriptions and linkages makes it easy to make sense of the complex relationships and telemetry data output by agentic interactions on the Gemini Enterprise app.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/4_kJTIMt6.max-1000x1000.png"
        
          alt="4"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/5_8OiKqSp.max-1000x1000.png"
        
          alt="5"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h4 style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;Visualizing with Data Studio dashboards&lt;/span&gt;&lt;/h4&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;For executive stakeholders, raw log tables can be transformed into interactive, high-impact business intelligence dashboards. By connecting &lt;/span&gt;&lt;a href="https://cloud.google.com/data-studio?e=48754805"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Data Studio&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; directly to BigQuery, you can build dashboards that monitor:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation" style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;User adoption and seat ROI:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Segment usage trends by department, highlighting the ratio of custom agents built relative to employee headcount.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation" style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Data grounding traffic:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Map which enterprise connectors—such as SharePoint, Google Drive, or Gmail—experience the highest utilization.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation" style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Content safety and violations:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Track Model Armor sanitization blocks and sentiment feedback loops over time to maintain safety standards.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation" style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Share BQ Conversational Analytics agent:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Share the BQ CA agents you built via Data Studio to give business users the ability to ask more questions of the data.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style="text-align: justify;"&gt;&lt;strong style="vertical-align: baseline;"&gt;Empower your organization with the Gemini Enterprise app and your administrators with BigQuery&lt;/strong&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://cloud.google.com/gemini-enterprise"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Deploy the Gemini Enterprise App&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: Bring the best of Google AI to every employee.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/gemini/enterprise/docs/set-up-usage-audit-logs"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Enable Prompt &amp;amp; Response Logging&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: Turn on prompt and response logging in the Admin Console to begin recording user activity telemetry.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://cloud.google.com/logging/docs/routing/overview"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Configure Log Router Sinks&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: Establish sinks to stream telemetry into BigQuery.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/gemini/enterprise/docs/view-analytics"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Track Metrics &amp;amp; Export Analytics&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: Access pre-computed, out-of-the-box dashboards on the console and export historical aggregate statistics.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/data-insights"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Extract Table-Level &amp;amp; Dataset-Level Insights&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: Explore unfamiliar log tables and discover relationship join paths automatically.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://cloud.google.com/blog/products/data-analytics/introducing-conversational-analytics-in-bigquery"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Query with Conversational Analytics&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: Build data reasoning agents and leverage natural language querying inside BigQuery Studio.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://cloud.google.com/data-studio?e=48754805"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Visualize with Data Studio&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: Connect Data Studio to BigQuery to build executive-level dashboards &amp;amp; give access to BQCA agents to business users.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;Consult a Google Cloud Customer Engineer for the most cost-effective and secure configuration for the analytics setup described above.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;The authors would like to acknowledge and thank the Google Forge team, especially Vicky Falconer, Dharini Chandrashekhar and Adhaar Gupta, for contributing to the core work that led to this article.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Wed, 15 Jul 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/data-analytics/analyze-and-govern-gemini-enterprise-at-scale-with-bigquery/</guid><category>BigQuery</category><category>Data Analytics</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>How to Analyze and Govern Gemini Enterprise App Usage at Scale with BigQuery</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/products/data-analytics/analyze-and-govern-gemini-enterprise-at-scale-with-bigquery/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Aishwarya Prabhat</name><title>Solutions Acceleration Architect, Google Forge, Google Cloud</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Sudipto Guha</name><title>Data Analytics &amp; AI Tech Lead, Google Cloud</title><department></department><company></company></author></item><item><title>Frontier and Center: Who evaluates the evaluations?</title><link>https://cloud.google.com/blog/products/data-analytics/evaluate-agent-performance/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="font-style: italic; vertical-align: baseline;"&gt;Editor’s note:&lt;/strong&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt; Some of the most interesting questions in AI are being asked by information theoreticians, around how to provide context to an emerging class of AI agents. A few weeks ago, we waded into those waters with a blog about &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing?e=0"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;the Open Knowledge Format&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;, a specification that formalizes the LLM-wiki pattern into a portable, interoperable format to represent the metadata, context, and curated knowledge that modern AI systems need to operate. That blog generated a ton of interest, so we’ve decided to bring you more of the same, as part of our new “Frontier and Center” series. Today, we hear from two members of Google Data Cloud’s frontier AI team on the recurring challenge of how to systematically evaluate whether or not an agent is able to answer questions effectively based on its context. Read on for more, and watch this space for more blogs from this team.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;A passing grade is the least interesting thing an exam can tell you. It says the student cleared the bar; leaving you entirely in the dark about how narrow their failures were, how effortless their passes were, or what to teach next. Yet this is exactly how we evaluate AI agents. We run a fixed benchmark, calculate a score, and declare progress. In doing so, we are handing our agents a pass/fail exam when what we actually need is a map of the agent’s capabilities: a picture of the terrain that shows exactly where capability falls off, and by how much.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For data agents, this map matters a lot for data discovery&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;in search and retrieval — the unglamorous first step where an agent, handed a vague human question and a warehouse or data lake of thousands of tables and files, has to find the &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;right&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; datasets before it can reason over anything. Discovery is a "needle in a haystack" problem. Real users phrase their questions imperfectly, and inferring what datasets to retrieve presents a real challenge to agents. So the interesting question in evaluations is never "can the agent pass?" It is "how vague can the question get before the agent breaks?" An exam cannot easily answer that, but a map can. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Today, we share an approach rooted in information theory that we’ve been leveraging to add detail and nuance, i.e., fidelity, to benchmarks, so we can better understand agents’ performance as a part of their evaluations. Along the way, the added fidelity exposed some deeper issues with the quality of emergent evaluation cases themselves.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Difficulty, measured&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;When it comes to retrieval, evaluation cases are often stratified into tiers of difficulty. This can happen organically, e.g., pervasive and enduring failure scenarios are deemed difficult. Or it can be from labels applied by humans or machines categorizing some questions as "easy" or "hard" for an agent to answer correctly, e.g., based on the context provided in the query. While this kind of sentiment-based labeling is not the only way to label test cases, it’s frequently used despite its imperfections, such as being challenging to reproduce.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Despite being an industry staple, the approach of assessing every evaluation case by hand is unrealistic at scale. What we need is a rigorous approach that can modulate the difficulty of evaluation cases. We’re iterating on a &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;meta-benchmark&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; we call Discovery Bench: a framework that modulates an evaluation case by generating “easy” and “hard” variations of every case. This allows us to audit how close or how far an agent is from succeeding in those cases. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The lever for modulating the difficulty of an input query comes via a tried-and-trusted concept that’s present across information theory and machine learning: surprisal, or the likelihood of an output given a set of inputs. In our case, a query’s surprisal represents the uncertainty that remains about the correct dataset given the query.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The thinking behind our approach is simple: A term or a phrase in an evaluation query has high informative power when it sharply distinguishes the target from everything else in the corpus. Therefore, we can adjust the difficulty of evaluation cases by adding or removing terms with varying levels of informative power.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Let’s work through a real example from &lt;/span&gt;&lt;a href="https://github.com/mitdbg/KramaBench" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;KramaBench&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, a publicly available benchmark. One of KramaBench’s datasets has information about orbiting satellites, and the example query from the suite includes the following text: &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;"…the total count of satellite major altitude changes for satellite 48445 during 2024 using TLE history."&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The token &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;"TLE"&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; is sharply distinguishing; it points almost uniquely at the &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;TLE_____48445&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; table from the dataset. Strip it, and the query degrades to &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;"the count of satellite altitudes for satellite 48445,"&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; whose vague phrasing now matches density tables, precise-orbit files, and decay logs alike. Surprisal makes this quantitative: rare, pointed terms carry more bits than common ones.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The remaining surprisal of a query is how much uncertainty is left about its answer. As surprisal approaches zero&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;,&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; the query has become specific enough to pinpoint exactly one dataset.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The heart of the idea behind Discovery Bench is this refinement loop, which we call &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;iterative surprisal-based query refinement&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;, or iSQR, which generates cases with higher or lower informative power to test where an agent can start successfully answering the query:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/Who_Evaluates_the_Evaluations__-_FP_blog.max-1000x1000.jpg"
        
          alt="Who Evaluates the Evaluations_ - FP blog"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="noe01"&gt;Figure 2: The iSQR refinement loop.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The crux is being able to control the challenge embedded into the evaluation case by making adjustments: Instead of one fixed phrasing per question, we generate the &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;same&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; question at three levels of calibrated ambiguity [high, medium, low], with each grounded in bits (not subjective opinion). We can even justify, term by term, &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;why&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; a word was added or removed. Difficulty stops being a property that is attributed by sentiment or classification, and becomes one we &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;engineer&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;The cliff you couldn't see&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Here is what Discovery Bench’s difficulty dial reveals — and what a single-phrasing benchmark structurally cannot.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We have an F1 agent that's built for recall (on Gemini 3.1 Pro). Running it against KramaBench and across the full sweep of ambiguity levels traces a curve: 0.34 at high ambiguity, 0.76 at neutral, 0.81 at medium, 0.78 at low.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/image1_viEBS6x.max-1000x1000.jpg"
        
          alt="image1"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="noe01"&gt;Figure 3: F1 swept across ambiguity — the dot versus the curve.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Two findings fall out immediately (and neither were visible to a conventional eval).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;First, the cliffs.&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; This query scores a perfect &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;F1 = 1.00&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; at neutral phrasing — and &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;0.00&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; at high ambiguity. It is the satellite-48445 case from above: drop the distinguishing token "TLE" and the agent loses the table entirely. Same query, same agent, same ground truth; one notch vaguer and it falls off a cliff. A static benchmark tests the neutral phrasing, stamps "solved," and reports flat ground where there is a precipice. Pass/fail was particularly misleading in that it did not just miss the cliff, but it told us the terrain was level.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Second, the sweet spot.&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; For Discovery Agent, medium ambiguity &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;beat&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; neutral, and low ambiguity sometimes &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;underperformed&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; it. More specificity is not monotonically better for the system being evaluated; there is an optimal amount of steering. That is a graded, actionable signal. This is the "how close, how hard" texture we were missing from a scalar. It tells you where to hill-climb, or improve, the agent: in our case, straight at concrete failure modes like time-sharded tables (precision collapsing to ~8% as the agent over-retrieves 21 near-identical shards for a two-table answer) and context blow-up (F1 dropping from 0.75 to 0.32 once a query triggers long search chains). The map did not just say that the agent failed, but it said where, and why. Note that our hypothesis that less ambiguity and more context (via steering terms) should improve retrieval generally holds true, but for the specific Discovery Agent being exercised, the idiosyncratic “sweet spot” meaningfully highlighted trade-offs in its implementation.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;We're not alone&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The field is converging on meta-benchmarking and exerting greater control of how we challenge and evaluate our agents. A growing body of work uses &lt;/span&gt;&lt;a href="https://en.wikipedia.org/wiki/Item_response_theory" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;item response theory&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, the latent-ability model behind standardized testing, to treat difficulty as a measured quantity rather than a label: &lt;/span&gt;&lt;a href="https://arxiv.org/abs/2402.14992" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;tinyBenchmarks&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; and &lt;/span&gt;&lt;a href="https://arxiv.org/abs/2407.12844" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;metabench&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; show that a handful of informative items reproduce a model's full score, and &lt;/span&gt;&lt;a href="https://arxiv.org/abs/2505.15055" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;PSN-IRT&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; turns the same lens on benchmark quality itself. Others audit the ground truth directly: &lt;/span&gt;&lt;a href="https://arxiv.org/abs/2406.04127" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;MMLU-Redux&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; found that 6.49% of Massive Multitask Language Understanding (MMLU) questions are mislabeled, and &lt;/span&gt;&lt;a href="https://arxiv.org/abs/2502.03461" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Platinum Benchmarks&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; re-cleaned ten datasets to minimize both label errors and ambiguity — the same two axes we sweep for. And ambiguity is increasingly treated as intrinsic rather than noise: &lt;/span&gt;&lt;a href="https://aclanthology.org/2020.emnlp-main.466/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;AmbigQA&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; showed that a large fraction of real questions admit multiple readings, and later work finds that apparent hallucinations often stem from query ambiguity rather than model failure. What we have not seen elsewhere is the combination: information-theoretic ambiguity sweeping applied as a meta-benchmark over live enterprise data.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;A benchmark we trusted turned out to be broken&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We built our first evaluation on &lt;/span&gt;&lt;a href="https://arxiv.org/abs/2506.06541" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;kramabench-astronomy&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, a benchmark established in the field, and one which other teams had already leaned on for their own evals. Teams derived benchmarks from this dataset, and we hypothesized subtle issues may have been introduced over time. When we actually read the benchmarks used by teams, with Gemini's help, we found it was wrong in meaningful ways: ground-truth tables that did not answer their query, a question whose 124 sharded tables exceeded what some teams’ retrieval APIs could even return, months specified where exact dates were required. Quietly broken ground truth means quietly wrong conclusions not just for us, but for every prior analysis built on it. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;This is the generalized crux of the matter: an evaluation is itself an artifact that can be defective, and almost nobody evaluates it. We instrument the agent and trust the ruler, but where do we validate that the measuring stick makes sense? &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;When two maps disagree&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Now the recursive turn: If difficulty is something we &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;generate&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;, then we need to evaluate the generator itself; we should not trust it blindly either.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;So we built the &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;same&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; ambiguity sweep two ways: steering terms from a pure-LLM guess, versus terms grounded in &lt;/span&gt;&lt;a href="https://en.wikipedia.org/wiki/Tf%E2%80%93idf" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;TF-IDF surprisal&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. The two disagreed violently. At high ambiguity, the LLM-built sweep scored the agent at F1 ≈ &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;0.34&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;; the grounded sweep, ≈ &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;0.85&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;. One of these maps is badly distorted. The grounded one, predictably, is the more robust: surprisal gives it a footing the free-running LLM lacks.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;This is "evaluate your evals," made concrete. The information-theoretic lens does not only grade the agent along a continuous axis; it grades the &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;benchmark's own construction&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;, and adjudicates between the two.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Evaluate your evals&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We have spent years optimizing agents against rulers we never measured. The bitter irony is that better models make this worse: as agents clear coarse benchmarks, the score saturates near the top and the exam loses its ability to highlight where the agent can be improved.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;So the call to action is uncomfortable and overdue: evaluate your evals. Read your ground truth. Treat difficulty as a measured quantity, not a label: sweep it, plot it, find the bit-width where your system breaks. Ask not just "did it pass?" but "how close was the miss, how hard was the pass, and would a slightly vaguer question have sent it off a cliff?" Build evaluations that produce signals; not just verdicts.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;There is a genuine tension to sit with here. Difficulty-as-entropy is only as reliable as the model that estimates the entropy. There's a risk that if we push too hard on a measurable proxy, we optimize the ruler instead of the agent. That is not a reason to retreat to pass/fail; it is a reason to keep the evaluator under the same scrutiny as what it is evaluating. The moment we stop asking who evaluates the evaluators is the moment our maps stop being useful again.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p role="presentation"&gt;&lt;sup&gt;&lt;em&gt;&lt;span style="vertical-align: baseline;"&gt;1. Maia Polo, F. et al. &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;tinyBenchmarks: Evaluating LLMs with Fewer Examples.&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; ICML 2024. &lt;/span&gt;&lt;a href="https://arxiv.org/abs/2402.14992" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;arxiv.org/abs/2402.14992&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;&lt;/em&gt;&lt;/sup&gt;&lt;sup&gt;&lt;em&gt;&lt;span style="vertical-align: baseline;"&gt;2. Kipnis, A. et al. &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;metabench: A Sparse Benchmark of Reasoning and Knowledge in Large Language Models.&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; ICLR 2025. &lt;/span&gt;&lt;a href="https://arxiv.org/abs/2407.12844" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;arxiv.org/abs/2407.12844&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;&lt;/em&gt;&lt;/sup&gt;&lt;sup&gt;&lt;em&gt;&lt;span style="vertical-align: baseline;"&gt;3. Lost in Benchmarks? Rethinking Large Language Model Benchmarking with Item Response Theory&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; (PSN-IRT). AAAI 2026. &lt;/span&gt;&lt;a href="https://arxiv.org/abs/2505.15055" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;arxiv.org/abs/2505.15055&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;&lt;/em&gt;&lt;/sup&gt;&lt;sup&gt;&lt;em&gt;&lt;span style="vertical-align: baseline;"&gt;4. Gema, A. P. et al. &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;Are We Done with MMLU?&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; (MMLU-Redux). 2024. &lt;/span&gt;&lt;a href="https://arxiv.org/abs/2406.04127" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;arxiv.org/abs/2406.04127&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;&lt;/em&gt;&lt;/sup&gt;&lt;sup&gt;&lt;em&gt;&lt;span style="vertical-align: baseline;"&gt;5. Vendrow, J. et al. &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;Do Large Language Model Benchmarks Test Reliability?&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; (Platinum Benchmarks). 2025. &lt;/span&gt;&lt;a href="https://arxiv.org/abs/2502.03461" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;arxiv.org/abs/2502.03461&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;&lt;/em&gt;&lt;/sup&gt;&lt;sup&gt;&lt;em&gt;&lt;span style="vertical-align: baseline;"&gt;6. White, C., Dooley, S. et al. &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;LiveBench: A Challenging, Contamination-Limited LLM Benchmark.&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; 2024. &lt;/span&gt;&lt;a href="https://arxiv.org/abs/2406.19314" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;arxiv.org/abs/2406.19314&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;&lt;/em&gt;&lt;/sup&gt;&lt;sup&gt;&lt;em&gt;&lt;span style="vertical-align: baseline;"&gt;7. Min, S. et al. &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;AmbigQA: Answering Ambiguous Open-domain Questions.&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; EMNLP 2020. &lt;/span&gt;&lt;a href="https://aclanthology.org/2020.emnlp-main.466/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;aclanthology.org/2020.emnlp-main.466&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;&lt;/em&gt;&lt;/sup&gt;&lt;sup&gt;&lt;em&gt;&lt;span style="vertical-align: baseline;"&gt;8. Lai, E., Vitagliano, G. et al. &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;KramaBench: A Benchmark for AI Systems on Data-to-Insight Pipelines over Data Lakes.&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; 2025. &lt;/span&gt;&lt;a href="https://arxiv.org/abs/2506.06541" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;arxiv.org/abs/2506.06541&lt;/span&gt;&lt;/a&gt;&lt;/em&gt;&lt;/sup&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Fri, 10 Jul 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/data-analytics/evaluate-agent-performance/</guid><category>AI &amp; Machine Learning</category><category>Application Development</category><category>Data Analytics</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Frontier and Center: Who evaluates the evaluations?</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/products/data-analytics/evaluate-agent-performance/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Manav Garg</name><title>Software Engineer, Data Cloud Frontier AI</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Sunil Pedapudi</name><title>Technical Lead, Data Cloud Frontier AI</title><department></department><company></company></author></item><item><title>Shift into high gear with agents: Securing the software-defined vehicle</title><link>https://cloud.google.com/blog/products/identity-security/shift-into-high-gear-with-agents-securing-the-software-defined-vehicle/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The automotive industry is at a pivotal crossroads as it hits the gas on adopting new technology. The era of the traditional connected vehicle has shifted into the age of the software-defined vehicle (SDV), notable for rapid innovation with many new capabilities delivered over the air.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;By integrating AI and agents, the next generation of SDVs will be capable of turning raw telemetry into actionable insights in real-time, allowing for a fundamental rethink of &lt;/span&gt;&lt;a href="https://blog.google/products-and-platforms/platforms/android/android-automotive-os/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;how vehicles interact with their environment and their users&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. To better support and secure SDVs, Google Cloud and &lt;/span&gt;&lt;a href="https://www.valtech.com/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Valtech&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; have partnered to develop &lt;/span&gt;&lt;a href="https://nexus-sdv.io/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Nexus SDV&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, a highly-scalable, AI-enabled connected vehicle platform built on Google Cloud. This modular, developer-friendly and open-source solution is designed to manage up to 100 million devices, and features deep integration with &lt;/span&gt;&lt;a href="https://source.android.com/docs/automotive" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Android Automotive OS&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; (AAOS) to streamline data flows and in-vehicle experiences. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We are proud to announce the first release of the &lt;/span&gt;&lt;a href="https://github.com/googlecloudplatform/nexus-sdv" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Nexus SDV&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; open-source core that showcases how it can reduce total cost of ownership through Arm-based compute and Bigtable, while providing a AI-native environment for building the next era of automotive intelligence.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;AI-driven experiences with Nexus SDV &lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Nexus AI serves as the platform’s intelligent engine, transforming the vehicle from a passive data source into a proactive, agentic partner. Using Gemini models and Gemini Enterprise Agent Platform, Nexus AI can analyze complex telemetry in real-time to provide information for autonomous decision-making and hyper-personalized driver assistance, effectively acting as an intelligent agent that anticipates user needs. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Crucially, this advanced intelligence is paired with a focus on significant total cost of ownership (TCO) reduction. By using high-efficiency Arm-based compute and Bigtable-optimized data storage, the platform lowers the operational costs associated with processing massive data volumes. This modular, AI-native architecture ensures that manufacturers can scale their fleet intelligence rapidly without the prohibitive cloud and development expenses traditionally associated with next-generation vehicle software.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Cloud-native under the hood&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The architecture of Nexus SDV is built on a modular, cloud-native foundation designed to bridge the gap between the vehicle edge and the data center. Deep compatibility with AAOS is the keystone of the close integration between the cloud and the vehicle, and will help ensure that high-fidelity telemetry is ingested and synchronized in real-time. This robust data loop allows Nexus AI to quickly push intelligent updates and services back to the vehicle. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;By providing this developer-friendly, open framework, Nexus SDV enables manufacturers to manage the entire lifecycle of a SDV with the scalability and reliability of the Google Cloud ecosystem.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/image1_sErFoiT.max-1000x1000.png"
        
          alt="image1"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="y92bc"&gt;Architecture for Nexus SDV.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Defense in depth with Google Cloud Security controls&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;By building on Google's secure foundations, including secure-by-design and Zero Trust architecture, Nexus SDV supports the heavy lifting of compliance and threat protection. To achieve this, the Nexus SDV architecture implements a comprehensive, defense-in-depth security model across six key elements:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Mutual TLS (mTLS) and public key infrastructure (PKI)&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;Nexus SDV relies on cryptographic trust chains to authenticate vehicles before any data exchange can occur. The infrastructure uses &lt;/span&gt;&lt;a href="https://cloud.google.com/security/products/certificate-authority-service"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud Certificate Authority Service&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; (CAS) to manage distinct CA pools (server, factory, and registration CAs), ensuring a highly available and secure root of trust. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Specifically, the registration server enforces registration by forcing clients to present a valid "factory-issued" certificate during the initial TLS handshake, extracting and parsing the certificate directly from the connection stream to definitively prove the vehicle's identity. During registration, the server performs &lt;/span&gt;&lt;a href="https://en.wikipedia.org/wiki/Certificate_signing_request" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Certificate Signing Request&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; (CSR) validation sent by the vehicle before issuing a new operational certificate.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Identity and access management&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;The system uses identity brokering where &lt;/span&gt;&lt;a href="https://www.keycloak.org/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Keycloak&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; is deployed as the central OpenID Connect (OIDC) identity provider. Vehicles authenticate against Keycloak using their operational certificate via mTLS to receive a short-lived JSON Web Token (JWT). &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For fine-grained access control, a custom NATS Auth Callout service provides dynamic subject permissions: It intercepts all messaging broker connection attempts, validates the Keycloak JWT using public JWK keys, and programmatically maps the vehicle's roles to specific NATS subjects. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For secure service-to-service communication, it uses &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/iam/docs/workload-identity-federation"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Workload Identity Federation&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; so pipelines exchange GitHub OIDC tokens for temporary Google Cloud access, removing static credentials, while&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/kubernetes-engine/docs/concepts/workload-identity"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt; GKE Workload Identity&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; allows Kubernetes Pods to access backend services like Bigtable by binding Kubernetes service accounts to Google service accounts. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Security is reinforced through &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigtable/docs/oauth-scopes"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;restricted IAM scopes&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, ensuring dedicated service accounts are provisioned with minimal permissions, such as the data API being restricted only to reading from Bigtable. Using &lt;/span&gt;&lt;a href="https://cloud.google.com/security/vpc-service-controls"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;VPC-SC&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/resource-manager/docs/organization-policy/overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Organization policy constraints&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; and &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/vpc/docs/private-service-connect"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Private Service Connect (PSC)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; in your deployment context also helps you achieve secure foundations.  &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Secret management&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;Nexus SDV relies on centralized secret management to protect sensitive information. All sensitive configurations, database passwords, and cryptographic signing keys are generated dynamically during Terraform infrastructure provisioning and locked inside &lt;/span&gt;&lt;a href="https://cloud.google.com/security/products/secret-manager"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud Secret Manager&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;A &lt;/span&gt;&lt;a href="https://github.com/google-github-actions/get-secretmanager-secrets#get-secretmanager-secrets" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;secret fetching&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; during deployment is used to avoid baking secrets into application code and container images. Instead, services pull signing keys and credentials directly into memory only at runtime, minimizing exposure both at rest and in transit.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Network isolation&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;To enforce network isolation, the underlying computer infrastructure is heavily shielded. Nexus SDV runs on &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/kubernetes-engine/docs/how-to/legacy/network-isolation"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;private GKE clusters&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; where worker nodes have no public IP addresses, preventing direct internet exposure. Additionally, the Keycloak PostgreSQL database uses &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/sql/docs/mysql/sql-proxy"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Cloud SQL IAM Authentication&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, which allows the Cloud SQL Proxy to connect securely using IAM roles rather than relying on static database passwords or managing IP allowlists. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Secure AI Framework&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;Google Cloud secures these advanced AI capabilities through a comprehensive, enterprise-grade framework that prioritizes data privacy, model governance, and safe execution, based on guidance from the &lt;/span&gt;&lt;a href="https://saif.google/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Secure AI Framework&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; (SAIF). With Gemini Enterprise Agent Platform, security and governance are natively embedded into the machine-learning lifecycle through capabilities, such as dedicated Explainability and Safety controls, continuous Evaluation and Monitoring, and secure model registries. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;You can learn more about how we &lt;/span&gt;&lt;a href="https://cloud.google.com/security/securing-ai"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;secure AI here&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;.  &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Data API&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;br/&gt;&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;Instead of allowing downstream applications and external clients direct access to data stores like Bigtable, Nexus SDV routes data retrieval through a custom Data API. This microservice acts as a secure abstraction layer that translates strictly, such as querying specific vehicle IDs, sensor data types, and predefined time windows, into heavily constrained Bigtable row-range scans and column filters. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;By doing so, it serves as a secure gateway that enforces structured data access patterns. &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Start your journey with Nexus SDV&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Nexus SDV represents a new era of automotive intelligence, delivering an agentic, secure, and cost-efficient platform that empowers manufacturers to harness the full power of AI in an open-source framework. You can learn more about how we are &lt;/span&gt;&lt;a href="https://nexus-sdv.io/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;redefining the software-defined vehicle here&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 06 Jul 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/identity-security/shift-into-high-gear-with-agents-securing-the-software-defined-vehicle/</guid><category>AI &amp; Machine Learning</category><category>Data Analytics</category><category>Manufacturing</category><category>Security &amp; Identity</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Shift into high gear with agents: Securing the software-defined vehicle</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/products/identity-security/shift-into-high-gear-with-agents-securing-the-software-defined-vehicle/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Florian Haubner</name><title>Industry Architect Lead Automotive EMEA</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Vesselin Tzvetkov</name><title>Senior Cybersecurity Advisor, Office of the CISO</title><department></department><company></company></author></item><item><title>Conversational analytics in BigQuery brings trusted agentic reasoning to everyone</title><link>https://cloud.google.com/blog/products/data-analytics/conversational-analytics-in-bigquery-now-ga/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Businesses run on fast decisions, but the teams who hold the answers are often buried under a backlog of routine requests, leaving users waiting in line for insights they need now. Today, we are bringing Conversational Analytics in BigQuery to general availability, so both business and technical teams can query data, run multi-step analyses, and generate visual reports using natural language, right where the data lives. With this release, Conversational Analytics in BigQuery now delivers an agent that behaves like an analyst who knows your business, thinks before it answers, and stands behind its work. Built on Google’s latest Gemini models and BigQuery’s secure, governed foundation, it brings that trusted analyst to everyone in your organization.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/GAGif.gif"
        
          alt="1"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="0vst5"&gt;Fig 1. Conversational Analytics in BigQuery&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Conversational analytics for enterprise data&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;BigQuery’s conversational capabilities are built-in and available for use instantly, with no setup required.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For deeper, more consistent insights, data professionals can author specialized agents grounded in the exact sources that matter, from projects, datasets, and tables to views, graphs, and user-defined functions. And because your data rarely lives in one place, Conversational Analytics reaches beyond native BigQuery tables to Lakehouse-managed Apache Iceberg tables and cross-cloud Lakehouse sources like Databricks Unity, AWS Glue, SAP and Salesforce, so you can break down data silos and analyze data across clouds from a single conversation. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;As a data practitioner, you work with Conversational Analytics right inside BigQuery Studio and Data Canvas, and publish the agents you build to Gemini Enterprise, Data Studio, or your own application through the Conversational Analytics API, putting them in the hands of business users wherever they work.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p style="padding-left: 40px;"&gt;&lt;strong&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;“At MoneySuperMarket, BigQuery Conversational Analytics has changed how our teams get to insight. Analysis that used to take weeks can now be done in minutes, saving our financial analysts around half a day each week. By making analysis more self-serve, we’re helping teams create faster insight to support better product and commercial decision-making.”&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; - Suzie Millar, Head of Data, Mony Group&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Engineered trust and explainability&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Accuracy in Conversational Analytics is by design, not aspirational: every agent is grounded in your business context, not a model's assumptions. That context comes from the&lt;/span&gt; &lt;a href="https://cloud.google.com/blog/products/data-analytics/introducing-the-google-cloud-knowledge-catalog"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Knowledge Catalog&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; (glossaries, profile scans, and context bundles), BigQuery Graph for multi-hop queries, and your own verified queries and custom agent instructions. With the new&lt;/span&gt; &lt;a href="https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Open Knowledge Format&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, the wiki your team already maintains can feed straight into Knowledge Catalog. At query time, Conversational Analytics leverages existing embeddings of your column values, generated by AI.GENERATE_EMBEDDINGS, to match your question to the right data, so asking about "Texas" finds rows stored as "TX." &lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="vertical-align: baseline;"&gt;Grounding only earns trust if the user can see it. So every answer is inspectable, providing:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Visible thinking steps:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Review the agent's step-by-step reasoning and the exact SQL it generates before it returns an answer.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Context citations:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; See the precise sources behind every response, including tables, schema definitions, verified queries, and glossary terms used to calculate it.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Proactive disambiguation: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;When a prompt is vague, the agent asks targeted clarifying questions instead of guessing.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Long-term memory: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;The agent remembers what your terms and questions mean, so you don't have to disambiguate the same thing twice.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/Context_Citation_Gif.gif"
        
          alt="3"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="0vst5"&gt;Fig 2. Generating answers that you can trust&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Security and governance by design&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;One common barrier to scaling AI is governance. Reaching tens of thousands of users requires rigorous security, governance, and transparent&lt;/span&gt; &lt;a href="https://docs.cloud.google.com/gemini/data-agents/conversational-analytics-api/manage-costs"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;cost controls&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. Conversational Analytics inherits BigQuery's governance model, so users only query data they are authorized to see and every query is logged for auditing within the BigQuery compliance framework. On top of that baseline, it supports &lt;/span&gt;&lt;a href="https://cloud.google.com/security/products/access-transparency?hl=en"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Access Transparency (AxT)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/kms/docs/cmek"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Customer-Managed Encryption Keys (CMEK)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;a href="https://cloud.google.com/vpc/docs/private-google-access"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Private IP&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, and &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/vpc/docs"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;VPC Service Controls&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, and now guarantees &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/assured-workloads/docs/data-residency"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;data residency&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; for data at rest and for ML processing within EU and US multi-region endpoints. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For your most engaged users, we also deliver the operational controls that scale demands: Configure Google Cloud-native cost controls so no user or project exceeds its allotment, cap an agent's maximum query size in bytes, and track usage through BigQuery labels on jobs.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/4_IR0rdmb.gif"
        
          alt="4"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="0vst5"&gt;Fig 3. Agent Observability and Monitoring&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;The power of BigQuery AI, in plain language&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The agent doesn't just retrieve rows, but calls BigQuery's AI functions for you, turning advanced analysis into a question you can ask in plain language.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Find the "why," not just the "what": &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;Ask what drove a change and the agent runs root-cause analysis with &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;AI.KEY_DRIVERS&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;, surfacing the exact segments behind the move.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;See what's coming: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;Move past historical reporting by triggering &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;AI.FORECAST&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; and &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;AI.DETECT_ANOMALIES&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; right in the chat to project trends and flag outliers, with no model to build or manage.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Query your entire data estate: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;With object tables, the agent reasons over relational data and unstructured files together, PDFs, images, logs, and video, so a single conversation spans your whole estate.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/5_UJkt6D1.gif"
        
          alt="5"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="bm53d"&gt;Fig 4. Conversational Analytics leverages BigQuery AI functions&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;From answering questions to running the investigation&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Conversational Analytics agents are moving from human-scale reactive analysis to agent-scale proactive action. You're no longer limited to asking a question and waiting for the answer.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Deep-dive mode: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;If you ask ‘Why a metric moved?’ the agent will build its own analytical plan, mapping the critical questions, working through a full multi-step investigation with no manual SQL, and minimizing analytical blind spots. The result is a comprehensive report you can download and share.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/DeepDiveFinalTrim.gif"
        
          alt="DeepDiveFinalTrim"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="bm53d"&gt;Fig 5. Deep Dive mode in Conversational Analytics&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Agentic workflows: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;Deploy autonomous agents that monitor your data, reason over events, run multi-step workflows on a schedule, and deliver insights straight to your chat. You can set up a Monday-morning business report or daily anomaly detection across key metrics, each with a custom directive so they investigate only what you care about.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/9_S5opsaC.gif"
        
          alt="9"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="9hz4q"&gt;Fig 6. Scheduling Conversational Analytics agent workflows&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Start talking to your data today&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;General availability of Conversational Analytics in BigQuery marks an official exit from the static dashboard era. By embedding Gemini’s deep cognitive reasoning directly into the data warehouse, we are enabling a self-managing environment that transforms raw data into active, corporate knowledge. This delivery is a key component of the Agentic Data Cloud, providing a true system of action that moves past retrospective reporting, incorporates security and governance by design and is engineered for enterprise trust.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;If you are ready to get started, learn more from our &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/conversational-analytics"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;documentation&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, reach out to your Google Cloud account representative, or get started in &lt;/span&gt;&lt;a href="https://console.cloud.google.com/bigquery"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery Studio&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; today to build and deploy your first agent.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Tue, 30 Jun 2026 18:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/data-analytics/conversational-analytics-in-bigquery-now-ga/</guid><category>BigQuery</category><category>Data Analytics</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Conversational analytics in BigQuery brings trusted agentic reasoning to everyone</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/products/data-analytics/conversational-analytics-in-bigquery-now-ga/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Vasiya Krishnan</name><title>Product Lead</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Jiaxun Wu</name><title>Senior Engineering Manager</title><department></department><company></company></author></item><item><title>Scaling Network Analysis for Fraud Prevention with BigQuery Graph</title><link>https://cloud.google.com/blog/products/data-analytics/fraud-prevention-with-bigquery-graph/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Based in the UK, Curve are building a financial super-app, a smart wallet that consolidates all your debit and credit cards into a single app and card, simplifying how millions of users spend, send and save money.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;However, operating at this scale means confronting a high-volume, ever-evolving landscape of financial crime. While traditional fraud detection models are excellent at flagging suspicious individual transactions, they often miss the "bigger picture"—the complex networks and hidden relationships that characterize organized fraud rings.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To uncover these connections, we realized we needed to move beyond traditional relational data modeling. By partnering with Google Cloud to implement &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/graph-overview"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery Graph&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, we’ve been able to conduct deep network analysis at scale, helping us identify hidden fraud networks and achieve significant transaction savings.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;The Challenge: The Multi-Hop Problem&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Fraudsters rarely operate in isolation. They often share a subset of attributes across multiple accounts—such as a common device, a specific funding card, or shared contact information. In a standard relational database, identifying these links requires complex "multi-hop" analysis.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Attempting to scale this using standard SQL presented two significant hurdles:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Computational complexity:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Uncovering a chain of connections (e.g., User A connects to User B, who connects to User C) requires multiple, massive self-joins. At our volume of millions of users and tens of millions of connections, these queries quickly became computationally expensive and difficult to maintain.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Data scale:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Our most granular signals involve billions of potential connections. Standard relational approaches struggle to process these relationships without hitting performance bottlenecks or exhausting system resources.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;The Solution: Native Graph Analytics in the data platform&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We transitioned our network analysis to BigQuery Graph to take advantage of its native &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Graph Query Language (GQL)&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; support. The primary advantage was the ability to stop moving our data and start connecting it directly within our existing environment. We had previously explored other popular graph databases - however, being able to keep our data within our BigQuery existing data warehouse gave us significant time and cost savings compared to having to migrate to a new graph database.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style="vertical-align: baseline;"&gt;By modeling our payment ecosystem as a property graph—where users are nodes and their shared identifiers are edges—we simplified our architecture significantly. Instead of writing dozens of lines of complex JOIN logic, we can now use intuitive GQL syntax to "match" patterns of suspicious behavior across our entire dataset. This approach allows us to:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Traverse billions of connections:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; We can now analyze massive datasets, including user-level, device-level, and card-level connections, with high performance.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Unify our data experience:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Because BigQuery Graph is built into the data platform, we can combine graph traversals with standard SQL analysis, search, and machine learning workflows in a single query. We could therefore leverage our existing SQL pipelines to build the nodes and edges tables, switch to GQL for traversing the graph, and then perform final aggregations with standard SQL. This flexibility makes it accessible to more analysts, without having to upskill in a new language.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Impact and Results&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Since integrating BigQuery Graph into our fraud mitigation strategy, the impact on our operational efficiency and bottom line has been profound.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Financial impact:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; We estimate that the automated blocks triggered by these graph-based insights have saved Curve &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;~$12M in transaction losses&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; in 2025 alone.&lt;/span&gt;&lt;/li&gt;
&lt;li role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Precision and accuracy:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Our graph-powered queries have achieved an &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;accuracy of approximately 72%&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; in identifying fraudulent users. This high precision allows our fraud mitigation agents to focus their manual reviews on high-certainty cases rather than chasing false positives.&lt;/span&gt;&lt;/li&gt;
&lt;li role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Operational speed:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Moving to GQL allowed us to streamline our graph queries and refresh our fraud rules more frequently. Previously we were limited to one-hop queries in our hourly rules, but GQL allowed us to optimize these slow-running scripts to stay one step ahead of organized crime.&lt;/span&gt;&lt;/li&gt;
&lt;li role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;From rules to ML: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;The faster we can traverse the network, the faster we can serve graph-based features to our machine learning models. While rebuilding and traversing the graph on a daily basis is sufficient for training models, it is simply too slow at inference-time when transactions can be authorised in less than a second. GQL is allowing us to move towards micro-batch or streaming traversals to serve fresh data to our fraud monitoring models.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Looking Ahead&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Our success with BigQuery Graph has opened new doors for our data science and security teams. We are currently working on fully incorporating our highest-volume signals—including billions of IP address connections—into our real-time detection loops. We are also exploring native graph visualization to give our analysts a more intuitive way to explore and "see" fraud webs as they form.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;By treating our data as a living network of relationships rather than just rows in a table, Curve is ensuring that our security remains as efficient and robust as our customer experience.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 29 Jun 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/data-analytics/fraud-prevention-with-bigquery-graph/</guid><category>BigQuery</category><category>Data Analytics</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Scaling Network Analysis for Fraud Prevention with BigQuery Graph</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/products/data-analytics/fraud-prevention-with-bigquery-graph/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Remy Pereira</name><title>Data Scientist, Curve OS</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Ewan Zhang</name><title>Data Customer Engineer, Google</title><department></department><company></company></author></item><item><title>Synthesize the big picture and analyze trends with BigQuery's AI.AGG function</title><link>https://cloud.google.com/blog/products/data-analytics/deep-dive-into-bigquery-ai-agg-function/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;We recently announced the preview of the BigQuery &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/bigqueryml-syntax-ai-agg"&gt;&lt;code style="text-decoration: underline; vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; function. With &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, you can use natural-language instructions within a single line of SQL to summarize or synthesize information over millions of rows of unstructured or even multimodal data.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-video"&gt;



&lt;div class="article-module article-video "&gt;
  &lt;figure&gt;
    &lt;a class="h-c-video h-c-video--marquee"
      href="https://youtube.com/watch?v=KOGoiV3YNjc"
      data-glue-modal-trigger="uni-modal-KOGoiV3YNjc-"
      data-glue-modal-disabled-on-mobile="true"&gt;

      
        

        &lt;div class="article-video__aspect-image"
          style="background-image: url(https://storage.googleapis.com/gweb-cloudblog-publish/images/maxresdefault_b90Yscv.max-1000x1000.jpg);"&gt;
          &lt;span class="h-u-visually-hidden"&gt;Summarize millions of rows with one line of SQL: AI.AGG&lt;/span&gt;
        &lt;/div&gt;
      
      &lt;svg role="img" class="h-c-video__play h-c-icon h-c-icon--color-white"&gt;
        &lt;use xlink:href="#mi-youtube-icon"&gt;&lt;/use&gt;
      &lt;/svg&gt;
    &lt;/a&gt;

    
  &lt;/figure&gt;
&lt;/div&gt;

&lt;div class="h-c-modal--video"
     data-glue-modal="uni-modal-KOGoiV3YNjc-"
     data-glue-modal-close-label="Close Dialog"&gt;
   &lt;a class="glue-yt-video"
      data-glue-yt-video-autoplay="true"
      data-glue-yt-video-height="99%"
      data-glue-yt-video-vid="KOGoiV3YNjc"
      data-glue-yt-video-width="100%"
      href="https://youtube.com/watch?v=KOGoiV3YNjc"
      ng-cloak&gt;
   &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;While BigQuery already offers &lt;/span&gt;&lt;a href="https://medium.com/google-cloud/analyze-anything-with-ai-powered-sql-in-bigquery-80c0d3113656" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;powerful AI functions that help you analyze individual rows of data&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, analyzing unstructured data at scale requires a different approach.&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt; AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; lets you ask questions from unstructured data such as logs and documents, for example:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;What are the top three feature requests among the negative product reviews?&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;What kind of errors are users seeing most frequently, and how should I start investigating them?&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;In which specific scenarios is our automated agent consistently failing to resolve customer issues?&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;In this post, we'll dive deeper into the &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; function and look at a few of the use cases that it unlocks, including how it can be used in combination with BigQuery’s other managed AI functions for complex, intelligent data analysis.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="vertical-align: baseline;"&gt;Analyzing system logs with &lt;/span&gt;&lt;code&gt;&lt;span style="vertical-align: baseline;"&gt;AI.AGG()&lt;/span&gt;&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;A great example of the power of &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; is analyzing system logging. Log messages, warnings, errors, and stack traces can contain extremely useful information for improving your service, but it can be time- and labor-intensive to investigate them manually — especially if you operate at scale and have thousands of them to review.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;With &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, you can easily analyze many logs at once, grouping and prioritizing them to decide which ones to dig deeper into first. In fact, our BigQuery engineering team used this exact approach while developing &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; — using the function to help identify edge cases related to input handling for the feature itself!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To demonstrate this, let’s analyze a public dataset of Apache Spark standard &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;INFO&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; logs available from &lt;/span&gt;&lt;a href="https://github.com/logpai/loghub" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Loghub&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. Often, clusters can run into issues like memory thrashing, clock drift, or broadcast bottlenecks without ever throwing a &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;FATAL&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; error. You can use &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; to analyze these seemingly normal logs for hidden inefficiencies. You can load &lt;/span&gt;&lt;a href="https://github.com/logpai/loghub/blob/master/Spark/Spark_2k.log_structured.csv" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;the sample data file&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; into BigQuery using &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/batch-loading-data#loading_data_from_local_files"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;any of the supported methods, such as the UI, CLI, or client libraries&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. The following example assumes you’ve loaded the log file into a dataset called &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;bq_logs_demo&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; and table named &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;spark_logs_unstructured&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Notice how we construct the prompt here. We explicitly give the model permission to say "everything is fine," which prevents it from hallucinating errors, while instructing it to hunt for specific anomalies:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;SELECT\r\n  Component AS spark_component,\r\n  COUNT(*) AS log_count,\r\n  AI.AGG(\r\n    Content,\r\n    &amp;#x27;Analyze these Spark system INFO logs. Provide a 2-sentence summary: First, describe the normal operation of this component. Second, explicitly identify any hidden inefficiencies, latency spikes, repeated retries, or unusual patterns.&amp;#x27;\r\n  ) AS performance_analysis\r\nFROM\r\n  `bq_logs_demo.spark_logs_structured`\r\nGROUP BY\r\n  Component\r\nORDER BY\r\n  log_count DESC;&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe30342dd00&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;You can see in these results that &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; successfully acknowledges the "operating normally" messages while surfacing the critical diagnostic insights:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/1_-_Log_Results.max-1000x1000.png"
        
          alt="1 - Log Results"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="amp1o"&gt;The query results pane showing the insights generated by AI.AGG() over the logs dataset.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Extracting categories from unstructured text and image data&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Now, let’s look at some more use cases that demonstrate the flexibility of &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, using one of BigQuery’s public datasets, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;cymbal_pets&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, a fictional pet supply shop. It includes a catalog of products carried by the store, with unstructured data like product names, descriptions, and images, making it a great example of the power of AI functions for handling unstructured data.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For example, let’s say you want to categorize the products in the dataset. The first hurdle in this case isn't applying labels to your products, but discovering what categories exist across the product catalog. With &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, you can ask the model to analyze the raw product names and descriptions to identify the overarching categories for you.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;-- Identify categories of products from product name and description\r\nSELECT\r\n  AI.AGG(\r\n    (&amp;#x27;Product: &amp;#x27;, product_name, &amp;#x27; - Description: &amp;#x27;, description),\r\n    &amp;#x27;What are the major categories of these products?&amp;#x27; \r\n  ) AS category_description\r\nFROM\r\n  `bigquery-public-data.cymbal_pets.products`;&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe30342df10&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;This query returns a simple plaintext list of categories:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/2_-_query_results.max-1000x1000.png"
        
          alt="2 - query results"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="amp1o"&gt;The plaintext result of categories determined by AI.AGG() over our products dataset.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;This initial query is great for discovery, but a simple plaintext string isn't enough to build a reliable, automated data pipeline. To actually tag your data, you need to instruct &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; to return a structured format, like a JSON array. Then, you can use the structured categories as a parameter within another AI function, &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/bigqueryml-syntax-ai-classify"&gt;&lt;code style="text-decoration: underline; vertical-align: baseline;"&gt;AI.CLASSIFY()&lt;/code&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, to actually label each product with its category.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The following SQL statement completes each of these steps in one script:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;-- 1. Declare a variable to hold the array of categories\r\nDECLARE generated_labels ARRAY&amp;lt;STRING&amp;gt;;\r\n\r\n-- 2. Create a dataset to store the results\r\nCREATE SCHEMA IF NOT EXISTS categorized_cymbal_pets;\r\n\r\n-- 3. Generate the JSON string with AI.AGG and extract it into the variable\r\nSET generated_labels = (\r\n      SELECT \r\n        JSON_VALUE_ARRAY(\r\n          AI.AGG(\r\n            (&amp;#x27;Product: &amp;#x27;, product_name, &amp;#x27; - Description: &amp;#x27;, description), \r\n            &amp;#x27;Identify the major product categories. Return exactly one valid JSON array of strings. Do not include markdown code blocks, backticks, or conversational text.&amp;#x27;\r\n          )\r\n        )\r\n      FROM `bigquery-public-data.cymbal_pets.products`\r\n);\r\n\r\n-- 4. Feed the variable directly into AI.CLASSIFY\r\nCREATE OR REPLACE TABLE `categorized_cymbal_pets.categorized_products` AS (\r\nSELECT \r\n  product_name,\r\n  description,\r\n  AI.CLASSIFY(\r\n   (&amp;#x27;Product: &amp;#x27;, product_name, &amp;#x27; - Description: &amp;#x27;, description),\r\n    generated_labels\r\n  ) AS assigned_category\r\nFROM \r\n  `bigquery-public-data.cymbal_pets.products`\r\n);&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe30342dee0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;You can now view the resulting table, which includes an &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;assigned_category&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/3_-_categorized_table_preview.max-1000x1000.png"
        
          alt="3 - categorized table preview"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="amp1o"&gt;A preview of the categorized_products table which includes the new assigned_category column created by AI.AGG() and AI.CLASSIFY().&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;If you look closely at the intermediate table, you'll notice the structured categories changed slightly from the initial plaintext results. This happens for two reasons: First, LLMs are nondeterministic, meaning that they don't always give the exact same response to the same prompt. Second, the prompt was adjusted to accommodate the new output structure.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/4_-_structured_categories.max-1000x1000.png"
        
          alt="4 - structured categories"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="amp1o"&gt;The returned product categories are structured as JSON by AI.AGG() as requested as part of the prompt.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;With the table now labeled by category, you can group by the categories to do traditional SQL aggregation, or use &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; to consider each category separately. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For example, the following query fetches traditional metrics (like row counts) right alongside a synthesized AI summary of what those specific grouped products have in common:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;-- Synthesize insights grouped by our newly assigned categories\r\nSELECT \r\n  assigned_category,\r\n  COUNT(*) AS item_count,\r\n  AI.AGG(\r\n    (&amp;#x27;Product: &amp;#x27;, product_name, &amp;#x27; - Description: &amp;#x27;, description),\r\n    &amp;#x27;Write a concise, one-sentence summary describing the common characteristics or purpose of the products in this category.&amp;#x27;\r\n  ) AS category_summary\r\nFROM \r\n  `categorized_cymbal_pets.categorized_products`\r\nGROUP BY \r\n  assigned_category\r\nORDER BY \r\n  item_count DESC;&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe30342deb0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/5_-_grouped_analysis_query.max-1000x1000.png"
        
          alt="5 - grouped analysis query"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="amp1o"&gt;Query results showing analyzing with AI.AGG() alongside more traditional SQL methods.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Unstructured data isn't limited to text. Because &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; natively supports multimodal inputs, you can return aggregated insights directly from image files.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;The &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;cymbal_pets&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; Google Cloud project also contains a Cloud Storage bucket full of product photos. By creating an external object table, you can securely pass the image URIs directly into &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; and ask the model to summarize the visual content of the entire collection.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;-- Summarize content of images in the object table\r\nSELECT\r\n  AI.AGG(\r\n    STRUCT(OBJ.GET_ACCESS_URL(ref, &amp;#x27;r&amp;#x27;)),\r\n    &amp;#x27;What are the major categories of these images?&amp;#x27;\r\n  ) AS category_description\r\nFROM\r\n  `bigquery-public-data.cymbal_pets.product_images`;&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe30342df70&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/6_-_image_query.max-1000x1000.png"
        
          alt="6 - image query"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="amp1o"&gt;Query results showing AI.AGG() surface product categories by analyzing the product images located in Google Cloud Storage.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;How AI.AGG() works and best practices&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To use &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; effectively in your own environment, it helps to understand how it processes data behind the scenes. Here’s what you need to know about context windows, error handling, and optimizing your pipelines.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;1. Context windows and multi-level aggregation&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;LLMs have a specific context window and can have a hard time handling massive amounts of input. &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; solves this problem by automatically dividing your input rows into batches, aggregating those batches, and then aggregating the results of those batches into a final answer. This means you don’t have to worry about manually managing the context window when passing in large numbers of rows. Note that &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; won’t split up a row of data across batches, so make sure that each individual row is smaller than the context window, to avoid the row being skipped. Many smaller rows will give &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; more flexibility with how to batch each row.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;2. Token usage with multi-level aggregation&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;br/&gt;&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;Because &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; uses a multi-level aggregation structure, the total input tokens sent to the model may be higher than the raw tokens in your starting table (depending on how many rounds of aggregation are required). As a best practice, always reduce the number of input tokens by using &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;LIMIT&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; or pre-filtering your data upstream before passing it to &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;3. Specifying your model endpoint&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;If you don’t specify a model endpoint, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; will default to a recent model. However, for production pipelines, you often want explicit control:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Short-form names:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; You can use a short-form endpoint (e.g., &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;gemini-2.5-flash&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;), in which case &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; will use that model in the query execution region:&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;AI.AGG(\r\n  input_data,\r\n  instructions =&amp;gt; &amp;#x27;Your instructions here.&amp;#x27;,\r\n  endpoint =&amp;gt; &amp;#x27;gemini-2.5-flash&amp;#x27; \r\n)&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe30342ddf0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong style="vertical-align: baseline;"&gt;Fully-qualified names:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; If the query execution region doesn’t support your desired model, or you prefer to use a global or multiregional endpoint, provide the fully qualified model name:&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;AI.AGG(\r\n  input_data,\r\n  instructions =&amp;gt; &amp;#x27;Your instructions here.&amp;#x27;,\r\n  endpoint =&amp;gt; &amp;#x27;https://aiplatform.googleapis.com/v1/projects/[YOUR_PROJECT]/locations/global/publishers/google/models/gemini-3.5-flash&amp;#x27;\r\n)&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe30342ddc0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;4. Input and output modalities&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Inputs:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; supports text (via strings or references to text files) and image data. It also supports arrays of these types, though you should refer to the &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/bigqueryml-syntax-ai-agg#known_issues"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;known issues documentation&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; for edge cases regarding arrays of images.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Outputs: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;The function &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;will always return a string&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;. While you can prompt the model in your instructions to format the output as JSON or Markdown, keep in mind that the database engine does not strictly enforce this. Multimodal output (e.g., generating an image) is not currently supported.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;5. Treatment of &lt;/strong&gt;&lt;code&gt;&lt;strong style="vertical-align: baseline;"&gt;NULL&lt;/strong&gt;&lt;/code&gt;&lt;strong style="vertical-align: baseline;"&gt;s&lt;br/&gt;&lt;/strong&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; automatically skips &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;NULL&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; input rows without processing them. However, you must be careful when passing structured data. Like other BigQuery AI functions, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; concatenates &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;STRUCT&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; fields similarly to the standard &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;CONCAT()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; function. This means if even one field within your &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;STRUCT&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; is &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;NULL&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, the entire row is treated as &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;NULL&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; and will be skipped.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Let's revisit our first categorization query. What if several rows of our &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;products&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; table are missing their &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;description&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;? Because of the &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;NULL&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; concatenation rule, those rows would be silently dropped from the analysis entirely. Here is how we can use &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;IFNULL()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; to provide a fallback string, guaranteeing that every product is taken into account even if its description is blank:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;-- Identify categories of products from product name and (optional) description\r\nSELECT\r\n  AI.AGG(\r\n    (&amp;#x27;Product: &amp;#x27;, product_name, &amp;#x27; - Description: &amp;#x27;, IFNULL(description, &amp;#x27;No description provided&amp;#x27;)),\r\n    &amp;#x27;What are the major categories of these products?&amp;#x27; \r\n  ) AS category_description\r\nFROM\r\n  `bigquery-public-data.cymbal_pets.products`;&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe303404250&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;6. Error handling&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;If &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; receives invalid input, or encounters an error during LLM processing, it will attempt to provide partial results. Rows containing invalid input or which were rejected by the LLM model will not be considered in the final results. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;You can review exactly how many rows failed to process by checking your BigQuery job statistics, exactly as you would for scalar managed AI functions like&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt; AI.IF()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/7_-_job_information_with_error_info.max-1000x1000.png"
        
          alt="7 - job information with error info"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="amp1o"&gt;information showing an example of Gen AI function error details.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Give it a try!&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;These are just a few examples of the ways &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; can help analyze unstructured data. The &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/bigqueryml-syntax-ai-agg"&gt;&lt;code style="text-decoration: underline; vertical-align: baseline;"&gt;AI.AGG()&lt;/code&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt; function&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; is in preview in BigQuery now, so it’s available to all BigQuery users. Try it out on your own use cases! &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;You may also be interested in checking out BigQuery's other &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/generative-ai-overview#managed_ai_functions"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;managed AI functions&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.CLASSIFY()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.IF()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, and &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.SCORE()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, as well as &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/generative-ai-overview#general_purpose_ai"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;general-purpose functions&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; like &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AI.GENERATE()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;. We look forward to seeing what you build with them.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 29 Jun 2026 16:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/data-analytics/deep-dive-into-bigquery-ai-agg-function/</guid><category>AI &amp; Machine Learning</category><category>BigQuery</category><category>Data Analytics</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/images/0_-_Hero_Image.max-600x600.jpg" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Synthesize the big picture and analyze trends with BigQuery's AI.AGG function</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/images/0_-_Hero_Image.max-600x600.jpg</image><site_name>Google</site_name><url>https://cloud.google.com/blog/products/data-analytics/deep-dive-into-bigquery-ai-agg-function/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Thomas Anchor</name><title>Software Engineer</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Alicia Williams</name><title>Developer Advocate</title><department></department><company></company></author></item><item><title>Boost BigQuery with Python: Managed Python UDFs now generally available</title><link>https://cloud.google.com/blog/products/data-analytics/python-udf-in-bigquery-now-generally-available/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;SQL is the industry standard for high-performance structured data analysis. However, expressing complex procedural logic, scientific computations, advanced string manipulations, or machine learning workflows in pure SQL can be highly challenging, if not impossible. That kind of work is better done with Python. Data practitioners often take on additional infrastructure management tasks &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;—&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; maintaining custom images and containers, and working with additional compute services — just to run simple helper functions with custom Python code and libraries. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style="vertical-align: baseline;"&gt;Today, we are thrilled to announce the general availability (GA) of&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/user-defined-functions-python"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery Managed Python User-Defined Functions (UDFs)&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;This launch represents a major milestone in BigQuery’s extensibility strategy, allowing data scientists, engineers, and analysts to execute custom Python code directly and securely inside BigQuery using standard SQL queries or &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/bigquery-dataframes-introduction"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery DataFrames&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; (BigFrames) in Python. With this release, Python UDFs are fully supported for production enterprise workloads and completely integrated into BigQuery's billing SKUs. &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Bridging SQL and the Rich Python Ecosystem&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;BigQuery Managed Python UDFs run on BigQuery-managed serverless resources that automatically scales to billions of rows, without having to set up infrastructure or manage containers. BigQuery automatically handles the compilation, image building, security patching, deployment, and execution of your Python code, making it super simple to use Python functions in your SQL.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Core benefits&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Flexibility:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Access the vast Python ecosystem — including top-tier scientific and mathematical libraries like NumPy, SciPy, pandas, scikit-learn and more — directly in your SQL select statements.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Tight external API integration:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Clean and enrich your BigQuery tables in real time by calling external web APIs or Google Cloud services such as Cloud Translation, Gemini Enterprise Agent Platform or custom microservices securely within your queries.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Fully managed and serverless:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; BigQuery handles the underlying container infrastructure and auto-scales performance dynamically.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Code example &lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Here is an example of a Python UDF that utilizes a popular Python package —&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt; beautifulsoup&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; — to remove HTML tags. We use this function to process &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;StackOverflow answer bodies that are stored in a BigQuery public table:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;CREATE OR REPLACE FUNCTION `your_project.your_dataset.clean_html`(html_content STRING)\r\nRETURNS STRING\r\nLANGUAGE python\r\nOPTIONS (\r\n  runtime_version = \&amp;#x27;python-3.11\&amp;#x27;,\r\n  entry_point = \&amp;#x27;strip_tags\&amp;#x27;,\r\n  packages = [\&amp;#x27;beautifulsoup4&amp;gt;=4.12.0\&amp;#x27;]\r\n) AS r\&amp;#x27;\&amp;#x27;\&amp;#x27;\r\nfrom bs4 import BeautifulSoup\r\n\r\ndef strip_tags(html_content):\r\n    if not html_content:\r\n        return &amp;quot;&amp;quot;\r\n    soup = BeautifulSoup(html_content, &amp;quot;html.parser&amp;quot;)\r\n    return soup.get_text(separator=&amp;quot; &amp;quot;)\r\n\&amp;#x27;\&amp;#x27;\&amp;#x27;;&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe31018a280&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;How to query it:&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;SELECT \r\n  id, \r\n  `your_project.your_dataset.clean_html`(body) AS cleaned_answer_body\r\nFROM \r\n  `bigquery-public-data.stackoverflow.posts_answers`\r\nLIMIT 100&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe31018a2e0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Advanced capabilities&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;For advanced users, Python UDF adds a set of capabilities to tune the performance as well as monitor the usage. Here are some examples. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Vectorized processing with Pandas PyArrow&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;To maximize throughput, the GA release supports direct processing of vectorized input as PyArrow RecordBatches. By processing columns of data in bulk rather than row-by-row, PyArrow eliminates Python serialization and conversion overhead, boosting performance by up to 10x for data-intensive calculations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Configurable container resources&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;For heavy-duty data science and ML data preparation, you can now provision container memory (up to 16 GB) and CPU (up to 4 vCPUs) per function. This enables memory-intensive workloads (such as loading large serialized models or geospatial datasets) to run directly within the sandbox.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Customizable concurrency&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;Optimize your throughput and resource efficiency by configuring concurrent requests per container (up to 1,000 concurrent operations). This helps ensure that your scale-out execution is highly cost-effective and performs exceptionally well under heavy parallel loads.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Streaming logs and real-time metrics&lt;br/&gt;&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;Easily d&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;ebug and monitor your production workloads. The BigQuery console now features a direct link from your query results to real-time CPU, memory, and concurrency metrics in Cloud Monitoring.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Billing&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;BigQuery Managed Python UDF are billed with &lt;/span&gt;&lt;a href="https://cloud.google.com/bigquery/pricing#bigquery-services-pricing"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery Services SKU&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. This SKU is fully eligible for &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;BigQuery spend commitment-based usage discounts (CUDs)&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;, allowing you to maximize budget efficiency.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;You can also get cost observability through &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;INFORMATION_SCHEMA.JOBS &lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;as well as using billing labels &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;MANAGED_ROUTINE_EXECUTION&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; and &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;MANAGED_ROUTINE_BUILD&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;See more details in the &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/user-defined-functions-python#pricing"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Pricing&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; section of the documentation. &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Getting started &lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;To get started with BigQuery Python UDFs, first check out &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/user-defined-functions-python"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;product documentation&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Then, try out the functions &lt;/span&gt;&lt;a href="https://console.cloud.google.com/bigquery?ws=!1m5!1m4!6m3!1sbigquery-public-data!2spython_udfs!3stokenize"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;published&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; in the public BigQuery dataset. For example, run the following code in a BigQuery project to tokenize country names data from BigQuery public data. Under the hood, the token UDF utilizes the &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;o200k_base&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; tokenizer library.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;SELECT \r\n  country_code,\r\n  country_name,\r\n  `bigquery-public-data`.python_udfs.tokenize(country_name) AS name_tokens,\r\n  ARRAY_LENGTH(`bigquery-public-data`.python_udfs.tokenize(country_name)) AS token_count\r\nFROM \r\n  `bigquery-public-data.census_bureau_international.country_names_area`\r\nORDER BY \r\n  country_name&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fe31018a340&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Or, try out this &lt;/span&gt;&lt;a href="https://codelabs.developers.google.com/managed-python-udfs" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;code lab&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; to explore some advanced scenarios. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Then, to learn how to implement other advanced design patterns, we encourage you to explore our official public documentation guides: &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Calling Google Cloud or online services (with connections):&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; To connect to first-party Google Cloud services such as Gemini Enterprise Agent Platform or Cloud Translation, or external API endpoints securely using Cloud Resource connections, - check out the &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/user-defined-functions-python#use-online-service"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Call Google Cloud or online services in Python code guide&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;BigQuery DataFrames (BigFrames) Python UDFs:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;To learn how to write, deploy, and scale custom Python functions natively from standard Jupyter notebook or Colab environments using BigQuery DataFrames, visit the &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/user-defined-functions-python#bigquery-dataframes_1"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Customize Python functions for BigQuery DataFrames guide&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Bring your Python workflows out of isolation and directly into the heart of your data warehouse today!&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 22 Jun 2026 17:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/products/data-analytics/python-udf-in-bigquery-now-generally-available/</guid><category>Application Development</category><category>Data Analytics</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Boost BigQuery with Python: Managed Python UDFs now generally available</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/products/data-analytics/python-udf-in-bigquery-now-generally-available/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Sandeep Karmarkar</name><title>Group Product Manager</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Chao Shen</name><title>Tech lead</title><department></department><company></company></author></item></channel></rss>