Cloud Adaptation

Présentation de Azure Data Factory

Découvrez nos jobs
Vous ambitionnez de devenir Tech Lead ou de faire du conseil de haut-niveau ? Nous avons des challenges à votre hauteur !

Dans sa gamme de produit, Microsoft Azure propose un outil très intéressant : Azure Data Factory

Il s’agit d’un ETL dans le cloud permettant de copier, modifier ou transférer des données d’une source vers une autre.

Quelques uses cases de ce type d’outil : Convertir les données, par exemple des fichiers texte vers une base de donnée, extraire des données d’une base vers un fichier, migrer une base locale vers une base de données dans le cloud, exporter une partie de ses données client vers un outil de CRM, …

Pour commencer, il vous faudra un comtpe Azure gratuit depuis ce lien

https://azure.microsoft.com/fr-fr/free/

Une fois que vous êtes connecté à Azure, créez une ressource de type « Data Factory » :

On renseigne le nom, l’abonnement, le groupe de ressource ainsi que la localisation. Pas besoin d’activer GIT pour cet exemple.

Ensuite il faut attendre quelques minutes, puis cliquez sur « Go to resource » :

La Data Factory est créée, et pour accéder à l’outil permettant de créer les script de copie de données, il faut cliquer sur « Author & Monitor » :

Plusieurs assistants vous sont proposés : Créer un data flow ou encore une copie des données.

Dans ces exemple nous allons créer un « pipeline » qui va s’occuper de prendre une partie des données d’une base Mysql et les injecter dans une base Azure SQL.

Cliquez sur « Create Pipeline », nous voila dans l’écran permettant de créer les scripts de traitement de données.

A gauche on retrouve les pipelines (les scripts), les sources de données existantes ainsi que les data flows.

Dans l’onglet « Activities » on retrouvera tous les éléments permettant de traiter les données. Nous allons principalement utiliser les outils qui sont dans le dossier « General » ainsi que « Move & transform ». Et sur la partie principale de l’écran on retrouve un outil graphique permettant de créer le script.

On va commencer par insérer un bloc de type « Move & Tranform » / « Copy data » :

Ce bloc permet de copier des données depuis une source vers une destination.

L’onglet « Source » permet de définir la source des données, cliquez sur « New » pour créer la source.

Azure Data Factory propose énormément de type de source de données : Des fichiers stockés dans Amazon S3 des bases de données Azure, Cassandra, DB2, Dynamics, Salesforce, Spark, Mongo DB, … Ici nous allons choisir une base « MySQL ». Ensuite on va cliquer sur « Open » pour définir l’accès à la base de données, puis dans Connection on clique sur « New » :

Puis on renseigne un nom, le nom du serveur, la base de données, le user name et le mot de passe :

Validez la connexion avec le bouton « Test connection ». Dans le data set, il suffit de renseigner le nom de la table source :

De la même façon nous allons maintenant définir la base de données et la table cible dans l’onglet « Sink ».

Nous avons maintenant une table source, et une table cible. La structure des deux tables peut être différente, il faut donc définir un « mapping » entre les champs des deux tables. Si les tables sont identiques alors le mapping est automatique :

Notre pipeline est terminé, il faut maintenant le publier avec le bouton « Publish All » et on peut démarrer le transfert des données en cliquant sur l’onglet Trigger puis « Trigger now ».

Pour suivre l’avancement du transfert, utiliser le bouton « Monitor » situé dans le menu gauche. On retrouve ici toutes les exécutions de script, avec l’état (succeeded ou failed). On peut afficher le détail et pour chaque étape du script on peut voir le détail des données transférées :

Depuis les « Triggers » il est également possible de planifier le lancement des tâches, par exemple lancer la copie des données toutes les heures, par exemple si on veut synchroniser deux sources de données.

Dans le cadre du transfert de données à intervalle régulier, deux stratégies sont possibles : On écrase les données de la base cible ou alors on va simplement ajouter les nouveaux enregistrement de la base source dans la base cible.

Pour la première solution, on peut utiliser la notion de « Pre-copy script » dans la base cible :

Il suffit de vider la base cible avec par exemple une requête SQL : « Delete from data ». A chaque lancement du script, la base cible sera vidée et on va copier toutes les données de la base source.

Si la base de donnée est volumineuse, cette stratégie ne s’applique plus : il est bien plus efficace de ne copier que les nouvelles données.

Dans mon exemple, les données sont horodatés : Nous allons donc récupérer la dernière date des données dans la base cible, et ne copie que les nouvelles données depuis cette date de la base cible.

Dans notre pipeline, on va utiliser l’outil « General » / « Lookup » :

Cet outil permet de créer des requêtes SQL : Dans l’onglet « Settings », on va choisir la source de données cible / destination et définir la requête. On veut récupérer la date des données la plus récente de la base cible :

select max(date) as mm from ms.data

Utilisez le bouton « Preview Data » pour valider la requête SQL.

Ensuite depuis la sortie du bloc « Lookup » on va relier le bloc de copie des données ce qui nous permet d’utiliser le résultat de la requête pour filtrer les données :

Dans le bloc « Copy data », on va donc filtrer les données source. Dans l’onglet « Source », au lieu de récupérer toutes les données on va récupérer uniquement les données plus récentes que la date renvoyée par le bloc « Lookup » :

select * from data where date > ‘@{activity(‘Lookup1′).output.firstRow.mm}’

Utilisez le bouton « Preview data » pour valider la requête.

Ensuite il suffit de planifier un trigger pour copier les données à intervalle régulier.

0