Dossier
Snowflake Data Sharing
Rédigé par Radoslav Ilchev – Consultant Actinvision
Cliquez sur les liens ci-dessous pour accéder directement à une partie.
Cas d’utilisation de la donnée partagée
Partager des données simple et efficace
Comment c’est possible ?
Mise en oeuvre
1. Créer le Share
2. Ajouter les privilèges pour les objets parents
3. Ajouter les objets à partager
4. Ajouter un ou plusieurs consommateurs
5. Instancier une base de données chez le consommateur
Niveau avancé – Secure View et filtrage dynamique des données
1. Créer la table de mapping et lister les autorisations
2. Création d’une vue sécurisée
3. Vérification des données visibles
Cas d’utilisation de la donnée partagée
Les cas d’usages sont nombreux en interne, partager les informations de vente et des clients à l’équipe marketing pour mieux cibler les clients et dynamiser les ventes est un grand classique. Le chalenge aujourd’hui va plus loin vers une entreprise interconnectée avec le monde extérieur. Ceci pour intégrer de la donnée externe pour avoir des analyses encore plus pertinentes mais aussi pour partager de la donnée à l’extérieur vers nos clients et partenaires. Partager de la donnée permet de faciliter les échanges, gagner en productivité mais surtout valoriser et monétiser les données fournies. Les applications se démocratisent et gagnent du terrain dans les domaines du jeu en ligne, des services cloud/IoT, mais également dans la grande distribution et le BtoC de manière plus général. J’ai pu assister récemment à un excellent témoignage de « Starbreeze » un éditeur de jeux vidéo et les énormes avantages à avoir la connaissance live sur l’utilisation de leurs jeux et les interactions des joueurs. Ce partage de données a été réalisé avec le Data Sharing de Snowflake. Les données ont été récoltées et mis à disposition par leurs fournisseurs de services backend PlayFab. Platform backend pour les jeux en temps réel de Microsoft Azure.
Un bel exemple mais les applications peuvent être multiples ; distributeur, est-ce que j’ai un moyen efficace d’analyser et de partager les données de vente avec mes fournisseurs ? Les données IoT ou encore les données de nos portables sont omniprésentes. Est-ce que je dispose de moyens efficaces pour travailler pleinement avec ces données ? Il y a un vrai potentiel pour établir une collaboration autour de la donnée avec nos partenaires commerciaux.
Partager des données simple et efficace
Traditionnellement le processus de partage de données implique une phase d’export pour produire les données et une phase d’import des données avec une complexité importante. Même si aujourd’hui des outils ETL/ELT, des stockages cloud et des API modernes simplifient la démarche, le travail reste conséquent et souvent réalisé en double chez le fournisseur de données et chez le consommateur.
Aujourd’hui c’est possible de faire plus efficace, plus simple et plus sécurisé. J’aimerais vous parler de Snowflake et Snowflake Data Sharing.
Snowflake l’entrepôt de données conçu pour le cloud avec un fonctionnement SaaS. Performance, concurrence, simplicité sont les 3 mots que l’éditeur utilise à juste titre pour décrire cette solution d’entrepôt de données cloud.
Snowflake Data Sharing, propose une solution innovante pour le partage de données et permet aux entreprises de partager leurs données en temps réel, de façon sécurisé et disponible directement dans l’entrepôt de données du partenaire sans aucune copie physique de la donnée. Les technologies cloud utilisées permettent d’éliminer la concurrence sur la même donnée physique et les sollicitations extérieures multiples.
Le fournisseur partage de manière simple ces données, qui sont stockées de manière unique dans son compte Snowflake, avec un ou plusieurs consommateurs tout en gardant la maîtrise et la sécurité des informations partagées. Les consommateurs utilisent immédiatement et directement les données dans son instance Snowflake en utilisant du SQL et avec des connexions natives avec la plupart des outils BI ou ETL mais aussi du JDBC, ODBC, Spark, R etc.
Voici un schéma montrant la différence entre le modèle historique par recopie et le modèle de Snowflake.
Comment c’est possible ?
L’architecture Snowflake multi-cluster avec partage des données, pensée et créée pour le cloud rend possible cette solution. C’est un système intégré qui permet de complètement dissocier le stockage, la puissance de calcul et les services.
La séparation des services liés au stockage et au calcul permet à plusieurs entrepôts virtuels (clusters de calcul) de traiter simultanément les mêmes données. La concurrence est ainsi virtuellement illimitée.
La couche de service est le cerveau de la solution, elle fédère et rend l’utilisation de la solution simple et transparente toute en assurant l’authentification, la sécurité, la consistance, etc.
Mise en œuvre
Penchons-nous sur comment implémenter un Snowflake Data Sharing.
Il faut commencer par créer le Share chez le fournisseur. Ce partage est un objet logique qui contient les références vers les objets d’une base de données que le fournisseur souhaite partager avec ces consommateurs. Il faut avoir le rôle account admin ou avoir le privilège create share pour le faire.
Voici les cinq étapes :
1. Créer le Share
2. Ajouter les privilèges pour les objets parents
3. Ajouter les objets à partager
4. Ajouter un ou plusieurs consommateurs
5. Instancier une base de données chez le consommateur
Snowflake nous permet de facilement le faire et administrer le contenu et les consommateurs directement avec l’interface web en quelques clics, mais aussi avec des commandes SQL spécifiques (CREATE SHARE, ALTER SHARE etc.)
Pour les étapes 1, 2 et 3, voici comment créer le Share dans l’interface en donnant un nom et en sélectionnant les objets à partager.
L’équivalent en SQL est également disponible via le bouton show SQL .
CREATE SHARE « DEMO_SHARE » COMMENT=’My demo share’;
GRANT USAGE ON DATABASE « SHARE_DB » TO SHARE « DEMO_SHARE »;
GRANT USAGE ON SCHEMA « SHARE_DB ». »PUBLIC » TO SHARE « DEMO_SHARE »;
GRANT SELECT ON VIEW « SHARE_DB ». »PUBLIC ». »METEO_FR » TO SHARE « DEMO_SHARE »;
–vérifier le contenu.
SHOW GRANTS TO SHARE DEMO_SHARE;
4. Ajouter un ou plusieurs consommateurs
Ensuite vous pouvez ajouter les consommateurs de votre partage. Il y a deux types de consommateurs :
Full – il s’agit des consommateurs qui ont leur propre compte Snowflake existant. Ces consommateurs utilisent leur propre puissance de calcul (entrepôts virtuels) et finance donc eux-mêmes la consommation des données. Seul le coût du stockage très faible revient au fournisseur. Ils sont aussi maîtres de leur consommation et ne payeront que pour leur consommation réelle.
Reader – ce titre correspond à un compte lecteur créé et géré par le fournisseur dans but de partager les données avec ce dernier. C’est le fournisseur qui est responsable de la configuration de ce compte. Le coût de l’utilisation de ce compte revient aux fournisseurs. Les bonnes pratiques impliqueront la création de rôles spécifiques, entrepôt virtuel et monitoring des ressources selon le besoin. Le compte account admin reste chez le fournisseur en principe.
4 a. Ajouter un ou plusieurs consommateurs possédant un compte Snowflake
Méthode interface et SQL disponibles
ALTER SHARE « DEMO_SHARE » ADD ACCOUNTS = ACCOUNT_TEST123;
Vous allez avoir une erreur si le compte Snowflake cible n’existe pas dans la même région que celle du fournisseur. Pour le moment le partage est possible uniquement avec des comptes de la même région et dans le même cloud. L’équipe Snowflake est bien au fait de cette limitation et travaille sur des évolutions qui permettraient de faire du partage entre région et même entre fournisseur cloud dans le futur.
4 b. Création d’un compte lecteur (Managed Reader account)
Cette instance est avec le même niveau de licence, même cloud et même région que le compte Snowflake du fournisseur. Pour rappel le coût associé avec l’utilisation de ce compte est à la charge du fournisseur.
Bien évidement il est possible de réaliser la même manipulation en SQL.
CREATE MANAGED ACCOUNT DEMO_READER_ACT1 admin_name=’DEMOUSER1′, admin_password=’SOMESTRONGPASSWORDSTRING’, type=reader, COMMENT=’Demo reader account 1 ‘;
Félicitations votre consommateur a un compte lecteur sur Snowflake !
N’oubliez pas de l’ajouter dans le consommateur de votre partage.
5. Instancier une base de données chez le consommateur
Pour ce faire, il faut définir une base de données pour héberger le partage. Ceci est vrai pour un consommateur Full et pour un consommateur Reader Account.
Niveau avancé – Secure View et filtrage dynamique des données
La vue sécurisée est la méthode privilégiée pour partager en toute sécurité la donnée dans Snowflake. Elle présente des avantages non négligeables, car le SQL spécifique à la création ainsi que les champs et les tables sous-jacentes ne sont visibles que par le rôle propriétaire de la vue sécurisée.
Cependant, l’optimisateur de requête ne voit pas les tables sous-jacentes et n’optimise donc pas les requêtes. En cas de problèmes de performance, il faudra probablement optimiser les clés de clustering des tables manuellement.
Ces vues sont facilement reconnaissables par le symbole de cadenas dans l’interface.
En plus Snowflake nous donne la possibilité de dynamiquement filtrer les lignes d’une vue sécurisée selon le compte consommateur et de n’exposer ainsi qu’une sous partie de la vue. Un exemple classique serait d’avoir une table unique avec l’utilisation d’un service et rendre visible pour un client uniquement le sous ensemble de lignes avec les informations sur son utilisation propre.
Pour implémenter cette stratégie nous avons besoin d’une table de mapping qui nous donne la correspondance entre les comptes consommateur et une colonne d’information à filtrer dans nos données.
Prenons un exemple où nous avons une table avec des données météo de la France entière et que j’ai un client.
‘ACCOUNT_TEST123’ qui a le droit de voir uniquement les données pour Strasbourg
‘ACCOUNT_TEST124’ qui a le droit de voir uniquement les données pour Paris
1. Créer la table de mapping et lister les autorisations
CREATE TABLE ACCOUNT_MAPPING_TABLE (
ACCOUNT_ID VARCHAR(50),
VILLE VARCHAR(250));
— Autoriser/lister ‘ACCOUNT_TEST123’ pour Strasbourg
Insert INTO ACCOUNT_MAPPING_TABLE (ACCOUNT_ID, VILLE)
values (‘ACCOUNT_TEST123’, ‘Strasbourg’);
— Autoriser/lister ‘ACCOUNT_TEST124’ pour Paris
Insert INTO ACCOUNT_MAPPING_TABLE (ACCOUNT_ID, VILLE)
values (‘ACCOUNT_TEST124’, ‘Paris’);
— Autoriser le compte fournisseur de voir 3 villes pour l’exemple. (Remplacez ‘MYACCOUNT’ avec le vôtre)
Insert INTO ACCOUNT_MAPPING_TABLE (ACCOUNT_ID, VILLE)
values (‘MYACCOUNT’, ‘Colmar’);
Insert INTO ACCOUNT_MAPPING_TABLE (ACCOUNT_ID, VILLE)
values (‘MYACCOUNT’, ‘Paris’);
Insert INTO ACCOUNT_MAPPING_TABLE (ACCOUNT_ID, VILLE)
values (‘MYACCOUNT’, ‘Strasbourg’);
2. Création d’une vue sécurisée
create secure view SHARE_SV_METEO_FR
as select PAYS, METEO_FR.VILLE, METEO_PRINCIPALE, TEMPERATURE_CELSIUS
from METEO_FR inner join PRIVATE_SH.ACCOUNT_MAPPING_TABLE ACC
on METEO_FR.VILLE = ACC.VILLE
WHERE ACC.ACCOUNT_ID = CURRENT_ACCOUNT();
3. Vérification des données visibles
Aperçu de la table de mapping
Une première requête avec le compte fournisseur ayant le droit de voir Colmar, Paris et Strasbourg.
Pour tester et simuler les connexions à partir d’un autre compte nous pouvons utiliser le paramètre de session SIMULATED_DATA_SHARING_CONSUMER.
Voici les résultats obtenus avec les deux comptes de test.
‘ACCOUNT_TEST123’ qui a le droit de voir uniquement les données pour Strasbourg
‘ACCOUNT_TEST124′ qui a le droit de voir uniquement les données pour Paris
Cas d’usages
PlayFab de Microsoft est une plateforme back-end pour les éditeurs de jeux en temps réel. Le service gère plus de 90 millions de joueurs dans le monde. PlayFab utilise le Share de Snowflake pour permettre aux éditeurs de jeux d’avoir un accès complet à leurs informations : services de jeu, analytique données et outils LiveOps.
PlayFab and Snowflake Data Sharing [EN]
Une référence française est le leader du prêt-à-porter Camaïeux qui s’est lancé dans l’implémentation d’un partage de données à destination de ces fournisseurs.