Les dates de mes prochains événements

Meetup du Club Power BI de Strasbourg : Avec Deneb, j’élève mon rapport au firmament

Modern Work Place Conférence Paris 2024 : Power BI avec un peu d’intelligence artificielle

Accéder aux documents contenus dans une bibliothèque SharePoint comme source de données pour Azure Data Factory – Partie 5

Dans cette série d’articles, nous verrons comment accéder aux documents contenus dans une bibliothèque SharePoint comme source de données pour Azure Data Factory. Azure Data Factory permet en standard de charger les données issues des listes SharePoint. Mais ici, je vais détailler comment lire les données de fichiers Excel et/ou CSV contenus dans une bibliothèque SharePoint car la procédure n’est pas aisée.

Comme cette procédure n’est pas en standard dans Azure Data Factory, les étapes à réaliser sont nombreuses et il est important de les suivre attentivement.

Voici les différentes étapes à réaliser

  1. Enregistrer une application dans Azure Active Directory
  2. Enregistrer les éléments de l’application enregistrée dans un Azure Key Vault
  3. Créer un environnement Azure Data Factory
  4. Donner les droits d’accès dans le site SharePoint
  5. Créer le pipeline pour récupérer les informations contenues dans un document (cet article)
  6. Bonus : accéder à une série de documents dans la bibliothèque SharePoint (article à venir)

Voici la dernière partie de notre série d’articles et il s’agit de l’article le plus complexe au regard du nombre d’opérations à réaliser.

Dans les précédents articles, nous avons créé toutes les ressources nécessaires et nous les avons paramétrés pour que notre projet fonctionne correctement.

Je rappelle ici les ressources du projet :

  • Une application inscrite dans Aure Active Directory
  • Une ressource Azure Key Vault
  • Une ressource Azure Data Factory
  • Une ressource Azure SQL Database
  • Une bibliothèque SharePoint

Nous allons maintenant créer un pipeline dans Azure Data Factory avec les activités nécessaires pour intégrer les données incluses dans un fichier Excel inclus dans la bibliothèque SharePoint vers la base de données.

Pour accéder aux fichiers hébergés dans la plate-forme SharePoint Online, nous n’utiliserons pas de composants natifs car aucun ne correspond à notre besoin. Nous utiliserons à la place des composants pour attaquer les API de SharePoint : donc, dans ADF, il s’agit des composants HTTP ou Web.

La première chose à faire est évidemment d’ouvrir Azure Data Factory Studio.

Au préalable, pour plusieurs saisies, vous pouvez choisir de nommer les objets comme vous le souhaitez. Toutefois, je vais dans cet article copier les textes des contenus dynamiques ADF : si vous avez utilisé les mêmes libellés que moi, vous n’aurez qu’à faire des copier-coller. Sinon, il faut modifier lesdits textes en fonctions de vos propres saisies.

Nous disposons déjà de paramètres globaux créés précédemment comme le montre l’image suivante :

Paramètres globaux précédemment créés
Paramètres globaux précédemment créés

L’étape suivante sera de créer un nouveau service lié de type HTTP pour permettre l’accès au contenu des fichiers Excel.

Ajout d'un nouveau service lié de type HTTP
Ajout d’un nouveau service lié de type HTTP

Nous appellerons ce service lié SharePoint Online. Ensuite dans la section réglage, nous indiquons un nouveau paramètre de type String et nommé NomTenant. Le type d’authentification est Anonyme. Pour l’URL de base, il s’agit de rentrer le nom du service SharePoint, à savoir https://[votretenant].sharepoint.com/sites/ . Voici donc le texte à coller en guise de contenu dynamique pour l’URL de base :

@{concat('https://', linkedService().NomTenant, '.sharepoint.com/sites/')}

Voici le résultat après un test de connexion :

Création du service lié SharePoint Online
Création du service lié SharePoint Online

Comme toutes les modifications que nous réalisons, il est important de les sauvegarder en publiant notre projet Azure Data Factory. Ceci étant dit, pour ne pas charger cet article, je ne le repréciserai pas par la suite.

Une fois ce service lié, nous allons directement à la page Gérer pour ajouter deux nouveaux jeux de données : le premier est la source Excel et le second est la destination, à savoir une table Azure SQL Database.

Page Gérer du Studio d'Azure Data Factory
Page Gérer du Studio d’Azure Data Factory

Pour le jeu de données Excel, nous sélectionnons HTTP comme magasin de données et Excel comme type de format de données. Ensuite, nous nommons ce jeu de données Generic_Excel_depuis_SharePoint et préciser SharePoint Online comme service lié. Enfin, nous cochons la case Première ligne comme en-tête. Nous n’irons pas plus loin tout de suite et validons la saisie.

Sélection de HTTP comme magasin de données
Sélection de HTTP comme magasin de données
Sélection d'Excel comme type de format de données
Sélection d’Excel comme type de format de données
Paramétrage du jeu de données Excel
Paramétrage du jeu de données Excel

