BigQuery Omni in Google Cloud: Analyzing Data Where It Already Lives

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.

Simple Analogy

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.

2
other clouds reachable: AWS and Azure
0
copies needed to query data in place
1
SQL interface across clouds

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.

Reason 1

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.

Reason 2

Application placement

Applications run where their other dependencies run, so their logs, events and files land in that cloud’s storage by default.

Reason 3

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.

Reason 4

Rules and residency

Some data must stay in a certain country or provider because of regulations, contracts or customer promises.

Reason 5

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.

i
Practical Note

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.

Term 1

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.

Term 2

Control plane

The Google Cloud side that receives your jobs from the console, command line, API or client libraries and routes them onward.

Term 3

Data plane

The AWS or Azure side where the query actually runs, reads your files and produces results.

Term 4

Connection

A saved, secure link that lets BigQuery use an identity in your AWS or Azure account to read your storage.

Term 5

BigLake table

A table definition in BigQuery that points at files in external storage and adds governance features on top.

Term 6

Metadata cache

A stored list of file and partition information that helps BigQuery plan queries faster on large external datasets.

Term 7

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.

Term 8

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.

Simple Analogy

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
        
FIG 1 — Jobs flow to the data plane, files are read in place, and results return to the control plane

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.

!
Common Misconception

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.

CloudExample regions documentedWhat to remember
Amazon Web ServicesNorthern Virginia, Oregon, Seoul, Sydney, Ireland, FrankfurtYour bucket must be in one of the supported regions
Microsoft AzureEast US 2, with a small number of additional US locations listed on pricing pagesRegion 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.

i
Practical Note

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.

“Check the region list before you promise a design.”

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

1

Decide the scope

Choose exactly which buckets or containers Omni may read. Start narrow, and widen only when a clear need appears.

2

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.

3

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.

4

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.

5

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.

!
Common Mistake

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.

Setting

Maximum staleness

How old the cached file list may be before BigQuery goes back to storage. Shorter means fresher results but less speed benefit.

Setting

Automatic refresh

A background job that refreshes the cache on a regular cycle, roughly every half hour to an hour.

Setting

Manual refresh

A command you can run after a known data load so queries see new files immediately.

Setting

Refresh capacity

Refresh jobs use compute, and the documentation recommends giving them background reservations so they do not compete with user queries.

Simple Analogy

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.

i
Practical Note

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
        
FIG 2 — A query is sent to the data plane, files are read in place, and results are shown or exported

The journey in plain steps

1

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.

2

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.

3

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.

4

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.

5

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.

i
Practical Note

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.

!
Common Mistake

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.

ToolWhat it doesSize and cost notesBest for
Cross-cloud joinJoins data from an Omni region with tables in a normal BigQuery region, or with another Omni regionLimited to about 60 GB per transfer; data transfer fees applyOccasional analysis combining small to medium slices
Transfer with a SELECT statementCreates a new table, or inserts into an existing one, from a query over external dataLimited to about 60 GB per transfer; compute and transfer chargedCopying a filtered slice of data
Transfer with LOADLoads raw files from S3 or Blob Storage into a BigQuery table without filteringNo size limit; transfer bytes charged, no query compute usedBulk migration of whole datasets
Materialized view replicaKeeps a continuously refreshed local copy of selected external data in BigQueryAdds compute, transfer and storage costs; refresh interval between one minute and one hourFrequent 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.

Simple Analogy

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"]
        
FIG 3 — A practical decision tree for multi-cloud analytics in BigQuery

Questions that guide the decision

Question 1

Must the data stay put?

Legal, contractual or political reasons may forbid copying. Then query in place is the only path.

Question 2

How often is it read?

Rarely read data is cheapest to query in place. Constantly read data may justify a local copy.

Question 3

How big is the useful slice?

If analysts need only last month’s rows, move only those rows rather than everything.

Question 4

How fresh must it be?

Near-real-time needs favour in-place queries or frequent replicas. Daily needs are satisfied by scheduled transfers.

Question 5

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.

i
Practical Note

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.

1

Fix the layout upstream

Partition by date, use columnar formats, and compact small files in the pipeline that writes to storage.

2

Define the table with a cache

Enable metadata caching for big tables, with staleness that suits your needs.

3

Teach analysts good habits

Share simple query rules: pick columns, filter on partitions, summarise before returning.

4

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.

AreaWhat the documentation saysWhat it means for you
Pricing editionsOmni regions support the Enterprise edition and on-demand pricing; Standard and Enterprise Plus editions are not supported therePlan capacity around Enterprise or on-demand
StatementsMachine learning statements, data modification statements and table creation that needs BigQuery-managed storage are not availableOmni is for reading and analysing, not for changing data in place
Custom functionsJavaScript user-defined functions are not supportedUse built-in SQL functions or process after transfer
Materialized viewsNot supported for Blob StorageAzure designs cannot rely on this feature
Storage APIThe BigQuery Storage API is not available in Omni regionsTools that depend on it need another route
Metadata viewsSome information schema views are unavailableDo not depend on them for monitoring dashboards
SchedulingScheduled queries work only through the API or command line and must use exportSchedule exports, not interactive result tables
SortingQueries that sort fail if results exceed about 256 megabytesSort after a transfer, or limit results
Encryption keysCustomer-managed keys are not supported with datasets and external tables hereCheck whether your compliance rules allow this
Result sizeResults above about 20 GiB should be exportedExport 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.

