Dans les articles précédents, on a déjà posé les fondamentaux de Snowflake à savoir l'architecture (storage/compute/services), l’ingestion (stages, COPY, Snowpipe) et la gestion des droits (droits, sécurité, bonnes pratiques). Et pourtant....
Il reste une question très importante qui arrive vite et c'est comment donner accès à ses données à un autre compte snowflake (partenaire, filiale, client) sans exporter, sans copier ailleur les données ?
C'est exactement ce que résout le Data Sharing, tu partages des objets vers un autre compte sans déplacer les données en lecture seule.
C'est quoi concrètement le Data Sharing ?

Le modèle est très simple :
- Le Data Provider (toi) possède les données (storage chez toi).
- Le Data Consumer (l'autre compte) voit ces données comme une base importée dans son compte, et il peut les requêter.
Les objects qu'on peut partager
Il y a une liste d'objets bien précise, et c'est important de la connaître. Dans un share, tu peux exposer :
- Databases
- Des tables (le cas le plus direct),
- Des vues (SECURE VIEW),
- Des secure materialized views (secure)
- Des dynamic tables,
- External tables, Iceberg tables, secure UDFs, et certains cas Delta.
Exemple Concret
-- 1) On crée une secure view pour préparer le partage
CREATE OR REPLACE SECURE VIEW SALES_DB.SHARED.V_SALES_SHARED AS
SELECT
ORDER_ID,
CUSTOMER_ID,
AMOUNT,
ORDER_DATE
FROM SALES_DB.RAW.SALES;
-- 2) Créer le share
CREATE OR REPLACE SHARE SHARE_SALES;
-- 3) Donner l'accès “navigation”
GRANT USAGE ON DATABASE SALES_DB TO SHARE SHARE_SALES;
GRANT USAGE ON SCHEMA SALES_DB.SHARED TO SHARE SHARE_SALES;
-- 4) Donner l'accès “données”
GRANT SELECT ON VIEW SALES_DB.SHARED.V_SALES_SHARED TO SHARE SHARE_SALES;
-- 5) Ajouter le compte consumer
ALTER SHARE SHARE_SALES ADD ACCOUNTS = ('<consumer_account_locator>');
-- 6) vérifier ce que ton share expose avec
DESC SHARE SHARE_SALES;
SHOW GRANTS TO SHARE SHARE_SALES;
Le consumer ne va pas voir automatiquement la base car il doit créer une base à partir du share.
CREATE DATABASE SALES_FROM_PARTNER
FROM SHARE <provider_account_locator>.SHARE_SALES;
-- si tu veux que d'autres rôles puissent lire
GRANT IMPORTED PRIVILEGES ON DATABASE SALES_FROM_PARTNER TO ROLE <role>;
Et ensuite, c'est magique. Il suffit de requêter les tables comme n'importe quelle table.
SELECT COUNT(*) FROM SALES_FROM_PARTNER.SHARED.V_SALES_SHARED;
Comme je l'ai mentionné précédemment, mais c'est important de le repréciser, une base créée à partir d’un share est une base importée. Donc logiquement
- Read-only (pas de
INSERT/UPDATE/DELETE) - Pas de création d'objets dans cette base importée
- Pas de Time Travel dessus, pas de clone, etc...
- Et surtout, le consumer ne peut pas re-partager ce qu'il a importé à un autre compte.
Par contre, tu peux tout à fait créer tes objets dans tes propres DB et les faire pointer vers la donnée partagée.
Les différents type de partage
On peut synthétiser les principaux types de partage dans Snowflake comme suit
Direct share
C'est l'exemple que j'ai donnée précédemment dans l'article, donc tu partages à un ou plusieurs comptes dans ta région Snowflake. C’est le plus direct, le plus simple, c'est du compte à compte mais avec des limites car ce n'est pas le plus pratique quand tu beaucoup de consumers ou si tu veux partager à un consumer d'une autre région.
Listing / Marketplace

Les deux notions peuvent prêter à confusion, mais pour faire simple Le listing n'est pas un autre type partage, mais plutôt une façon de distribuer ton partage comme un data product. Donc derrière, il y a toujours un mécanisme de partage, mais le listing ajoute tout ce qui manque au direct share et c'est une page descriptive, de la doc, des exemples, des conditions d'accès, et gérer potentiellement le cross-region.
Dans un autre côté le Marketplace, c'est simplement l'endroit où ces listings peuvent être publiés et trouvés. Tu peux faire un listing privé (visible seulement par des comptes que tu cibles) ou public (visible à tout le monde).
Reader account
Quand le consumer n'a pas Snowflake. Tu crées un reader account pour lui. Mais attention c'est toi qui portes la facture compute de ce reader account (donc resource monitors obligatoire si tu veux dormir tranquille la nuit 😃).
Aller plus loin : Formation Snowflake
J’ai regroupé tous mes articles Snowflake dans un parcours complet.
👉 Accéder à la Formation Snowflake
Vous voulez que je vous accompagne sur votre projet data (Snowflake, ingestion, modélisation, performance, coûts, gouvernance) ?
👉 Réserver un appel de 30 minutes