Nous allons directement dans l’onglet Réglages pour créer 6 entrées de type chaîne dont les noms sont les suivants :

  • NomTenant
  • NomSiteSharePoint
  • NomListeSharePoint
  • NomDossierSharePoint
  • NomFichierSharePoint
  • NomFeuilleExcel
Détail des réglages du jeu de données
Détail des réglages du jeu de données

Nous revenons vers l’onglet Connexion pour préciser les valeurs suivantes en tant que contenu dynamique :

ChampsValeurs du contenu dynamique
NomTenant@dataset().NomTenant
URL relative@concat(dataset().NomSiteSharePoint,
  ‘/_api/web/GetFileByServerRelativeUrl( »/sites/’,
  dataset().NomSiteSharePoint, ‘/’,
  dataset().NomListeSharePoint, ‘/’,
  dataset().NomDossierSharePoint, ‘/’,
  dataset().NomFichierSharePoint,  »’)/$value’)
Nom de la feuille@dataset().NomFeuilleExcel
Liste des valeurs des champs à renseigner
Onglet Connexion du jeu de données Excel
Onglet Connexion du jeu de données Excel

Nous appelons l’API SharePoint GetFileByServerRelativeUrl pour ce jeu de données. Voici le jeu de données Excel créé et paramétré.

Nous allons maintenant créer le jeu de données de type Azure SQL Database. Pour cela, nous sélectons Azure SQL Database comme Magasin de données. Ce jeu de données sera nommé Generic_SQL_table et le serveur lié est Base de données SQL destination. Nous réglerons les autres paramètres juste après.

Sélection du magasin de données de type Azure SQL Database
Sélection du magasin de données de type Azure SQL Database
Paramétrage du jeu de données Azure SQL Database
Paramétrage du jeu de données Azure SQL Database

Dans l’onglet Réglage, nous créons une nouvelle entrée de type Chaîne que nous nommerons NomTable.

Onglet Réglage du jeu de données Azure SQL Database
Onglet Réglage du jeu de données Azure SQL Database

Maintenant, allons dans l’onglet Connexion et modifions le champs Table. Dans le premier champ, nous indiquerons dbo comme nom de schéma et le contenu dynamique suivant pour le nom de la table :

@dataset().NomTable
Onglet Connexion du jeu de données Azure SQL Database
Onglet Connexion du jeu de données Azure SQL Database

Nous pouvons enfin créer le pipeline que nous nommerons Chargement de SharePoint vers SQL. Nous allons utiliser 4 activités Web et une activité de copie selon le schéma suivant :

Schéma de base du pipeline
Schéma de base du pipeline
Ancien nom de l’activitéNouveau nom de l’activité
Web1Obtenir ID du tenant
Web2Obtenir ID du client
Web3Obtenir secret du client
Web4Obtenir le token
Copy data1Copie Excel vers SQL
Nommage des activités du pipeline
Schéma du pipeline avec les noms des activités
Schéma du pipeline avec les noms des activités

Pour ce pipeline, nous allons créer 3 variables de type Chaîne avec les propriétés suivantes :

Nom des variablesTypeValeur par défaut
NomSiteSharePointChaîneDonnescharger
NomListeSharePointChaîneBibliothqueDocuments
NomDossierSharePointChaîneDoss1/Doss2
Variables du pipeline
Onglet Variables du pipeline
Onglet Variables du pipeline

Nous allons maintenant paramétrer les trois activités les plus à gauche (Obtenir ID du tenant, Obtenir ID du client et Obtenir secret du client). Pour ce faire, nous allons chercher les valeurs qui sont stockés dans la ressource Azure Key Vault et cela en passant par le service Web dudit service.

Les trois activités ont des paramètres identiques, à savoir :

ParamètreValeur
MéthodeGET
AuthentificationIdentité managée affectée par le système
Ressourcehttps://vault.azure.net
Valeurs communes aux trois activités

Par contre, l’URL est différente pour chacune des trois activités. Il faut préciser ces URL en tant que contenu dynamique :

ActivitésValeur de l’URL
Obtenir ID du tenant@concat(pipeline().globalParameters.AKV_URL,
  ‘secrets/’,
  pipeline().globalParameters.AKV_Secret_IDAnnuaire,
  ‘?api-version=7.0’)
Obtenir ID du client@concat(pipeline().globalParameters.AKV_URL,
  ‘secrets/’,
  pipeline().globalParameters.AKV_Secret_IDApplication,
  ‘?api-version=7.0’)
Obtenir secret du client@concat(pipeline().globalParameters.AKV_URL,
  ‘secrets/’,
  pipeline().globalParameters.AKV_Secret_SecretApplication,
  ‘?api-version=7.0’)
Valeur de l’URL pour les activités

Voici le résultat pour la première activité, sachant que les deux autres sont sur le même modèle :

Paramètres des activités
Paramètres des activités

Nous allons maintenant paramétrer l’activité Obtenir le token fourni par AAD. Cette activité va appeler le service Web de l’Azure Active Directory pour récupérer un jeton (token) correspondant à l’application inscrite.