!
Common Mistake

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?

ANTI-PATTERN-01 Avoid
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

Metric

Bytes scanned

The main driver of cost on on-demand pricing and a strong clue to inefficient queries.

Metric

Run time

Compare against a baseline for the same query. Sudden slowdowns often point to new small files or a stale cache.

Metric

Slot usage

For reservations, watch whether queries are waiting for capacity during busy hours.

Metric

Cross-cloud transfer volume

Track bytes moved by joins, transfers and replicas, because they create transfer charges.

Typical troubleshooting scenarios

SymptomLikely causeFirst thing to check
Query cannot read filesTrust between the connection and your cloud role is incomplete or permissions are too narrowRole policy, trust settings and bucket scope
New files are not visible in resultsMetadata cache is staleCache staleness setting and last refresh time
Query is slow on a large tableNo partition filtering, tiny files or no metadata cacheFile layout and whether the query filters partitions
Query fails with a result size errorSorting or result exceeds documented limitsRemove sorting, summarise, or export results to storage
Transfer failsResult over the size limit, regions not colocated, or connection and dataset in different projectsRegion pairing, project settings and result size
A feature is rejectedStatement or function not supported in Omni regionsDocumentation limits list; consider a transfer first
Unexpected billLarge scans or frequent cross-cloud transfersBytes scanned and transfer volumes
i
Practical Note

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.

Scan
on-demand queries billed by bytes read
Slots
capacity billed by reserved compute
Egress
billed when data crosses clouds

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.
“Query where the data lives; move only what you must.”

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"]
        
FIG 4 — A balanced pattern: summarise remotely, replicate only the hot slice, join locally

Anti-patterns to avoid

ANTI-PATTERN-02 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.

ANTI-PATTERN-03 Avoid
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.

ANTI-PATTERN-04 Avoid
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.

NeedGood fitWhy
Analyse data in S3 or Blob Storage with BigQuery SQL, without copyingBigQuery OmniRuns queries next to the data and returns only results
Move whole datasets into Google Cloud on a scheduleStorage Transfer Service or BigQuery Data Transfer ServiceBuilt for bulk, scheduled movement, though filtering support differs
One-time bulk load into BigQuery from other cloudsCross-cloud LOADNo size limit and no query compute needed
Heavy machine learning or data modification on the dataA normal BigQuery region after transferThose features are not available in Omni regions
All data and tools already live in Google CloudStandard BigQueryOmni adds nothing if the data is already local
Strong preference for a warehouse in the other cloudThat cloud’s native analytics servicesKeeps 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.

1

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.

2

Check the basics

Confirm the data sits in a supported region, the file formats are suitable and the features you need are available.

3

Build one narrow connection and one table

Grant read access to a single bucket or prefix, create the table, and test a few queries.

4

Measure cost and speed

Record bytes scanned, run time and any transfer volumes for the realistic version of the question.

5

Improve the storage layout

Work with the data owners on partitioning, formats and file sizes, then re-measure.

6

Decide on in-place, transfer or replica

Use the decision tree and your measurements to choose how each dataset will be used long term.

7

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

Role

Data owners in the other cloud

They control storage layout and permissions and must agree to the connection.

Role

Cloud security team

They review roles, trust relationships and data residency.

Role

Analytics or data platform team

They create tables, manage capacity and teach good query habits.

Role

Finance or cloud cost owner

They watch query and transfer costs, and approve budgets.

i
Practical Note

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.

i
Common Thread

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

Mistake 1

Assuming full feature parity

Discovering late that some statements, functions or editions are not supported in Omni regions.

Mistake 2

Over-broad connection roles

Giving the connection access to whole accounts when only a few buckets are needed.

Mistake 3

Ignoring file layout

Leaving millions of tiny, unpartitioned files and then blaming the query engine.

Mistake 4

Repeating cross-cloud joins

Paying transfer fees again and again for the same data instead of replicating it once.

Mistake 5

Stale cache surprises

Forgetting that new files may not appear until the metadata cache refreshes.

Mistake 6

Pulling huge results home

Trying to display or transfer very large results instead of exporting them.

Mistake 7

Mismatched regions

Planning a transfer between regions that are not colocated, so it fails.

Mistake 8

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.

Q1What is BigQuery Omni in one sentence?

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.

Q2Does Omni copy my data to Google Cloud?

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.

Q3What is the difference between the control plane and the data plane?

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.

Q4Which clouds and regions are supported?

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.

Q5How does Omni get permission to read my files?

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.

Q6What is a BigLake table?

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.

Q7Why would I enable the metadata cache?

To speed up queries on large or heavily partitioned tables, because BigQuery can plan from cached file information instead of listing storage every time.

Q8How do I join external data with local BigQuery tables?

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.

Q9How do I move a whole dataset into BigQuery?

Use the LOAD approach for raw files. It has no size limit and does not use query compute, though transfer charges apply.

Q10Can I run machine learning or data changes in an Omni region?

Those statements are not available in Omni regions according to the documentation. Transfer the needed data to a normal BigQuery region first.

Q11How much does it cost?

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.

Q12When should I not use Omni?

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.