BigQuery Omni in Google Cloud: Analyzing Data Where It Already Lives
A complete, plain-English guide to BigQuery Omni: how it runs queries on data stored in AWS and Azure without copying it first, how the control plane and data plane work, and how to join, move and govern multi-cloud data wisely.
Imagine a global library whose books are kept in three different cities. For years, the only way to read across all of them was to order every book to one central building, which took weeks, cost a fortune in shipping and left you reading outdated copies. Now imagine a different arrangement: a researcher sits at one desk, asks a question, and local librarians in each city search their own shelves and send back only the answer. The books never travel. Only the findings do.
BigQuery Omni is that second arrangement for data. Many companies keep important data in Amazon S3 or Azure Blob Storage, while their analysts prefer BigQuery. Omni lets BigQuery run queries right next to the data, in the other cloud, and bring back only the results. This tutorial explains how it works, from the first idea to the cost details, in simple language with no prior knowledge needed.
1What BigQuery Omni Actually Is
A multi-cloud analytics service that runs BigQuery queries on data stored in Amazon S3 or Azure Blob Storage.
BigQuery is Google Cloud’s data warehouse. A data warehouse is a system designed to answer analytical questions over very large amounts of data, such as “how many orders did each region place last quarter?” Analysts write questions in SQL, a common query language, and BigQuery spreads the work across many machines to answer quickly.
Traditionally, BigQuery works on data stored in Google Cloud. But real companies are rarely that tidy. Logs may sit in Amazon S3 because the application runs on AWS. Files from a partner may arrive in Azure Blob Storage. Moving everything to Google Cloud can be slow, costly and sometimes not allowed.
BigQuery Omni solves this by running the BigQuery query engine in the other cloud, close to the data. Google’s documentation sums up the idea simply: processing happens where the data already sits. You use the same BigQuery console, the same SQL and the same tools, while the heavy reading of files happens inside AWS or Azure.
Think of a travelling chef who brings her own knives and recipes to your kitchen instead of asking you to ship all your ingredients to her restaurant. The ingredients stay in your fridge, and you receive the finished dish.
What it is not
Omni is not a tool for moving all your data permanently, although it offers some cross-cloud transfer features for that purpose. It is also not a full copy of every BigQuery feature, since several capabilities are not available in the Omni regions. We cover those limits in a dedicated chapter, because knowing them early prevents surprises.
2The Multi-Cloud Data Problem
Data gravity, cost, rules and speed all push companies toward leaving data where it is.
Before learning the tool, it helps to feel the problem it solves. Companies end up with data in several clouds for ordinary reasons, and each reason makes simple copying harder than it sounds.
Mergers and acquisitions
A company buys another that runs on a different cloud. Both sets of data now matter, and neither team wants a long migration first.
Application placement
Applications run where their other dependencies run, so their logs, events and files land in that cloud’s storage by default.
Data gravity
Big data attracts services toward it. Moving petabytes is slow, risky and expensive, so the data tends to stay where it was first stored.
Rules and residency
Some data must stay in a certain country or provider because of regulations, contracts or customer promises.
Best tool for the job
Teams may prefer BigQuery for analytics while keeping storage elsewhere for good reasons of cost, tooling or existing contracts.
Why copying everything is painful
The classic fix is to build pipelines that copy data into one warehouse. That sounds easy until you count the costs. Pipelines need to be built, scheduled, monitored and repaired. Copies go stale between runs. Storing two copies doubles the storage bill. Moving data between clouds incurs transfer fees. And every extra copy is another place where sensitive data can leak or drift from the original.
Omni does not abolish pipelines, but it lets you postpone or avoid many of them. Query in place when you can, and copy only the slice of data that truly needs to live next to your other Google Cloud data.
3Core Vocabulary You Will Use Every Day
Eight terms unlock almost every sentence in the official documentation.
Every platform speaks its own dialect. Learn these terms once, and the rest of this guide reads like plain English.
Omni region
A BigQuery location that is physically inside AWS or Azure, such as an AWS region, where the query engine runs next to your data.
Control plane
The Google Cloud side that receives your jobs from the console, command line, API or client libraries and routes them onward.
Data plane
The AWS or Azure side where the query actually runs, reads your files and produces results.
Connection
A saved, secure link that lets BigQuery use an identity in your AWS or Azure account to read your storage.
BigLake table
A table definition in BigQuery that points at files in external storage and adds governance features on top.
Metadata cache
A stored list of file and partition information that helps BigQuery plan queries faster on large external datasets.
Cross-cloud operation
A feature that combines or moves data between an Omni region and a normal BigQuery region, such as a join or a transfer.
Slot
A unit of BigQuery compute power. Queries consume slots, and you can pay for slots by reservation or pay by the amount of data scanned.
Two more words appear later. Colocated region means the normal BigQuery region that is paired with a given Omni region, and cross-cloud features work only between colocated pairs. Egress means data leaving a cloud, which is where transfer charges come from.
The control plane is the head office that takes your order. The data plane is the branch office in the other city that actually opens the filing cabinets. The connection is the signed permission slip that lets the branch let the head office’s staff read the cabinets. The slots are the number of clerks working.
4Architecture: Control Plane and Data Plane
You ask in Google Cloud, the work happens in AWS or Azure, and only results come back.
The simplest way to understand Omni is to split it into two halves. The control plane lives in Google Cloud and is the part you talk to. The data plane lives in the other cloud and does the work. A secure VPN link joins them.
flowchart LR
U["Analyst or application"] --> CP["Control plane in Google Cloud"]
CP -->|job sent over VPN| DP["Data plane in AWS or Azure"]
DP -->|reads files| ST["S3 or Blob Storage"]
DP -->|results over VPN| CP
CP --> U
DP -.->|optional export| ST
The control plane
The control plane receives your job from the Google Cloud console, the bq command-line tool, the API or a client library. It checks that the job is valid and sends it to the right data plane. For you, it looks and feels like ordinary BigQuery.
The data plane
The data plane runs inside the chosen AWS or Azure region. It connects back to the control plane over a VPN, reads table data from your bucket or container, runs the query in that region and returns the results over the VPN. Because the reading of large files happens next to the storage, bulk data does not need to cross the internet between clouds.
Access using your own identities
Omni uses the identity systems that already exist in each cloud: AWS IAM roles, or Azure Active Directory principals. You grant the access and you can revoke it whenever you like. Read access is enough to query. Write access is needed only if you want Omni to write results back into your storage.
Where the query runs
Inside the Omni region, on compute that BigQuery manages for you. You do not create or patch any servers in your AWS or Azure account for analytics.
Where the data stays
In your S3 bucket or Blob Storage container, in your own account, under your own access rules.
Where the results go
Back to Google Cloud for display, or straight into your S3 or Blob Storage with an export, so that results never travel across clouds at all.
Omni does not copy your whole dataset into Google Cloud behind the scenes. It reads the files where they are. Only results, which are usually far smaller than the source data, come back unless you choose to transfer data deliberately.
5Supported Clouds and Regions
A limited, growing list of AWS and Azure regions, each paired with a normal BigQuery region.
Omni is available in selected regions rather than everywhere. Your data must sit in a supported region, because the query engine runs there. Google’s documentation lists the AWS regions of Northern Virginia, Oregon, Seoul, Sydney, Ireland and Frankfurt, and an Azure region in the eastern United States. Azure support is narrower than AWS support, and the pricing page also mentions an additional Azure location, so always check the current list before you design anything.
| Cloud | Example regions documented | What to remember |
|---|---|---|
| Amazon Web Services | Northern Virginia, Oregon, Seoul, Sydney, Ireland, Frankfurt | Your bucket must be in one of the supported regions |
| Microsoft Azure | East US 2, with a small number of additional US locations listed on pricing pages | Region list is shorter than AWS, so verify current support |
Colocated BigQuery regions
Each Omni region is paired with a normal BigQuery region nearby. For example, the Omni region for AWS Northern Virginia and the one for the Azure East US 2 region are both paired with a United States BigQuery region. This pairing matters for cross-cloud features, which work only between colocated regions. A transfer from a United States Omni region lands in a United States BigQuery location, and a transfer from a European Omni region lands in a European one. This also helps with data residency, because data crossing clouds stays on the same continent.
If your data sits in a cloud region that Omni does not support, you cannot query it in place. Plan for a transfer to a supported region first, or use a different approach altogether.
6Connections and Access: The Permission Slip
A connection tells BigQuery which identity in your other cloud it may use to read your storage.
The first practical step with Omni is creating a connection. A connection is a secure object in BigQuery that points to an identity in your AWS or Azure account. When BigQuery needs to read your files, it uses this identity, and your cloud’s own permission system decides what it can touch.
How access is built, in plain steps
Decide the scope
Choose exactly which buckets or containers Omni may read. Start narrow, and widen only when a clear need appears.
Create the identity in your cloud
In AWS this is an IAM role with a policy that allows reading the chosen storage. In Azure it is an Azure Active Directory principal with similar rights.
Create the connection in BigQuery
BigQuery records the connection and gives you details to complete a trust relationship, so your cloud agrees to accept calls from it.
Complete the trust
Update the role or application in your cloud so it trusts the BigQuery connection identity. Until this step is done, queries cannot read the files.
Grant users access to the connection
Inside Google Cloud, decide which people and groups may use the connection to create tables that read your storage.
Read access versus write access
Querying only needs the ability to read. If you want to export results into your S3 bucket or Blob container, you must also allow writing, ideally to a separate, tightly scoped location. Keeping reading and writing in separate roles limits the damage if something goes wrong.
Two sides of control
Notice that there are two layers of permission. Your AWS or Azure account controls what the connection may read. Google Cloud controls which users may use the connection and which tables they may query. Both must say yes. This gives you two places to enforce least privilege, and two places to remove access quickly.
Giving the connection role access to an entire storage account “to make setup easy”. If that role is misused, every bucket is exposed. Grant access to specific buckets or prefixes that you intend to analyze.
7Tables Over External Data: BigLake and Metadata Caching
A table definition turns a pile of files in S3 or Blob Storage into something you can query with SQL.
Files in a bucket are just files. To ask questions with SQL, BigQuery needs a table definition that says which files belong to the table, what format they are in and what columns they contain. In Omni, the main kind of table for this job is a BigLake table. Queries can also use external table definitions created with a statement for external tables.
What a BigLake table gives you
- A SQL view of files. Analysts query familiar table names instead of file paths.
- Governance features. Because access flows through the table and connection, you can manage who sees what in one place, rather than giving every analyst direct access to storage.
- Common formats. Typical analytical file formats and partitioned folder layouts can be described, so large datasets organised by date or region work naturally.
Metadata caching: the secret to speed on big datasets
When a table sits on millions of files, just listing the files can take longer than reading them. Omni can store a cache of file and partition information so BigQuery plans queries quickly without listing storage every time. According to the documentation, you decide how stale the cache is allowed to be, within a range from thirty minutes to seven days. The cache can refresh automatically at intervals, or you can refresh it manually when you know new files have arrived. If it is not refreshed for seven days, it expires.
Maximum staleness
How old the cached file list may be before BigQuery goes back to storage. Shorter means fresher results but less speed benefit.
Automatic refresh
A background job that refreshes the cache on a regular cycle, roughly every half hour to an hour.
Manual refresh
A command you can run after a known data load so queries see new files immediately.
Refresh capacity
Refresh jobs use compute, and the documentation recommends giving them background reservations so they do not compete with user queries.
A library catalogue saves you from walking the shelves to find a book. Metadata caching is the catalogue for your files. It must be updated when new books arrive, or you might not find them.
Choose the staleness setting to match how fresh the business really needs data to be. A daily reporting table rarely needs a thirty-minute cache, while a near-real-time dashboard might.
8Data Flow: What Happens to One Query
Follow a single question from the analyst’s keyboard to the files in S3 or Blob Storage and back.
Understanding one query end to end clears up most of the mystery. Everything else in Omni is a variation on this journey.
sequenceDiagram
participant A as Analyst
participant CP as Control plane
participant DP as Data plane
participant S as S3 or Blob Storage
A->>CP: Submit SQL query
CP->>CP: Check permissions and parse job
CP->>DP: Send job over VPN
DP->>S: Read only needed files
S-->>DP: File data
DP->>DP: Run query in the Omni region
alt Show results
DP-->>CP: Return results over VPN
CP-->>A: Display results
else Export results
DP->>S: Write results to storage
DP-->>CP: Report job complete
end
The journey in plain steps
You write a normal SQL query
You select data from a table whose files live in S3 or Blob Storage, using the same console or tools you already use.
The control plane accepts the job
It validates the query and your permissions, then sends the job to the data plane in the region where the data lives.
The data plane plans the work
Using table metadata, and the metadata cache if enabled, it works out which files and partitions are needed, skipping the rest.
Files are read and processed next to storage
The heavy work of scanning, filtering and aggregating happens inside the cloud region where the files sit.
Results leave the data plane
Results either travel back to Google Cloud to be shown to you, or are exported directly into your storage.
Showing results versus exporting results
When results come back to you, they are kept for a limited time in the control plane so you can view them again. The documentation notes about twenty-four hours. Very large results, over about twenty gibibytes, should not be pulled back to the screen. Instead, use an export statement to write the results straight into your S3 bucket or Blob container. This way, the results never cross clouds at all, which saves both time and transfer cost.
Think of results as the small thing that travels. Aggregate and filter inside the query so that only a compact answer returns, and export anything large.
Running a query that selects every column and every row, then trying to display it. Besides being slow, the result may exceed limits. Select only the columns you need and summarise early.
9Cross-Cloud Operations: Joining, Transferring and Replicating
Sometimes data in one cloud must meet data in another, and Omni offers several ways to do it.
Querying in place is only part of the story. Real questions often combine data from two places, such as customer records in Google Cloud and clickstream events in S3. Omni provides cross-cloud operations for these cases. The documentation describes four main tools.
| Tool | What it does | Size and cost notes | Best for |
|---|---|---|---|
| Cross-cloud join | Joins data from an Omni region with tables in a normal BigQuery region, or with another Omni region | Limited to about 60 GB per transfer; data transfer fees apply | Occasional analysis combining small to medium slices |
| Transfer with a SELECT statement | Creates a new table, or inserts into an existing one, from a query over external data | Limited to about 60 GB per transfer; compute and transfer charged | Copying a filtered slice of data |
| Transfer with LOAD | Loads raw files from S3 or Blob Storage into a BigQuery table without filtering | No size limit; transfer bytes charged, no query compute used | Bulk migration of whole datasets |
| Materialized view replica | Keeps a continuously refreshed local copy of selected external data in BigQuery | Adds compute, transfer and storage costs; refresh interval between one minute and one hour | Frequent joins against the same external data |
Cross-cloud joins
In a join, BigQuery brings the needed slice of external data to the other side, combines it and returns the result. It is a convenient way to enrich local data without building a pipeline, but it is meant for modest volumes because of the size limit and because each run may incur transfer fees.
Transfers with SELECT
When you only need part of the external data, a transfer with a query copies exactly that part. You can filter rows and choose columns, so you pay only for the slice you move. Appending is possible for incremental loads. The same size limit of roughly sixty gigabytes of results applies.
Transfers with LOAD
When you want everything, LOAD is the right tool. It moves raw files without filtering and without a size limit, and it does not use query compute, only transfer charges for the bytes moved. This is the tool for deliberate, one-time or scheduled migrations.
Materialized view replicas
A materialized view replica keeps a local copy of selected external data and refreshes it on a schedule you choose, between one minute and one hour. Queries and joins on the local copy are fast and do not repeatedly pull data across clouds. The price is ongoing refresh compute, transfer and storage for the copy.
A join is borrowing a few pages from a library in another city each time you need them. A transfer is buying a copy of the book. A replica is subscribing to a delivery service that keeps your local shelf updated.
Rules that apply to all cross-cloud features
- The connection and the destination dataset must belong to the same Google Cloud project.
- Transfers work only between colocated regions, such as a United States Omni region and a United States BigQuery location.
- Very small files, below about five megabytes, are inefficient to move, so combine them first.
- Some data types and destinations, such as certain geospatial formats and clustered destination tables for inserts, are not supported.
10Choosing: Query in Place, Transfer or Replicate
The right choice depends on how often you read the data, how much you need and how fresh it must be.
With several tools available, a clear way to choose saves time and money. The decision tree below captures how most experienced teams think.
flowchart TD
Q["Need to analyze data in S3 or Blob Storage"] --> A{"Must it stay in its cloud?"}
A -->|Yes| B["Query in place with Omni"]
A -->|No| C{"Need the whole dataset in Google Cloud?"}
C -->|Yes| D["Use LOAD for bulk transfer"]
C -->|No| E{"Need only a filtered slice?"}
E -->|Yes| F["Use CREATE TABLE AS SELECT or INSERT INTO SELECT"]
E -->|No| G{"Joined often with local data?"}
G -->|Yes| H["Use a materialized view replica"]
G -->|No| I["Use occasional cross-cloud joins"]
Questions that guide the decision
Must the data stay put?
Legal, contractual or political reasons may forbid copying. Then query in place is the only path.
How often is it read?
Rarely read data is cheapest to query in place. Constantly read data may justify a local copy.
How big is the useful slice?
If analysts need only last month’s rows, move only those rows rather than everything.
How fresh must it be?
Near-real-time needs favour in-place queries or frequent replicas. Daily needs are satisfied by scheduled transfers.
Which features are needed?
If you need features that Omni regions do not support, such as machine learning statements, copy the data into a normal region.
A hybrid is common. Keep raw, rarely queried history in place, and replicate or transfer the small, hot slice that dashboards and models use every day.
11Performance: Making Omni Queries Fast and Cheap
The same habits that speed up and cheapen any warehouse query matter even more when files live in object storage.
Because Omni reads files, not warehouse-managed storage, the way you lay out those files has a big effect on speed and cost. A few simple habits go a long way.
Organise files with partitions
Partitioning means arranging files into folders by something you often filter on, usually a date. When a query asks for one week, BigQuery can skip every other folder entirely. Without partitions, it must open far more files than needed. Hive-style folder layouts are a common way to do this, and the metadata cache helps plan queries over them faster.
Choose efficient file formats
Columnar analytical formats let a query read only the columns it needs, instead of whole rows. A query touching three columns out of fifty reads a small fraction of the data. Plain text formats force a full read of every row, which is slower and, on on-demand pricing, more expensive.
Avoid thousands of tiny files
Many small files create overhead, because each file must be located and opened. The documentation specifically warns that files under roughly five megabytes transfer inefficiently. Aim for fewer, larger files by combining small ones in a regular compaction step upstream.
Select only what you need
- Name the columns you need instead of selecting everything.
- Filter early on partition columns so unneeded folders are skipped.
- Aggregate inside the query so that only compact results come back.
- Remember that on on-demand pricing, a row limit does not reduce the amount scanned, because billing depends on the columns read.
Use the metadata cache wisely
For large or heavily partitioned tables, enabling the metadata cache reduces planning time. Match the staleness setting to your freshness needs, and give refresh jobs their own background capacity so that user queries are not slowed.
Fix the layout upstream
Partition by date, use columnar formats, and compact small files in the pipeline that writes to storage.
Define the table with a cache
Enable metadata caching for big tables, with staleness that suits your needs.
Teach analysts good habits
Share simple query rules: pick columns, filter on partitions, summarise before returning.
Measure and tune
Review the bytes scanned and run time of common queries and fix the expensive ones first.
12Limitations You Should Know Before You Design
Omni regions do not offer every BigQuery feature, and some limits shape what you can build.
Omni brings BigQuery to other clouds, but it is not an identical copy of everything BigQuery can do in Google Cloud. The documentation lists restrictions, and a good design accounts for them from the start. Treat the following as a summary and check the current documentation, because capabilities evolve.
| Area | What the documentation says | What it means for you |
|---|---|---|
| Pricing editions | Omni regions support the Enterprise edition and on-demand pricing; Standard and Enterprise Plus editions are not supported there | Plan capacity around Enterprise or on-demand |
| Statements | Machine learning statements, data modification statements and table creation that needs BigQuery-managed storage are not available | Omni is for reading and analysing, not for changing data in place |
| Custom functions | JavaScript user-defined functions are not supported | Use built-in SQL functions or process after transfer |
| Materialized views | Not supported for Blob Storage | Azure designs cannot rely on this feature |
| Storage API | The BigQuery Storage API is not available in Omni regions | Tools that depend on it need another route |
| Metadata views | Some information schema views are unavailable | Do not depend on them for monitoring dashboards |
| Scheduling | Scheduled queries work only through the API or command line and must use export | Schedule exports, not interactive result tables |
| Sorting | Queries that sort fail if results exceed about 256 megabytes | Sort after a transfer, or limit results |
| Encryption keys | Customer-managed keys are not supported with datasets and external tables here | Check whether your compliance rules allow this |
| Result size | Results above about 20 GiB should be exported | Export large outputs to storage |
How to design around the limits
Most limits point to a clear pattern. Use Omni to explore, filter and summarise external data. When you need features Omni does not offer, such as machine learning or data modification, transfer the needed slice into a normal BigQuery region and work there. Treat Omni as the bridge to the data, and the normal region as the workshop.
Designing an entire solution around a feature, then discovering it is unavailable in the Omni region. Before approving a design, run a small proof of concept that exercises every feature you intend to rely on.
13Security and Governance
Multi-cloud analytics adds a second set of doors, so both clouds must agree on who may enter.
Security in a multi-cloud setup involves identities and policies in two places. Fortunately, Omni uses each cloud’s native tools, so you do not have to invent a new security model.
Least privilege on both sides
- In AWS or Azure, give the connection identity read access only to the specific buckets or containers that need analysis.
- Use separate identities for reading and for writing exports, and restrict writing to dedicated locations.
- In Google Cloud, allow only named groups to use each connection and to query each table.
- Review these grants on a regular schedule and remove those no longer needed.
Governance on tables
Because analysts query tables rather than raw files, you can manage access at the table level in BigQuery instead of handing out storage permissions to every person. This keeps your storage locked down while still giving analysts what they need. BigLake tables are designed to support this style of fine-grained governance on external data.
Data in motion
Jobs and results travel between the control plane and the data plane over a VPN. Bulk file reads happen within the cloud region. When you use cross-cloud transfers, data crosses clouds, so you should confirm that doing so is allowed under your data rules and that the destination region respects residency requirements. Because cross-cloud features work only between colocated regions, data stays on the same continent.
Encryption considerations
Your storage encrypts data under your own cloud account’s settings. Note that customer-managed encryption keys are not supported with datasets and external tables in Omni at the time of the documentation, so teams with strict key control requirements must verify this early.
Auditing
Keep audit logs from both clouds. Google Cloud records who ran which query, and AWS or Azure record who accessed which objects. Together they let you answer the auditor’s favourite question: who looked at what, and when?
Problem
One broad role is created for the connection with read and write access to every bucket, and all analysts are allowed to use it.
Why It’s Harmful
Anyone using the connection can reach far more data than their job needs, and a mistake or compromise could expose or alter data across the whole account.
Correct Approach
Create narrowly scoped connections per data domain, give each only the access required, and limit who may use each one.
14Monitoring and Troubleshooting
Know what slow, failed and expensive queries look like, and where to look first.
Because Omni uses ordinary BigQuery job tracking, you can inspect jobs, run times and bytes processed in the console and through logs. The same discipline you apply to any warehouse applies here, with a few extra things to watch because two clouds are involved.
What to watch
Bytes scanned
The main driver of cost on on-demand pricing and a strong clue to inefficient queries.
Run time
Compare against a baseline for the same query. Sudden slowdowns often point to new small files or a stale cache.
Slot usage
For reservations, watch whether queries are waiting for capacity during busy hours.
Cross-cloud transfer volume
Track bytes moved by joins, transfers and replicas, because they create transfer charges.
Typical troubleshooting scenarios
| Symptom | Likely cause | First thing to check |
|---|---|---|
| Query cannot read files | Trust between the connection and your cloud role is incomplete or permissions are too narrow | Role policy, trust settings and bucket scope |
| New files are not visible in results | Metadata cache is stale | Cache staleness setting and last refresh time |
| Query is slow on a large table | No partition filtering, tiny files or no metadata cache | File layout and whether the query filters partitions |
| Query fails with a result size error | Sorting or result exceeds documented limits | Remove sorting, summarise, or export results to storage |
| Transfer fails | Result over the size limit, regions not colocated, or connection and dataset in different projects | Region pairing, project settings and result size |
| A feature is rejected | Statement or function not supported in Omni regions | Documentation limits list; consider a transfer first |
| Unexpected bill | Large scans or frequent cross-cloud transfers | Bytes scanned and transfer volumes |
Set cost guardrails early, such as a maximum bytes billed on queries and budget alerts. A single careless query on a very large table is the most common cause of a surprise.
15Understanding the Costs
You pay for compute in the Omni region, and separately for any data that crosses clouds.
Omni costs fall into two groups: the cost of running queries, and the cost of moving data. Mixing them up is the most common budgeting error.
Query compute
Omni offers the same two broad models as BigQuery. With on-demand pricing, you pay for the amount of data each query scans, at a rate per tebibyte, which at the time of writing is a little over nine dollars. With capacity pricing, you pay for slots, and Omni regions support the Enterprise edition, with pay-as-you-go and commitment options. Current rates, including regional differences, are on Google’s BigQuery pricing page and change from time to time.
On-demand pricing suits
- Occasional or unpredictable queries
- Teams just starting with Omni
- Small data volumes with careful queries
Capacity pricing suits
- Steady, heavy workloads
- Teams who want predictable monthly cost
- Workloads that benefit from reserved compute for refresh jobs
Data transfer
Querying in place does not move your source files, and the documentation notes there are no additional analytics charges to your AWS or Azure account for the queries themselves. But when data crosses clouds, through joins, SELECT-based transfers, LOAD transfers or replicas, transfer fees apply. These are charged per gibibyte and differ by source region, with typical figures in the range of several cents to a little over ten cents per gibibyte at the time of writing. Replicas also add storage cost for the local copy and refresh compute.
Keeping the bill sensible
- Partition files and use columnar formats so queries scan less.
- Export large results to storage instead of pulling them across clouds.
- Use LOAD for bulk moves, since it avoids query compute.
- Prefer one planned transfer over repeated joins that move the same data each time.
- Set maximum bytes billed and budget alerts.
- Review replicas regularly, since they cost money every hour they run.
16Design Patterns and Anti-patterns
Patterns are habits that repeatedly work; anti-patterns are habits that repeatedly hurt.
Teams that use Omni for a while converge on the same handful of habits. Here are the useful ones, followed by the traps that catch newcomers.
Patterns that work
Query in place first, copy later
Start by querying external data where it is. Copy data only when usage patterns prove that a local copy pays off.
Summarise remotely, join locally
Do the heavy filtering and aggregation inside the Omni region so only a small result crosses clouds, then join that result with local data.
Hot slice replication
Replicate only the small, frequently used portion of external data, such as recent days, and leave the long history in place.
Export results to where they are used
If a downstream system lives in AWS or Azure, export results straight into that cloud’s storage instead of pulling them back and pushing them out again.
One connection per data domain
Create narrowly scoped connections for each business area, with matching access groups, so permissions stay easy to reason about.
Storage layout as a contract
Agree with the teams who write the files on partitioning, formats and minimum file sizes, because their choices decide your performance and cost.
flowchart LR
R["Raw history in S3 or Blob"] -->|query in place| O["Omni summaries"]
O -->|small result| J["Join with local BigQuery data"]
R -->|filtered slice| H["Hot slice replica"]
H --> J
J --> D["Dashboards and models"]
Anti-patterns to avoid
Problem
Analysts repeatedly run cross-cloud joins that pull the same large slice of external data across clouds every day.
Why It’s Harmful
Each run pays transfer fees and compute again for identical data, and large joins can hit size limits and fail.
Correct Approach
Replicate the frequently joined slice once with a materialized view replica, or load it into a local table on a schedule.
Problem
Raw files are dumped into storage as millions of tiny, unpartitioned files and Omni is expected to cope.
Why It’s Harmful
Queries become slow and expensive because each file must be located and opened, and nothing can be skipped.
Correct Approach
Partition by date, use columnar formats, compact small files regularly and enable the metadata cache.
Problem
A design assumes every BigQuery feature works in Omni regions, including machine learning statements and data modification.
Why It’s Harmful
The team discovers the limits late, after commitments are made, and has to redesign under pressure.
Correct Approach
Read the limitations list first, prove each needed feature in a small test, and plan transfers for work that needs unsupported features.
17When to Use Omni and When to Choose Something Else
Omni is superb for one job; other jobs deserve other tools.
Omni fits a specific situation: you want BigQuery analytics over data that sits in AWS or Azure. For other situations, other options may be better. The table below places Omni among its neighbours at a high level.
| Need | Good fit | Why |
|---|---|---|
| Analyse data in S3 or Blob Storage with BigQuery SQL, without copying | BigQuery Omni | Runs queries next to the data and returns only results |
| Move whole datasets into Google Cloud on a schedule | Storage Transfer Service or BigQuery Data Transfer Service | Built for bulk, scheduled movement, though filtering support differs |
| One-time bulk load into BigQuery from other clouds | Cross-cloud LOAD | No size limit and no query compute needed |
| Heavy machine learning or data modification on the data | A normal BigQuery region after transfer | Those features are not available in Omni regions |
| All data and tools already live in Google Cloud | Standard BigQuery | Omni adds nothing if the data is already local |
| Strong preference for a warehouse in the other cloud | That cloud’s native analytics services | Keeps tooling inside one cloud if you do not need BigQuery |
Situations where Omni shines
- After an acquisition. Analysts need combined insight before any migration project can finish.
- Large logs in another cloud. The files are too big to copy casually, but answers are small.
- Residency rules. Data must remain where it is, yet teams want a single analytics interface.
- Exploration and proof of value. You want to learn what the data can tell you before investing in pipelines.
Situations where caution is wise
- Data in unsupported regions. Omni runs only in listed regions.
- Very frequent, very heavy queries on the same data. A local copy may be cheaper and faster.
- Strict key-management rules. Customer-managed keys are not supported with datasets and external tables in Omni at the time of the documentation.
- Feature-heavy workloads. Anything depending on unsupported statements or functions needs a local copy.
Advantages
- Query AWS and Azure data with familiar BigQuery SQL
- No need to copy data before you start
- Uses your own cloud identities and keeps data in your accounts
- Results can be exported straight back into your storage
- Cross-cloud joins, transfers and replicas for the cases that need them
- Metadata caching for speed on large datasets
Disadvantages / Trade-offs
- Limited list of supported regions
- Several BigQuery features are unavailable in Omni regions
- Cross-cloud features carry size limits and transfer fees
- Performance depends heavily on file layout you may not control
- Only certain pricing editions are supported
18An Adoption Roadmap for Your Team
Start small, prove value, then widen access with guardrails in place.
Adopting Omni is more successful when treated as a small program than as a switch to flip. The roadmap below has helped many teams avoid early disappointment.
Pick one valuable question
Choose a real business question that needs data in another cloud, such as joining web logs in S3 with customer data in Google Cloud.
Check the basics
Confirm the data sits in a supported region, the file formats are suitable and the features you need are available.
Build one narrow connection and one table
Grant read access to a single bucket or prefix, create the table, and test a few queries.
Measure cost and speed
Record bytes scanned, run time and any transfer volumes for the realistic version of the question.
Improve the storage layout
Work with the data owners on partitioning, formats and file sizes, then re-measure.
Decide on in-place, transfer or replica
Use the decision tree and your measurements to choose how each dataset will be used long term.
Add guardrails and widen access
Set cost limits, budget alerts and access groups, document the rules, and then open up to more analysts.
Who needs to be involved
Data owners in the other cloud
They control storage layout and permissions and must agree to the connection.
Cloud security team
They review roles, trust relationships and data residency.
Analytics or data platform team
They create tables, manage capacity and teach good query habits.
Finance or cloud cost owner
They watch query and transfer costs, and approve budgets.
Involve the people who write the files early. The best Omni performance work is done upstream, where files are created, not downstream, where queries are written.
19Real-World Scenarios
Four illustrative situations showing where Omni fits.
The scenarios below are illustrative composites, not case studies of specific named companies.
Scenario 1: Two companies, two clouds
A retailer acquires an online brand whose sales and web events live in Amazon S3, while the retailer’s own warehouse sits in BigQuery. Leadership wants one combined weekly sales report within a month. The analytics team creates a narrow connection, defines tables over the S3 data, summarises weekly sales inside the Omni region, and joins the small result with local product data. The full migration project continues in parallel, no longer blocking the report.
Scenario 2: Huge logs, small answers
A media streaming company stores terabytes of playback logs in S3 because its application runs on AWS. Analysts want to study buffering problems by region. Copying all the logs would take weeks, so they query in place, filter by date partitions and aggregate by region. Only a compact table returns to Google Cloud, and for a daily dashboard they replicate the most recent two weeks as a local slice.
Scenario 3: Data that must not move
A healthcare analytics firm has a partner whose de-identified files must stay in a specific cloud region under contract. Analysts need BigQuery’s tools and shared dashboards. Omni lets them query the data where it lives, export aggregated results into the partner’s own storage for delivery, and keep the raw files untouched.
Scenario 4: Prove the value before migrating
A logistics company is considering moving its Azure-based data to Google Cloud but wants evidence first. Using Omni, a small team builds a few high-value reports on the existing Azure files, measures cost and speed, and shows leadership which datasets deserve a full transfer and which can stay in place. The result is a smaller, better-justified migration.
In every scenario, the winning moves were narrow access, summarising remotely, exporting or replicating only what was needed, and measuring before committing to a bigger move.
20Best Practices and Common Mistakes
A short checklist to keep nearby while you work with Omni.
Best practices
- Verify region and feature support first. Check the current lists before designing anything.
- Grant the least access. Narrow connections, separate read and write roles, and named access groups.
- Fix the file layout. Partition by date, use columnar formats, and compact small files.
- Enable metadata caching for big tables. Match staleness to freshness needs and give refresh jobs background capacity.
- Summarise before returning. Aggregate and filter inside the Omni region so results stay small.
- Export large results. Write them straight to storage instead of pulling them across clouds.
- Use the right cross-cloud tool. LOAD for bulk moves, SELECT transfers for slices, replicas for hot joined data.
- Set cost guardrails. Maximum bytes billed, budgets and alerts from day one.
Common mistakes
Assuming full feature parity
Discovering late that some statements, functions or editions are not supported in Omni regions.
Over-broad connection roles
Giving the connection access to whole accounts when only a few buckets are needed.
Ignoring file layout
Leaving millions of tiny, unpartitioned files and then blaming the query engine.
Repeating cross-cloud joins
Paying transfer fees again and again for the same data instead of replicating it once.
Stale cache surprises
Forgetting that new files may not appear until the metadata cache refreshes.
Pulling huge results home
Trying to display or transfer very large results instead of exporting them.
Mismatched regions
Planning a transfer between regions that are not colocated, so it fails.
Forgetting forgotten replicas
Leaving replicas running that nobody uses, so they keep costing money every hour.
21Frequently Asked Questions
Quick answers to the questions beginners ask most.
It is a multi-cloud service that lets BigQuery run queries directly on data stored in Amazon S3 or Azure Blob Storage, without copying that data into Google Cloud first.
Not for ordinary queries. The query runs next to the data and only results come back. Copying happens only if you choose a cross-cloud transfer, join or replica.
The control plane is the Google Cloud side that receives your jobs. The data plane is the AWS or Azure side that reads files and runs the query. They are linked by a secure VPN.
Amazon S3 in several AWS regions and Azure Blob Storage in a smaller set of Azure regions. The list changes, so check the current documentation.
Through a connection that uses an identity in your own cloud, such as an AWS IAM role or an Azure Active Directory principal, which you create, scope and can revoke.
A table definition in BigQuery that points at files in external storage and supports governance on top, so analysts query table names instead of file paths.
To speed up queries on large or heavily partitioned tables, because BigQuery can plan from cached file information instead of listing storage every time.
Use a cross-cloud join for modest volumes, or a materialized view replica if you join the same data often. Joins are limited to about sixty gigabytes per transfer.
Use the LOAD approach for raw files. It has no size limit and does not use query compute, though transfer charges apply.
Those statements are not available in Omni regions according to the documentation. Transfer the needed data to a normal BigQuery region first.
You pay for query compute, either per amount of data scanned or through reserved slots, plus data transfer fees whenever data crosses clouds. See the current BigQuery pricing page for rates.
When your data is already in Google Cloud, when it sits in an unsupported region, or when your workload depends on features that Omni regions do not offer.
22Summary and Key Takeaways
BigQuery Omni lets you ask BigQuery questions about data that lives in Amazon S3 or Azure Blob Storage, by running the query engine in the other cloud and returning only the results. A control plane in Google Cloud takes your job, a data plane in the other cloud does the work, and your own cloud identities decide what may be read. When data must meet across clouds, Omni offers joins, transfers and replicas, each with its own size limits and costs. It is not a full copy of BigQuery, so you must design around the documented limits.
Remember the researcher at one desk and the librarians in several cities. The books stay on their shelves, only the answers travel, and you move a book only when you have a good reason.
Key Takeaways
- Query where the data lives — Omni runs BigQuery SQL next to files in S3 or Blob Storage, so bulk data does not have to be copied first.
- Two planes — the control plane in Google Cloud accepts jobs; the data plane in AWS or Azure reads files, runs queries and returns results over a VPN.
- Access through your own identities — connections use AWS IAM roles or Azure Active Directory principals that you scope tightly and can revoke.
- File layout drives performance — partitions, columnar formats, larger files and metadata caching make Omni queries faster and cheaper.
- Pick the right cross-cloud tool — joins for small slices, SELECT transfers for filtered copies, LOAD for bulk moves, replicas for frequently joined data, always between colocated regions.
- Know the limits — several statements, functions, editions and features are unavailable in Omni regions, so verify before you design.
- Budget for compute and egress — queries cost by data scanned or slots, and cross-cloud movement adds transfer fees, so summarise remotely and export large results.