Why can't a Snowflake share reach a consumer account in another region, and what do you do?
answer
- nothing is copied, so nothing crosses
- object storage lives in exactly one region
- you now need a real second copy
- freshness stops being instant
- the provider picks up storage and transfer
basics
~20 sA direct Snowflake share only works between accounts in the same cloud region, because it points at storage that lives there. To cross regions you replicate the database to an account in the target region and share from that copy, or publish a listing with auto-fulfillment.
solid answer
~50 sA share is metadata over the provider's micro-partitions, and those files sit in one cloud provider's object storage in one region. Nothing is copied, so there is nothing to make the data appear elsewhere — which is why a direct share requires provider and consumer to be on the same cloud and region. Crossing that boundary means creating a real second copy. The manual route is database replication: enable replication on the source database, create a replica in a provider-owned account in the target region, refresh it, then create a share there and add the consumer. The managed route is to publish a **listing**, where Snowflake's auto-fulfillment provisions and maintains the remote copy for you. Either way the properties of sharing change materially: the consumer now reads a replica, so freshness is bounded by the refresh schedule rather than instant, and the provider pays storage in every target region plus the cross-region transfer.
code
sql · 12 lines-- Primary account (source region)
ALTER DATABASE analytics ENABLE REPLICATION TO ACCOUNTS myorg.eu_acct;
-- Provider-owned account in the target region
CREATE DATABASE analytics AS REPLICA OF myorg.us_acct.analytics;
ALTER DATABASE analytics REFRESH;
CREATE SHARE eu_sales_share;
GRANT USAGE ON DATABASE analytics TO SHARE eu_sales_share;
GRANT USAGE ON SCHEMA analytics.public TO SHARE eu_sales_share;
GRANT SELECT ON VIEW analytics.public.orders_shared TO SHARE eu_sales_share;
ALTER SHARE eu_sales_share ADD ACCOUNTS = myorg.eu_partner;go deeper
Remember the constraint itself: a direct share needs both accounts on the same cloud and in the same region, because the data is never copied.
Explain why the limit follows from zero-copy storage, and outline the fix — replicate the database into an account in the target region and share from the replica.
Show what changes once a copy exists: freshness becomes a refresh schedule you must monitor, and storage plus transfer costs land on the provider. Know both the manual replication path and the listing auto-fulfillment path.
Own the regional footprint decision — how many regions to fulfil, what freshness you are willing to promise, and whether to replicate a narrowed dataset rather than the raw tables to keep transfer cost bounded.
## Why the boundary exists Sharing works because it moves no data. A share is an entry in Snowflake's metadata layer saying "account X may read these objects", and the consumer's warehouse then reads the provider's micro-partition files directly from cloud object storage. Those files live in exactly one place: one cloud provider, one region. A consumer account in another region has no compute in that region and no path to read those files as though they were local. So the constraint is not an arbitrary product limitation — it falls out of the zero-copy design. Same cloud, same region: share directly. Anything else needs a physical second copy. ## Route 1: database replication, then share the replica The explicit approach is to make the copy yourself, into a provider-owned account in the consumer's region, and share from there. ```sql -- In the source (primary) account ALTER DATABASE analytics ENABLE REPLICATION TO ACCOUNTS myorg.eu_acct; -- In the provider's account in the target region CREATE DATABASE analytics AS REPLICA OF myorg.us_acct.analytics; ALTER DATABASE analytics REFRESH; CREATE SHARE eu_sales_share; GRANT USAGE ON DATABASE analytics TO SHARE eu_sales_share; GRANT USAGE ON SCHEMA analytics.public TO SHARE eu_sales_share; GRANT SELECT ON VIEW analytics.public.orders_shared TO SHARE eu_sales_share; ALTER SHARE eu_sales_share ADD ACCOUNTS = myorg.eu_partner; ``` The secondary is read-only and is brought up to date by `ALTER DATABASE ... REFRESH`, which you schedule with a task. Newer Snowflake deployments express the same thing through replication groups, which replicate a set of objects together and keep them consistent with each other — worth reaching for when the share spans several databases and you care that they refresh as a unit. Things that change once a replica is in the path: - **Freshness becomes a schedule.** With a same-region share, a committed write is visible on the consumer's next query. With replication, the consumer sees the state of the last successful refresh. If the partner's SLA says "within an hour", that SLA is now yours to operate — including alerting when a refresh fails. - **Cost moves onto the provider.** You pay storage for the copy in every target region, cross-region data transfer for each refresh, and compute for the refresh itself. Wide tables refreshed often are the expensive shape. - **You have another failure mode.** A refresh that silently stops leaves a partner quietly reading stale data, which is far worse than an outage they can see. ## Route 2: a listing with auto-fulfillment The managed alternative is to publish the data as a listing — private (targeted at named accounts) or public on the Marketplace — and let Snowflake handle remote regions. With cross-cloud auto-fulfillment enabled, when a consumer in another region or on another cloud requests the listing, Snowflake provisions and maintains the remote copy for you rather than you building replication by hand. The economics do not disappear: the provider still pays for storage and transfer of the fulfilled copies, and the freshness is still that of a maintained copy rather than a live read. What you buy is that you no longer operate the replication yourself, and consumers in many regions do not each require a bespoke setup. That is the deciding factor when the answer to "how many regions?" is "we don't know yet". ## How to choose Ask three questions: 1. **How many target regions, and are they known in advance?** One known region, one partner: manual replication is simple and gives you full control of the schedule. Many or unknown: a listing with auto-fulfillment. 2. **How fresh must it be?** Neither route gives live data. If the partner truly needs the current committed state, the real fix is for them to have an account in your region — that is a conversation, not a configuration. 3. **What is the volume, and how often does it change?** Cross-region transfer is charged on bytes moved. A wide, high-churn table refreshed every fifteen minutes into three regions is a cost line you should model before you promise it, and often an argument for replicating a narrowed, pre-aggregated view of the data rather than the raw fact table. ## The interview shape This usually arrives as "our EU subsidiary can't see the share" and the interviewer is checking whether you know the same-region constraint is inherent to zero-copy sharing rather than a permissions bug. The complete answer names the constraint, gives both routes, and then volunteers what changes once a copy exists: freshness becomes a schedule you operate, and the bill moves to the provider.
- After replication is in place, how is the consumer's experience different from a same-region share?They read a replica, so they see the state of the last successful refresh rather than the current committed state. Everything else looks identical, which is the danger: a failed refresh is invisible to them. You need monitoring on refresh success and lag, and ideally a freshness column or a metadata view the partner can check themselves.
- What drives the cost of serving a share across regions?Three things: storage for each remote copy, cross-region data transfer for every refresh, and the compute that performs the refresh. Bytes moved dominate, so a wide, high-churn table refreshed frequently into several regions is the expensive shape. Replicating a narrowed or pre-aggregated view instead of the raw fact table is usually the biggest lever.
- When would you tell the partner to open an account in your region instead?When they genuinely need live data. No copy-based route gives the current committed state, so if their use case is operational rather than analytical, the honest answer is that sharing across regions cannot meet it. An account in your region restores zero-copy, instant visibility and moves query cost back to them.
A share is a window into your building; a partner in another city cannot look through it. You either open a branch office and keep it stocked, or hand the whole distribution problem to a franchise operator.
saying these in an interview costs you the question
- Treats the same-region limit as a permissions or networking bug
- Thinks Snowflake transparently reads storage across regions
- Forgets the consumer now sees a replica, not live data
- Ignores that the provider pays storage and transfer per region
- Assumes auto-fulfillment makes cross-region sharing free