Aggressive Savings
Low cost, higher risk of queuing during bursts.
Where to focus your FinOps efforts today.
v… | Released …
An enterprise-grade diagnostic and simulation suite for Google Cloud BigQuery costs. Analyzes historical telemetry, query workloads, and storage configurations across GCP organizations to maximize cost efficiency.
BigQuery FinOps Optimizer decouples query execution, slot reservation management, and workload target scopes so you can run organization-wide audits securely without needing administrative permissions across every single workload project.
The GCP project used to execute analysis queries against INFORMATION_SCHEMA views. All metadata scanning costs incurred by this tool are billed here.
bigquery.googleapis.com (Mandatory)bigquerymigration.googleapis.com (AI Doctor)cloudaicompanion.googleapis.com (AI Doctor)roles/bigquery.jobUser (runs queries)roles/bigquery.dataViewer (reads results)The central GCP project that owns your BigQuery Slot Commitments, Edition Reservations, and Autoscaler baseline/max limits.
bigqueryreservation.googleapis.com (Slots Optimizer)roles/bigquery.resourceViewerroles/bigquery.resourceAdminThe set of target GCP projects analyzed. Leave empty to run an organization-wide audit across all projects in the GCP org.
*_BY_ORGANIZATION viewsroles/bigquery.resourceViewerNote: This analysis evaluates physical vs logical billing specifically for BASE TABLE storage (excluding materialized views and external tables).
| Project | Dataset | Current Model | Recommended Model | Monthly savings ($) | Savings (%) | Action |
|---|
Partitioning and clustering recommendations from two complementary engines: Google Active Assist (compute-optimized) and our Static Schema Auditor (bytes-scanned-optimized).
Optimizes for Compute (Slot-ms). Analyzes the last 30 days of query history to calculate the net compute savings of clustering/partitioning.
Optimizes for Storage & On-Demand Costs (Bytes Scanned). Performs a structural analysis of tables >1GB to enforce clustering/partitioning best practices.
These partitioning and clustering recommendations are generated by Google's native AI engine based on your query history telemetry over the last 30 days.
| Project | Dataset | Table | Recommendation | Suggested Columns | Partition Column | Est. On-Demand Savings | Est. Editions Savings |
|---|
This module statically audits your database schemas to proactively detect massive, unclustered, or unpartitioned tables before they are queried and incur high costs.
| Project | Dataset | Table | Rows | Logical Size | Partitioned | Clustered | Suggested Columns | Risk Status |
|---|
This analyzer profiles your historical BigQuery jobs to determine their most cost-effective billing model (On-Demand vs. Editions/Autoscaler). It is designed to act as an Advanced Workload Router, helping you identify structural "slot hogs" (better for On-Demand) and "data hogs" (better for Editions).
Pro-Tip for Spikey Workloads: For extremely sparse workloads with high peaks, it is often cheaper to move those specific projects back to On-Demand billing (paying per TB processed) instead of Editions. This eliminates the cost of idle slots during cool downs entirely. This analyzer is designed to identify exactly these candidates!
To identify the specific inefficiencies of individual queries, this tool evaluates each job in isolation. In reality, BigQuery Editions highly benefit from concurrency (sharing idle slots across many overlapping jobs). Because blending queries together hides individual bad actors, we use a Smart Job-Centric approach, applying advanced heuristics to approximate how an isolated job behaves against the BigQuery Autoscaler:
This scatter plot visualizes jobs based on their projected costs. Jobs above the dotted line are more expensive on Editions (CPU-heavy). Jobs below the dotted line are more expensive on On-Demand (IO-heavy).
| Project ID | On-Demand Cost ($) | Editions Cost ($) | Error Tax ($) | Savings ($) |
|---|
Profiles query-level billing candidates. Workloads currently on On-Demand represent Potential Savings. Workloads already on Editions represent Realized Cost Avoided by your active reservations.
| Project | Job ID | Current Model | Recommended Model | Profile | Savings / Cost Avoided ($) | Savings (%) | Action |
|---|
BigQuery slots are virtual compute units used to execute jobs. This tool analyzes slot utilization at a high-resolution, second-by-second granularity using INFORMATION_SCHEMA.JOBS_TIMELINE to help you size reservations effectively. While Google Cloud's Slot Estimator provides recommendations based on hourly averages, this high-resolution approach identifies short-lived peaks to ensure you have enough capacity to avoid slot contention during bursty workloads. It provides the following metrics:
Note: All recommendations are rounded to the nearest 50 slots, matching BigQuery's scaling increments.
Scope Note: The chart shows all query usage across your organization (including On-Demand queries). However, the Recommendations table only analyzes jobs that ran within a reservation.
This view answers two critical questions for capacity planning:
Descriptive: Based on configuration logs of what was actually provisioned and billed.
Why this matters: BigQuery Enterprise slot capacity is highly dynamic. Autoscaling fluctuates continuously based on workload, and capacity commitments can change at any time. To understand your true cost, we must calculate the exact "area under the curve" (time x slots) down to the second. This view helps you understand your compute overages and optimize commitments.
Note: These metrics represent the compute capacity provisioned and billed by Google Cloud, not the actual slots consumed by your queries.
What percentage of our compute hours were spent on autoscaling vs our baseline?
Descriptive: Shows the proportion of provisioned capacity types.
| Reservation ID | Recommendation | Action |
|---|
BigQuery's Reservation Predictability features allow you to control how your reservations scale beyond their baseline slot capacity using different scaling modes. These modes determine the order and types of additional slots (idle or autoscaler) that can be accessed, up to a configured max_slots limit.
ALL_SLOTS (Predictable Performance & Maximum Potential)
This mode aims to provide a balance of performance and cost-efficiency by utilizing all available slot sources. After the reservation's baseline slots (slot_capacity) are fully consumed, it will:
max_slots.Use Case: Good for workloads that can benefit from opportunistic use of idle capacity but also require the guarantee of autoscaling to meet peak demand up to a predictable limit.
IDLE_SLOTS_ONLY (Most Cost-Effective)This mode prioritizes cost savings by only using free capacity. After baseline slots are used, it will:
max_slots.Use Case: Ideal for cost-sensitive workloads that can tolerate performance variability. Depends entirely on the availability of idle slots.
AUTOSCALE_ONLY (Dedicated Scaling)This mode ensures that the reservation scales only with dedicated resources, without relying on shared idle capacity. After baseline slots are used, it will:
max_slots.
Use Case: Suitable for workloads requiring consistent scaling behavior based purely on their own demand. Requires ignore_idle_slots to be set to true.
Prerequisite: To use any of these scaling modes with max_slots, "Reservation-based fairness" must be enabled on the administration project.
Select a risk profile to see the recommended baseline slots and estimated costs.
Low cost, higher risk of queuing during bursts.
Optimal balance of cost and performance.
Zero queuing risk, highest cost.
Based on our real query history, what size should our reservations be?
Prescriptive: Suggested optimal capacity based on actual query workload demand.
Why are these recommendations higher than the official Google Cloud Slot Estimator?
The official GCP tool optimizes for cost based on your actual billed usage, which is artificially capped by your current max_slots limit. It only sees what was provisioned, not what was queued.
This FinOps Optimizer analyzes your unconstrained query demand to optimize for performance. The delta between the two tools represents the query queueing and performance degradation your users experience during bursts.
| Reservation ID | Autoscaler baseline (P90) | Autoscaler max (P90) | Autoscaler max (P99) | Autoscaler max (Peak) |
|---|
Estimate savings from enabling Fluid Scaling (per-second billing).
BigQuery Fluid Scaling introduces true sub-minute elasticity to the autoscaler. By shifting from discrete one-minute billing increments to a continuous compute profiling model, you only pay for the exact duration of your workload execution, down to the second.
Expected Impact: Industry-standard power tests show this architectural shift improving overall price-to-performance by up to 34%. The simulator below analyzes your organization's unique `JOBS_TIMELINE` data to calculate the exact financial recovery you'll see by enabling per-second billing.
| Reservation ID | Status | Legacy Slot-Hrs | Fluid Slot-Hrs | Total Used Slot-Hrs | Recoverable Slot-Hrs | % Savings | $ Window | $ Monthly | $ Annual |
|---|
While the aggregate numbers above show the total potential value of Fluid Scaling, this pattern-level breakdown is critical for actionability and risk mitigation:
Top 100 (query pattern × reservation) combinations ranked by estimated savings impact. The same pattern may appear once per reservation it runs on.
| Pattern | Sample Job ID | Workload Type | Reservation | Job Count | Avg Duration (s) | Avg Slots/Job | Exposure Score | Indicative Savings (Window) |
|---|
This simulator helps you find the most cost-effective baseline by balancing the cost of idle slots (waste) against the cost of autoscaling (bursts). It tests every baseline size and calculates the total bill for different commitment tiers. The turning point with the lowest 1-Year Commit cost will be highlighted.
This matrix simulates costs across different Baseline choices. For each baseline level, we calculate how much capacity would be covered by the fixed baseline vs. how much would spill over into variable Autoscale capacity.
In Buckets
Shows frequency distribution. E.g., how many minutes your total usage was within that specific slot range.
Utilization %
Measures how efficiently that baseline is used. 100% means no slots wasted; lower percentages imply idle capacity.
Autoscale
The volume of compute (in hours or months) that exceeded the baseline and required dynamic scaling.
Total Monthly Cost
The final calculated sum of (Autoscale + Baseline) projected to a standard 730-hour billing month.
Tip: Look for the row that minimizes the Total Monthly Cost for your target commitment tier to find your optimal efficiency point.
Resolution Note: This simulation aggregates slot usage to 1-minute averages to balance performance and accuracy. This acts as a good approximation for Fluid Scaling, but may smooth out sub-minute spikes.
| Commitment Type | Autoscale Slots | Recommended Baseline | Estimated Monthly Cost |
|---|
| In Buckets | Below Baseline | Autoscale | Autoscale Cost | Baseline Cost | Total Monthly Cost | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Bucket | Minutes | Slots | Utilization % | Slot-Hours | Slot-Month | EE PAYG | EE PAYG | EE 1 Year | EE 3 Years | EE PAYG | EE 1 Year | EE 3 Years |
Google Cloud billing does not attribute BigQuery Editions costs to the specific projects that ran the queries. Following hybrid cost attribution model is helping with that:
| Project ID | Reservation ID | Direct Usage Cost ($) | Allocated Waste ($) | Total Cost Attribution ($) |
|---|
| Project ID | Total Slot Hours |
|---|
This tool identifies reservations experiencing a "continuous trickle" of small, frequent queries. Documentation and expert guidelines recommend specific strategies to optimize these workloads and avoid unnecessary autoscaler activation overhead.
Setting a Baseline > 0 is recommended to trade a small fixed cost for lower query latency. The slots are already allocated, allowing light interactive queries to start instantly without waking up the autoscaler.
Pro-Tip (Slot Sharing): To reduce waste, place multiple reservations on the same Admin Project. Idle baseline slots are automatically shared with other workloads!
Since these "trickle" queries usually scan very little data (low I/O) but are penalized by the 1-minute slot minimum on Editions, they are often much cheaper on the On-Demand model (which charges purely per TB processed).
Implementation: You can mix pricing models in your organization. Simply bind the projects running these small queries to a dedicated Billing Project configured for On-Demand.
BigQuery's Advanced Runtime can automatically optimize short queries by consolidating execution into a single stage and skipping the shuffle layer. This reduces slot usage and latency dramatically.
Tip: To leverage this, keep query working sets small and result sizes small. Ensure you have enabled the Advanced Runtime for your project. Read more in the Google Cloud Blog.
Compare the cost of the job under both models: calculate the On-Demand cost based on total_bytes_billed and compare it against the Editions cost based on total_slot_ms (factoring in the 1-minute minimum for bursts). Use the Query cost optimizer tab in this tool to see these specific cost comparisons for individual jobs!
Uses global settings for Project, Region, and Lookback Window.
Are we paying for idle slots due to a continuous trickle of small queries?
Prescriptive: Identifies reservations with high frequency of low-slot queries that might benefit from a fixed baseline.
| Reservation ID | Total Flagged Hours | Peak Hourly Queries | Top Offending Projects | Recommendation |
|---|
Grid showing when the trickle happens across the week (Hour of Day vs Day of Week).
| Hour | Sun | Mon | Tue | Wed | Thu | Fri | Sat |
|---|
Are these queries causing inefficient scale-ups? This table reveals the most frequent small queries that run during periods of high query counts but low slot usage. Look for queries with high frequency but very low (or 0 MB) data processed (like transactions or literal inserts).
Why 0 MB? These queries are the perfect example of what the blog post calls "short" or "trickle" queries. They process no data but still consume slot time and trigger overhead. They are excellent candidates for Short Query Optimizations or for being routed to On-Demand pricing (where a 0 MB query costs nothing or at most the 10MB minimum charge, avoiding the 1-minute slot penalty on Editions).
| Query Text | Project | Example Job ID | Frequency | Avg Slot Hours | Avg Duration (s) | Avg Bytes Processed | Recommendation |
|---|
This view helps you identify which users are running the most queries, scanning the most data, and consuming the most slot hours. Use this information to optimize workloads, educate users, or allocate costs.
Status: The current implementation uses a direct usage calculation (Data Billed × On-Demand Rate) and (Slot Hours × Editions Rate).
Complexity: In a shared reservation environment, attributing exact costs to users is hard because idle slots are shared and bursts are unpredictable. True cost might require a proportional allocation of reservation waste.
Uses global settings for Project, Region, and Lookback Window.
| User Email | Identity | Billing Mode | Query Count | Total Data Billed | Total Slot Hours | Actual Cost | Waste | Est. On-Demand | Est. Editions | Potential Savings |
|---|
BigQuery's History-Based Optimization (HBO) is a native feature — enabled by default since GA — that uses telemetry from completed executions of similar queries to automatically apply additional optimizations and improve query performance. HBO applies to all queries in BigQuery, including On-Demand pricing — it is not limited to reservations.
When you run a query repeatedly, BigQuery learns from each run and applies optimizations. These are split into two categories:
This tool estimates HBO's impact by comparing each query's execution time against its historical average (avg_previous_execution_ms), filtering out jobs where data volume increased. Savings are projected to monthly slot-hours and dollars.
HBO Status: The status panel below checks each project's PROJECT_OPTIONS for the adaptive setting. If HBO has been disabled, you can re-enable it with the provided DDL.
Uses global settings for Project, Region, and Lookback Window by default, or use the overrides below. (Project Scope Only)
| Project | Status | Action |
|---|
| Job ID | % Time Saved | New Elapsed (ms) | Original Elapsed (ms) | Optimizations Applied |
|---|
While the existing Storage Cost Optimizer tab handles the actual billing costs (should we pay for compressed or uncompressed data?), this Storage Hygiene Auditor tab handles architectural waste (are we burning money by leaving default settings on tables with high churn?).
Identify datasets with high churn rates where reducing the default 7-day Time Travel window to 2 days can instantly cut storage costs.
Detect tables that are fully dropped and recreated daily, highlighting opportunities to switch to incremental MERGE or partitioned updates.
Uses global settings for Project and Region.
| Project | Dataset | Table Name | Live Size (Physical GiB) | Time Travel Size (GiB) | Churn Ratio | Health Status |
|---|
This scanner helps identify structural and pipeline inefficiencies that waste compute and storage costs.
User Story: As a Data Architect, I want the app to detect jobs using the legacy tabledata.insertAll API or high-frequency SQL INSERTs, so I can migrate them to the Storage Write API and cut streaming costs by 50%.
User Story: As a FinOps Manager, I want to identify Materialized Views (MVs) where the background refresh cost (Slots consumed) is actually higher than the compute saved during querying, so I can pause auto-refresh if it's wasting money.
Applying a LIMIT clause to a SELECT * query does not affect the amount of data read. You are billed for reading all bytes in the entire table, and the query counts against your free tier quota.
Best practice: LIMIT speeds up performance, but doesn’t reduce costs. For data exploration, consider using BigQuery’s (free) table preview option instead.
This table identifies expensive queries (>100 GB scanned) using inefficient patterns. Each row shows the impact, root cause, and suggested fix.
| User Email | Project ID | Job ID | Data Billed | Abuse Type | Estimated Waste ($) | Query Snippet | Suggested Fix |
|---|
Audits data ingestion pipelines for compute waste. Identifies service accounts running high-frequency SQL INSERT statements. Migrating these to the modern Storage Write API consumes zero query slots and cuts streaming costs by 50%.
| User Email | Project ID | Insert Count (Last 1D) | Wasted Slot Hours | Estimated Waste ($) | Recommendation |
|---|
This table shows the compute cost (slot hours) consumed by background refreshes for each Materialized View. High refresh costs with low query usage indicate waste.
| Project ID | Dataset | MV Name | Refresh Count | Total Slot Hours |
|---|
This table lists jobs where a single worker node took 10x longer than average to process data, indicating unbalanced joins or grouping keys.
🔍 What is Data Skew? Data skew occurs when data partitions unevenly across worker slots during a JOIN, GROUP BY, or window PARTITION BY operation. A single worker node becomes overwhelmed processing a "hot key" while other workers sit idle, causing query latency to spike and holding slots hostage.
🛠️ Step-by-Step Investigation in BigQuery Console:
S02: Join+Aggregate).NULL, "", or 'N/A' keys all hash to the same single worker. Add WHERE join_key IS NOT NULL before joining.MOD(FARM_FINGERPRINT(id), 10)) to split rows across 10 workers.OVER (ORDER BY ...) which forces all rows onto a single worker node; add appropriate PARTITION BY clauses.| Project ID | Job ID | User Email | Stage Name | Avg Compute (ms) | Max Compute (ms) | Skew Ratio | Action |
|---|
Analyzes workload concurrency profiles across automated pipelines, BI dashboards, and ad-hoc query streams to recommend optimal execution priority (BATCH vs INTERACTIVE).
⚡ Core Execution Differences: In BigQuery, INTERACTIVE queries are executed immediately against available slot capacity, subject to a strict hard limit of 100 concurrent interactive queries per project. When this limit is hit, additional queries fail with rate-limit errors. BATCH queries are queued and auto-started within minutes as slot capacity becomes available, auto-retrying gracefully without triggering immediate rate-limit failures.
💰 Hardware & Pricing Parity: Compute hardware, slot performance, and per-byte/slot-hour pricing are 100% identical between BATCH and INTERACTIVE queries. Running a pipeline in BATCH mode costs the exact same as INTERACTIVE, but protects your BI dashboards and human users from slot starvation during peak business hours.
💳 On-Demand Capacity Protection: For projects without edition reservations (pure On-Demand / Pay-Per-TB), BigQuery enforces a strict ceiling of 2,000 concurrent slots per project. Running heavy ETL pipelines concurrently in INTERACTIVE mode exhausts this 2,000-slot pool, causing BI dashboards and ad-hoc analysts to experience severe query queuing and degradation.
BATCH priority (guarantees auto-retry and prevents dashboard slot starvation).INTERACTIVE priority (essential for sub-second UI responsiveness).BATCH priority (isolated execution during idle capacity).| Workload / Target | Workload Type | Project ID | Runs | Slot Hours | % Interactive | Human Wait (s) | Finding | Remediation |
|---|
Temporary, dev, and sandbox datasets without expiration rules are one of the biggest sources of passive storage waste.
| Project ID | Dataset ID | Status |
|---|
If "Require Partition Filter" is off, users will accidentally run full-table scans on massive tables instead of filtering by date.
| Project ID | Dataset ID | Table Name | Partition Type |
|---|
This table lists queries from the last 30 days where a Materialized View was considered but rejected by the optimizer. Showing the 50 most recent.
| User Email | Job ID | MV Name | Rejected Reason |
|---|
This table lists queries from the last 30 days that triggered resource warnings (e.g., approaching limits). Showing the 50 most recent.
| User Email | Job ID | Warning |
|---|
BigQuery analyzes query execution stages and publishes performance telemetry. This dashboard identifies queries affected by performance bottlenecks, including slot contention, insufficient shuffle quota, and significant changes in input data volume.
BigQuery identifies input data change insights by comparing the records read in the current execution against the historical average of equivalent runs (grouped by their normalized query hash).
Why are some increases so huge? If a query's history contains mostly dry-runs, tests on empty partitions, or tiny staging tables, the baseline average divisor is extremely low (e.g., 1 row). When the query runs on full production data, the relative difference escalates exponentially (e.g., a 20,000% increase is formatted as a +200x multiplier).
Uses global settings by default, or use the overrides below. (Project Scope Only)
Queries that experienced significant delays due to slot resource limitations.
| Job ID | User Email | Project ID | Stage ID |
|---|
Queries slowed down due to limits in BigQuery's memory-based shuffle storage quota.
| Job ID | User Email | Project ID | Stage ID |
|---|
Queries with a dramatic increase in input data size relative to historical executions.
| Job ID | User Email | Project ID | Data Increase |
|---|
While usually viewed purely as a performance feature, BI Engine is a primary FinOps cost-saving tool.
bytes_billed to zero.slot_ms consumed, saving money in your reservation.Dashboards are often slow or expensive because queries silently fail to use BI Engine (e.g., due to unsupported SQL functions). This tool parses the specific failure reasons in the logs to tell you exactly why your dashboards are scanning disk instead of RAM.
Note: The ROI calculation assumes On-Demand pricing of $6.25 per TB for the bytes saved.
Uses global settings for Project and Region.
| User Email | Job ID | Processed (GiB) | Billed (GiB) | Mode | Failure Reasons |
|---|
Enabling schema context requires the executing service account/identity to hold:
- bigquery.tables.get
- bigquery.tables.list
- bigquery.jobs.listAll (if auditing other users)
Admin Note: Treat the shared service account as having broad metadata-read access across the project and scope permissions accordingly.
AI Doctor combines Gemini LLM semantic auditing with BigQuery Migration Service API v2 to automatically discover and rewrite expensive, resource-hungry queries across your GCP organization.
BigQuery2BigQuery_Translation) to rewrite CTEs, precompute subqueries, and convert string join functions.
INFORMATION_SCHEMA to classify anti-pattern severity (HIGH, MEDIUM, LOW).
require_partition_filter = trueINFORMATION_SCHEMA.JOBS_BY_ORGANIZATION and auto-resolves schema types from INFORMATION_SCHEMA.TABLESAI.GENERATE against schema context. Rewrites queries for column pruning, join order, and partition filters within OPTIMIZED_SQL_START...END.
optimizer.config.yaml to perform AST rewrites (CTE materialization, REGEXP to LIKE).
Gemini evaluates the query against table partition keys and cluster fields. When a structural query rewrite is possible, it encloses the code in OPTIMIZED_SQL_START ... OPTIMIZED_SQL_END.
OPTIMIZED_SQL_END marker is missing, the backend discards the partial SQL to prevent invalid syntax.Executes Google's official BigQuery-to-BigQuery compiler with an autonomous 2-pass workflow (Pass 1 diagnostic discovery $\rightarrow$ Pass 2 config synthesis & execution).
REWRITE_CTE_TO_TEMP_TABLE), converts regex to wildcards (REGEXP_CONTAINS_TO_LIKE), precomputes scalar subqueries (PRECOMPUTE_INDEPENDENT_SUBSELECTS), and prunes set joins (ADD_DISTINCT_TO_SUBQUERY_IN_SET_COMPARISON).bigquerymigration.googleapis.com is not enabled on a project (404), the translation is skipped gracefully without interrupting Gemini's advice.COUNT(*) > 1).
roles/bigquerymigration.editor
roles/bigquery.user
roles/aiplatform.user
This analysis sends table schemas (DDLs) and SQL query text. Row-level data is NEVER sent or stored.
Audits your most expensive queries (Top 5, 10, or 20) based on slot usage. The system dynamically over-fetches the highest-cost jobs from BigQuery, automatically filtering out queries containing deleted tables or system views that lack sufficient schema context, ensuring you only receive the precise number of valid, actionable recommendations you requested. Gemini then audits the final list for performance anti-patterns, hiding perfectly optimized queries.
A semantic, serverless audit of your most resource-hungry SQL queries. The system analyzes raw query telemetry, retrieves referenced table schemas (DDLs) from the metadata catalog, and leverages Gemini to highlight performance anti-patterns with tailored refactoring advice.
Audited Spend
—
—
Findings
Schema Coverage
—
DDLs supplied to model
| Job ID | User Email | Total Slot Hours | Severity | Original Cost | Query SQL | Schema Coverage | AI Optimization Advice | Optimized Query |
|---|
Click Generate Report to run an analysis sweep and build a comprehensive FinOps assessment. Each report is saved here for reference.
⚠️ Schema & Query Context Will Be Sent to Google Cloud APIs
To provide deeper optimization advice, this tool sends metadata to two Google Cloud services:
1. Vertex AI Agent Platform — receives DDL (table definitions) and query text for Gemini-powered analysis.
2. BigQuery Migration Service API — receives SQL queries and auto-resolved schema DDL for automated query rewriting and translation.
Metadata that may be transmitted includes:
OPTIONS)Reassurance: Row-level data is NEVER read, processed, or transmitted. Only structural metadata and query text are analyzed. Both services are Google Cloud first-party APIs within your project's security perimeter.
By proceeding, you confirm you are authorized to send this metadata to the above Google Cloud services. Do not run this on datasets governed by data-residency, sovereignty, or contractual restrictions without prior security review.