Dans le tableau suivant, vous trouverez les valeurs à entrer dans l’onglet Paramètres de l’activité :

ParamètreType du saisieValeur
URLContenu dynamique@concat(‘https://accounts.accesscontrol.windows.net/’,
  activity(‘Obtenir ID du tenant’).output.value,
  ‘/tokens/OAuth/2’)
MéthodeSélection dans une listePOST
En-têtesNouvelle ligneNom : Content-Type
Valeur : application/x-www-form-urlencoded
CorpsContenu dynamique@concat(‘grant_type=client_credentials&client_id=’,
  activity(‘Obtenir ID du client’).output.value,
  ‘@’,
  activity(‘Obtenir ID du tenant’).output.value,
  ‘&client_secret=’,
  activity(‘Obtenir secret du client’).output.value,
  ‘&resource=00000003-0000-0ff1-ce00-000000000000/’,
  pipeline().globalParameters.AKV_Secret_NomAnnuaire,
  ‘.sharepoint.com@’,
  activity(‘Obtenir ID du tenant’).output.value)
AuthentificationSélection dans une listeAucun
Valeurs des paramètres pour l’activité Obtenir le token

Voici le résultat un fois les paramètres saisies :

Paramètres saisies pour l'activité Obtenir le token
Paramètres saisies pour l’activité Obtenir le token

Il y a lieu à cette étape de sécuriser les données générées par les activités Web et ainsi que l’activité de copie (dont nous détaillerons par la suite les paramètres) que les données sensibles (valeur du secret de l’application inscrite ainsi que le token ne seront pas présents dans les journaux de log. Pour ce faire, nous activerons les entrées et sorties sécurisées présents dans l’onglet Général de toutes activités. Voici un exemple pour l’une des activités. Nota : un token est valable 24 heures :

Sécurisation des entrées et sorties des activités
Sécurisation des entrées et sorties des activités

Il est temps maintenant de nous occuper de l’activité de copie. Il s’agit donc de paramétrer comme source une feuille d’un fichier Excel héberger dans une bibliothèque SharePoint et comme destination, nous utiliserons ici une table d’une base de données Azure SQL Database.

Donc, commençons par la source. Voici les paramètres que nous saisissons :

ParamètreType de saisieValeur
Jeu de données sourceSélection dans une listeGeneric_Excel_depuis_SharePoint
NomTenantContenu dynamique@pipeline().globalParameters.AKV_Secret_NomAnnuaire
NomSiteSharePointContenu dynamique@variables(‘NomSiteSharePoint’)
NomListeSharePointContenu dynamique@variables(‘NomListeSharePoint’)
NomDossierSharePointContenu dynamique@variables(‘NomDossierSharePoint’)
NomFichierSharePointSaisie libre[Le nom de votre fichier]
NomFeuilleExcelSaisie libre[Le nom de la feuille]
Méthode de demandeSélection dans une listeGET
En-têtes supplémentairesContenu dynamique@{concat(‘Authorization: Bearer ‘,
  activity(‘Obtenir le token’).output.access_token)}
Paramètres de la source de l’activité de copie

Voici le résultat de la saisie :

Paramètres de la source de l'activité de copie
Paramètres de la source de l’activité de copie

La dernière étape est de paramétrer l’onglet Récepteur de l’activité de copie :

ParamètreType de saisieValeur
Jeu de données de récepteurSélection dans une listeGeneric_SQL_table
Nom de tableSaisie libre[Nom de votre table]
Option de tableChoixCréer automatiquement un table
Paramètres du récepteur de l’activité de copie
Paramètres du récepteur de l'activité de copie
Paramètres du récepteur de l’activité de copie

Ici, nous avons fait le choix de créer automatiquement la table dans la base de données.

Nous pouvons maintenant lancer l’exécution du pipeline et constater son bon déroulement :

Exécution du pipeline
Exécution du pipeline

Et en interrogeant la base de données, les données sont bien présentes :

Contenu de la table Azure SQL Database
Contenu de la table Azure SQL Database

En clonant l’activité de copie est possible d’ajouter sans trop d’effort de nouveaux fichiers Excel et/ou de nouvelles feuilles pour copier les données vers notre base de données SQL Server.

En ajoutant un jeu de données de type DelimitedText et en inspirant du paramètrage du jeu de données Excel, il est tout aussi simple de charger des fichiers de type CSV :

Exemple de chargement des données issues de deux fichiers Excel et d'un fichier CSV
Exemple de chargement des données issues de deux fichiers Excel et d’un fichier CSV

Ainsi s’achève notre série d’articles sur ce sujet. Je vous propose un article bonus sur la façon de charger plusieurs fichiers issus de SharePoint dont on ne connaît pas le nom.

Bien à vous.

Articles similaires

4 réponses à « Accéder aux documents contenus dans une bibliothèque SharePoint comme source de données pour Azure Data Factory – Partie 5 »

Créez un site ou un blog sur WordPress.com