
Delta sharing & Unity Catalog
Unity Catalog est une fonctionnalité de Databricks conçue pour faciliter la découverte, l'organisation et le partage des données, en permettant notamment la data discovery. C’est un catalogue de données qui offre une vue consolidée de celles-ci. Le partage des données est désormais facilité grâce au Delta Sharing, et maitrisé avec Unity Catalog. Le Delta Sharing est une autre fonctionnalité nous permettant de partager des tables Delta en temps réel sans qu’elles soient dupliquées. Ainsi, tous les utilisateurs auront accès à la même table et aux mêmes données. Nous verrons dans un premier temps les étapes nécessaires à la création d’un Metastore ainsi que le paramétrage d’un compte et d’un Workspace Databricks. Dans un second temps, nous nous intéresserons à la création d’un catalogue et d’un Recipient, ainsi qu’à la gestion des accès et des droits.
Prérequis
Avant d’exploiter les deux fonctionnalités citées, nous devons être sûrs d’être en possession des composants et privilèges listés ci-dessous. Nous n’allons cependant pas les aborder en détail ici.
- Un compte Databricks avec l’option Pricing Tier Premium :

- Un compte de stockage (ADLS2 dans notre cas, avec l’option Enable Hierarchical Namespace activée), avec le rôle contributeur ou propriétaire:

- Des privilèges Global Admin sur Azure AD
- Un rôle de contributeur ou de propriétaire sur les ressources group (même région que le compte de stockage)
- Un rôle Azure Databricks Account Admins (pour plus de détails, aller sur : Azure Databricks administration guide)
Création d’un Metastore dans Azure
Conteneur dans ADLS gen2
Nous allons maintenant créer un conteneur de stockage dans ADLS. Il contiendra les métadonnées et les tables managées de notre Metastore.

Connecteur Azure Databricks
Il nous faudra également un connecteur Databricks (Access Connector for Azure Databricks) afin de connecter notre compte Databricks aux Managed Identities. La région du connecteur doit être la même que celle du compte de stockage.
Droit d’accès aux données
À présent, nous donnons les droits d’accès à l’identité managée au compte ADLS. Pour cela :
- Compte ADLS > Access Control (IAM) > Bouton Add > Add role assignment:

- Onglet « Rôle » > rôle Storage Blob Data Contributor :

-
Onglet « Members » > Managed identity > Select Members > sélectionner le connecteur Databricks:

De cette façon, nous ne donnons pas directement aux utilisateurs finaux accès au compte ADLS, mais plutôt accès aux données via le Unity Catalog. Le connecteur, avec le rôle de contributeur, permet aux Workspaces Databricks (et donc aux utilisateurs de ces Workspaces) l’accès aux données du compte ADLS.
Création d’un Unity Catalog Metastore dans Databricks
Maintenant que tout est configuré sur Azure, nous allons passer à la création d’un Metastore grâce la console Admin de Databricks:
- Account console > Data > Create metastore :

On ne peut créer qu’un seul Metastore par région. Raison pour laquelle j’ai un message d’erreur encadré en rouge. En effet, pour une simplicité et une gestion fiable des métadonnées, Databricks ne permet qu’un seul Metastore par région.
- Une fois le Metasotre créé, dans l’onglet « Assign to Workspaces », nous lui rattachons un Workspace :

De même pour un Workspace, celui-ci ne peut être rattaché qu’à un seul Metastore. À ce stade nous ne pouvons toujours pas utiliser la fonctionnalité de Delta Sharing, car d’autres paramétrages sont nécessaires. Le premier paramétrage est celui de l’activation de l’option de partage de tables Delta du Metastore. Une fois que ce dernier est créé dans l’onglet configuration, nous activons l’option de partage et renseignons la durée de validité du Token.

Le deuxième est celui du cluster. En effet le mode d’accès de celui-ci doit être « Single user » ou « Shared ». Toutefois, si vous préférez utiliser une ressource de calcul de type SQL Warehouse, aucune configuration n’est requise. Maintenant au niveau de notre Workspace, nous avons bien le nouvel onglet « Delta Sharing » et nous pourrons désormais commencer à créer des catalogues de données.

Partage de données
Nous pourrons partager des données avec des utilisateurs Databricks (d’une même ou d’une différente entreprise) mais aussi avec des utilisateurs qui n’ont pas en leur possession une plateforme Databricks (on peut imaginer des utilisateurs métier). Il existe deux façons pour que cela soit fait : dans un Notebook en quelques lignes de code, ou sinon avec du No code grâce à l’UI Databricks. Dans cet article, nous allons nous intéresser au partage de données avec l’UI un utilisateur externe n’utilisant pas Databricks, mais Power BI et Excel.
Ci-dessous les étapes à suivre :
1. Coté Provider
a. Création d’un Share
Un Share est un objet Databricks qui nous permet, grâce à Unity Catalog, de partager avec des Recipients des objets de métadonnées tels que des tables et des vues. Pour en créer un, nous allons dans le volet Data, puis Delta Sharing, Share Data, et nous renseignons son nom.

b. Création d’un Recipient
Un Recipient est un objet qui nous permet le partage des données présentes dans le Share my_share avec des utilisateurs. En allant dans Sharing Data, une nouvelle fenêtre apparait et nous renseignons le nom du Recipient my_recipient. Comme ce dernier n’est pas un utilisateur Databricks, nous laissons vide le champ « Sharing Identifier ». En validant avec le bouton « create », un lien que nous partageons avec my_recipient est finalement généré.

c. Ajout d’une table au Share
Dans le catalogue my_catalogue, ma base my_database, deux tables sont présentes. Nous n’allons partager avec le Recipient my_recipient que la table my_table_devices_gold. Pour ce faire nous allons sélectionner notre Share et nous rajoutons la table qui nous intéresse :

d. Accorder les accès à my_recipient
En allant dans my_recipient puis Grant share, nous donnons dans le menu déroulant les accès en lecture au share my_share. À noter que l’on ne peut donner que des accès en lecture.

2. Coté Recepient
Grâce au lien reçu (config.share), l’utilisateur pourra lire la table my_table_devices_gold avec différents outils qui supportent le protocole Delta Sharing comme Python, Pandas, Spark …etc. Dans cet article, nous allons nous intéresser à Power BI grâce à qui la lecture des données est simplifiée. Nous pouvons par ailleurs partager les données avec un utilisateur final sur Excel. Ceci donne un grand avantage : aucun paramétrage n’est requis de son côté. Comme les données sur Databricks sont en streaming, nous pourrons paramétrer un rafraîchissement sur Power BI, et l’utilisateur final n’aura qu’à actualiser le fichier Excel et aura accès aux dernières données à jours du Delta Lake ! Ci-dessous les étapes à suivre pour visualiser les données sur Power BI et Excel : Sur Power BI, cliquez sur obtenir les données, et sélectionnez le connecteur Delta Sharing.

Nous renseignons ensuite le lien du serveur ainsi que le Token présent dans le fichier de conf.



C’est fait ! Nous pouvons bien voir que nous avons accès à la table my_table_devices_gold.

Nous allons maintenant donner la possibilité à un membre de l’équipe métier de consulter ces données sur un fichier Excel et de les manipuler facilement. Pour ce faire, nous publions notre table sur le service Power BI et planifions comme ci-dessous le rafraîchissement de la table. Il faudra également paramétrer les informations d’identification dans le service Power BI. Pour cela, allez dans Centre de données > Jeu de données > Fichier > Paramètres > Informations d'identification de la source de données : saisissez ensuite la clé précédemment récupérée depuis le fichier de conf.
À noter que nous sommes limités à 8 actualisations par jour. L’idéal serait d’automatiser cette étape pour que les données arrivent à temps réel (ce n’est pas l’objet de cet article).


Comme nous pouvons le voir ci-dessous, le Recipient a pu lire les données de notre table my_table_devices_gold et en faire des analyses. Le tableau ressence les composants qui ont un faible niveau de batterie.
Pour finir
Le Delta Sharing combiné avec Unity Catalog offre une simplicité et une facilité dans le partage de données avec des utilisateurs internes et externes. La configuration et la gestion des autorisations se font en un seul endroit. Nous avons aussi le choix de le faire aussi bien avec du code que du No code. Les utilisateurs externes peuvent accéder aux mêmes données que leurs partenaires sans qu’elles ne soient dupliquées, et ce dans un environnement nécessitant peu de configuration. Ceci améliore la collaboration d’une manière considérable entre les équipes Data et les équipes métiers.