Solution type : Outil d’évaluation des données Apption

Si ce n’est déjà fait, lisez le Plan de vol du Propulseur Apption, Outil d’évaluation des données Apption, avant de tester la solution type.

Introduction

L’outil d’évaluation des données Apption (A-DAT) est un projet de source ouverte proposant une solution pour ce qui suit :

  • amorcer les projets à base de données scientifiques et identifier une trentaine de types de données;
  • charger des fichiers CSV dans n’importe quelle base de données en nuage (ou locale) sur SQL Server;
  • produire une structure optimale pour les données;
  • résumer les champs de données et fournir des chiffres sur la qualité de ces dernières.

Normalement, pour accomplir ces tâches, l’utilisateur investirait dans des solutions onéreuses aux multiples fonctions qui assureront une conversion étroite des données. La Solution type analyse les données en détail et propose une structure assortie de tableaux et de graphiques instructifs pour chaque champ de données. L’utilisateur peut adapter et contrôler le schéma définitif de la base de données. Ensuite, il suffit de transférer les données du fichier à la base en nuage.

Bien que nombreux, les outils ETL qui résolvent ce problème exigent parfois passablement d’efforts lors de la création des jeux de données, même pour les fichiers rudimentaires, si bien qu’il finit par y avoir engorgement, autant pour les projets scientifiques que pour l’exploration des données.

La Solution type réduit le flux de tâches au maximum, sans qu’il y ait conversion de données, puis charge le fichier non structuré dans le nuage en quelques étapes simples, sans aucun développement.

Solution type

Aperçu

Principales caractéristiques

La solution peut être séparée en quatre :

  1. Connexion. La première interaction avec l’outil permet à l’utilisateur d’établir les paramètres qui détermineront comment l’application effectue l’analyse (nom et format du fichier qui contient les données, chaînes de connexion avec la base de données).
  2. Analyse. Durant la première phase de l’analyse, l’application examine les données pour en brosser un tableau général et affiche les résultats (clés principales, types fondamentaux, complétude des données, autres statistiques).
  3. Classification. Cette étape consiste en une analyse approfondie de chaque champ avec répartition des données en divers types. Il suffit alors à l’utilisateur de vérifier quels champs il faut ajouter à la structure. L’affichage des données sensibles et de graphiques illustrant comment les données sont distribuées dans les champs l’aide aussi à déterminer s’il faut accepter ou pas les types de données que suggère l’application.
  4. Chargement. Avec cette dernière étape, l’application présente le schéma qui servira d’architecture à la base de données. Si celui-ci lui convient, l’utilisateur autorise la migration des données du fichier non hiérarchique à la base de données.

Architecture du système

ComposantRésumé
Plateforme de l’ATIRCette plateforme propose une interface Web permettant au participant d’accéder à ses ressources.
Reconnaissance des donnéesCet élément se concentre sur l’analyse du fichier, une colonne à la fois, et attribue les métadonnées appropriées à chaque colonne. Il reconnaît les principaux types de données SQL (varchar, int, float, etc.).
Détection des données sensiblesSert à marquer les données sensibles éventuellement présentes dans le fichier (nom, adresse, etc.).
Interface Web et Electron La solution peut être exécutée dans une architecture Electron en tant qu’application de l’ordinateur ou dans le nuage grâce à un portail Web ordinaire.
Chargement des données dans le nuageDes interfaces optimisées pour la migration des données téléverseront ces dernières du fichier non structuré à la base de données en nuage.
Rapport sur les donnéesCe rapport présente les résultats de l’analyse et de la détection des données sensibles.

Déploiement

Le déploiement de la Solution type se fait en deux étapes.

  1. Créer un hôte Docker dans l’ATIR
  2. Déployer Apption (A-DAT) avec Morpheus
  3. Étape facultative : déployer une instance de SQL Server

Déploiement

L’outil Apption (A-DAT) se trouve dans le dépôt public Apption sur Docker Hub. On s’en servira pour déployer la Solution type sur la plateforme AWS avec la console CloudFormation. Le script CloudFormation déploiera l’outil Apption (A-DAT) et une instance du serveur SQL sous la forme d’applications en contenant Docker.

Les explications qui suivent concernent la configuration et le déploiement de l’outil d’évaluation des données Apption placé dans le contenant Docker.

Le nom du serveur doit respecter la convention <IP>,<port>. Utilisez l’adresse IP publique et le port mentionné par défaut (à savoir, 3.99.61.180,1433).

Vous aurez besoin d’un compte de l’ATIR pour déployer le Propulseur d’Apption sur la plateforme en nuage. L’application est déployée sur une instance Linux d’AWS.

De la page du Catalogue de Propulseurs, allez à la partie « Outil d’évaluation des données » d’Apption et cliquez DÉPLOYER pour lancer celle-ci avec une pile de la console CloudFormation d’AWS.

Cela fait, cliquez Suivant pour passer à la deuxième étape et remplissez le formulaire de configuration. Dans le champ InstanceName, donnez un nom unique à l’instance de votre serveur d’application, puis complétez le formulaire avec les menus déroulants. Veuillez noter que certains paramètres comme « ApplicationImage » et « InstanceType » sont déjà configurés et ne peuvent être modifiés.

Cliquez SUIVANT pour passer à la troisième étape. Cette partie concerne la configuration d’options avancées ou supplémentaires, inutiles dans le cas qui nous intéresse. Cliquez simplement Suivant au bas de la page pour sauter cette étape et passer à la quatrième et dernière de CloudFormation.

La dernière partie vous permet de vérifier la configuration actuelle du Propulseur et d’y apporter des modifications avec le bouton Modifier, si vous le désirez. Une fois que la configuration vous convient, cliquez Soumettre, au bas de la page, pour déployer le Propulseur.

Le déploiement commence par la création d’une nouvelle instance. Le reste est automatique. Suivre le développement de l’instance AWS n’est possible qu’avec les onglets Événements et Ressources de la console CloudFormation. Pour vérifier l’avancement du déploiement, vous devrez donc vous connecter au serveur de l’application.

Remarque : notez l’adresse IP qui apparaît sur l’onglet Sorties de la console CloudFormation du Propulseur. Il s’agit de l’adresse IP externe de l’instance qui vient d’être créée. Vous en aurez besoin pour accéder à l’interface web de l’application.

L’usage de la base de données sur le serveur SQL est facultatif. Pour importer des données de l’application web et les verser dans la base de données SQL, vous devrez d’abord vérifier la connexion au serveur qui a été installé avec SQL Server Management Studio (SSMS), que vous pouvez télécharger ici.

Le nom du serveur doit respecter la formulation <IP>,<port>, IP correspondant à l’adresse IP publique et port au port par défaut (3.99.61.180,1433)

Remarque : SQL Server Management Studio de Microsoft utilise la virgule « , », pas le deux-points « : » pour séparer l’adresse IP et le numéro du port dans le nom du serveur que vous saisirez dans le champ ci-dessous.

Paramètres pour la connexion à SQL Server Management Studio

Après vous être connecté au serveur de la base de données, créez une base de données d’essai dans laquelle l’application pourra charger les données. Pour cela, cliquez Databases avec le bouton droit de la souris et sélectionnez New Database.

Suivre les instructions de l’assistant pour terminer la configuration de la base de données.

Pour utiliser l’application A-DAT, ouvrir une nouvelle fenêtre dans le navigateur et utiliser l’adresse IP publique avec le port par défaut 8000 (http://3.99.61.180:8000) de façon à afficher l’image Docker.

Attention : Pour accéder à l’application A-DAT, vous devrez indiquer l’adresse IP externe de la machine dans le groupe de sécurité par défaut d’AWS, faute de quoi, la connexion sera refusée.

Si vous songez utiliser la base de données avec le serveur SQL, la connexion doit être formatée comme suit :

Server=172.31.34.76;Initial Catalog=Apption;Uid=sa;Pwd=Welcome2Adat!

Où :

  • l’adresse IP du serveur correspond à l’adresse IP interne (pas l’adresse IP publique);
  • « Initial Catalog » correspond au nom que vous avez attribué à la base de données créée avec SSMS;
  • Uid et Pwd sont les valeurs par défaut (sa et Welcome2Adat!) engendrées automatiquement lors du déploiement du Propulseur.

Pour connaître l’adresse IP privée, cherchez la page récapitulant l’instance EC2 dans AWS.

Travailler avec le code source

La section que voici explique comment configurer l’environnement de développement pour tester le code de l’application, le modifier et déployer la nouvelle version afin d’en vérifier les résultats. Pour travailler avec le code source, vous devrez l’extraire du dépôt de CANARIE (Gogs) et le lancer dans Visual Studio 2019 (environnement de développement interactif ou IDE). L’IDE vous donnera accès aux options suivantes pour l’exécution :

  • exécution de l’application sur le Web local
  • exécution autonome sur Electron

TPour lancer l’application Web (voir l’écran ci-dessous), enfoncez le bouton de lecture vert.

Prérequis

Vous devrez d’abord installer ce qui suit.

1.    Visual Studio 2019 de Microsoft

2.   .NET Core 3 Tools – disponible sur https://dotnet.microsoft.com/download/dotnet-core/

3.   Version la plus récente du module Blazor Language Services, disponible sur Visual Studio Marketplace à l’adresse : https://marketplace.visualstudio.com/items?itemName=aspnet.blazor

4.   Docker for Developers, disponible à l’adresse https://www.docker.com/get-started

5.   PowerShell de Microsoft

Les quatre premiers logiciels sont essentiels pour bâtir l’application Apption dans Visual Studio.

Les deux derniers permettent de transférer les données binaires d’Apption à l’image Docker dans laquelle elles seront distribuées.

Créer une image Docker

Cette étape suppose que les fichiers source d’Apption ont déjà été clonés localement et qu’il est possible d’ouvrir la solution pour la modifier dans Visual Studio. Les prérequis 1 à 4 doivent aussi avoir été remplis.

L’environnement .Net Core et le module Blazor autorisent le lancement d’une tâche exécutable Windows sur un hôte Linux. Il est donc possible de bâtir une image Docker sur le système d’exploitation par défaut Linux.

L’image Docker que nous créerons en est une fournie par Microsoft dans laquelle .Net Core et Blazor ont été installés à l’avance. Il suffira d’y ajouter les bibliothèques et les tâches exécutables supplémentaires. En résultera une image Docker que n’importe quel client Docker pourra extraire et utiliser.

Publication ou construction locale de l’outil Apption

  1. Cliquez à droite sur le projet « WebAppMaterialize.Server » dans Solution Explorer, puis cliquez « Open Folder in File Explorer» pour ouvrir l’explorateur de fichiers.
  2. Descendez les répertoires « bin », « Debug » et « netcoreapp2.1 ». Vous découvrirez une série de fichiers .dll, .json et .config, ainsi qu’un fichier baptisé « Dockerfile », sans extension.
  3. Cliquez l’espace qui suit immédiatement le chemin du répertoire, presque au sommet de l’explorateur de fichiers et enfoncez Ctrl-C pour copier le chemin dans le presse-papiers.
  4. Revenez à Visual Studio et cliquez à droite sur le projet « WebAppMaterialize.Server » dans Solution Explorer, puis cliquez « Publish…».
  5. Sélectionnez « FolderProfile» et cliquez l’hyperlien « Configure… ».
  6. Cliquez la boîte « Target location» et collez-y le chemin du répertoire en enfonçant Ctrl-V.
  7. Ajoutez « /publish » (sans guillemets) à la fin du chemin et enfoncez le bouton « Save».

Une fois le processus achevé, retournez à l’explorateur de fichiers. Vous devriez voir un nouveau répertoire baptisé « publish » renfermant une cinquantaine de fichiers et trois sous-répertoires. Ceci termine l’étape de la publication ou de la construction locale.

Création d’une image Docker

Avec cette étape, vous créerez une image Docker à partir du répertoire « publish ». L’image utilise les commandes du client Docker dans l’environnement PowerShell.

  1. Lancez PowerShell à partir du menu Démarrer de Windows.
  2. Confirmez que Docker a été installé correctement en actionnant la commande « docker version ». Si l’installation s’est bien déroulée, vous verrez un rapport sur la configuration du Client et du Serveur.
  3. Saisissez « cd “ » (cd suivi d’un guillemet anglais), puis cliquez à droite pour coller ce que vous avez copié dans le répertoire créé à l’étape précédente. Vous devrez peut-être retourner dans l’explorateur de fichiers si le chemin copié précédemment ne figure plus dans la mémoire tampon.
  4. Ajoutez les guillemets anglais de fermeture (« ” ») puis enfoncez la touche « entrée ».
  5. Saisissez la commande « ls ». Assurez-vous que le fichier « Dockerfile » (sans extension) figure bien dans la liste.
  6. Saisissez la commande « docker build -t webappmaterialize . » (n’oubliez pas l’espace suivi d’un point).
  7. Docker extraira une image Docker de Microsoft et copiera les commandes exécutables du répertoire « publish » pour en créer une nouvelle.
  8. Saisissez la commande « docker images ».

La dernière commande devrait produire ce qui suit.

Une fois créée, l’image Docker peut être déployée et lancée à partir de n’importe quel client Docker (sur votre machine de développement locale ou dans l’hôte Docker de l’ATIR). Pour lancer l’image Docker que vous venez de bâtir, utilisez la commande que voici :

‘docker run -p 8000:80 --rm -it webappmaterialize’

Vous obtiendrez ceci :

Hosting environment: Production

Content root path: /App

Now listening on: http://[::]:

Application started. Press Ctrl+C to shut down.

Vous pouvez maintenant utiliser l’application Apption (A-DAT) à partir du navigateur situé à l’URL « localhost:8000 ».

Pour stopper le processus, utilisez Ctrl-C.

Guide d’utilisation

Une fois déployée, vous pourrez accéder à l’application en saisissant son URL dans un navigateur. La page d’accueil d’Apption (A-DAT) ci-dessous s’affichera à l’écran.

1re étape : se connecter

Ceci est la page d’accueil de l’application. Vous y saisirez l’information sur le fichier contenant les données et sur la base de données de destination. Le bouton « Start Analysis » ne sera activé qu’après migration complète du fichier de données. Vous devrez indiquer quel séparateur utiliser dans le fichier et préciser si ce dernier renferme des en-têtes.

La base de données de destination n’est pas obligatoire, mais vous devez la spécifier si vous voulez y migrer les données du fichier. Indiquez l’adresse IP de la base de données interne dans la chaîne « Target » puisque la connexion s’établit à l’intérieur du nuage. Vous trouverez l’adresse de la base de données interne sur l’écran « Instance Summary », en sélectionnant l’onglet « Network » comme le montre l’image ci-dessous.

Si vous le préférez, vous pouvez aussi analyser les données sans les charger dans la base de données.

Si vous le préférez, vous pouvez aussi analyser les données sans les charger dans la base de données.

Après avoir saisi les informations requises, cliquez le bouton « Start Analysis » pour lancer l’analyse. La page qui suit illustre ce qui s’affiche à l’écran une fois l’opération terminée.

2étape : analyser les données

L’écran « Analysis » affiche les résultats de l’analyse préliminaire des données. Les champs apparaissent tous du côté gauche. À droite figurent les précisions sur le champ sélectionné. Vous y verrez notamment son nom, le type de donnée (chaîne ou chiffre) et le genre de stockage possible. Les statistiques et un échantillon des données s’affichent complètement à droite, ce qui permet d’établir si les données sont uniques ou pas. L’analyse préliminaire engendre une structure rudimentaire que vous pouvez néanmoins retenir. Certains utilisateurs préfèrent classer les champs de façon plus précise. Si c’est votre cas, passer à l’étape suivante en cliquant le bouton « Classify Fields » (invisible sur l’illustration), à la fin de la liste des champs, à gauche. Après classification, ce qui suit devrait apparaître sur l’écran.

3étape : classifier les données

La liste à gauche propose une interprétation plus détaillée du champ. L’application détermine la nature spécifique des données dans chacun et indique à l’utilisateur si le champ contient ou pas des données sensibles en affichant l’icône correspondante dans la colonne « Sensitive ». La liste déroulante « Data Type » énumère toutes les sortes de données en fonction de leur probabilité. D’autres statistiques s’ajoutent à celles qui précèdent sous forme de graphique, ce qui permet de voir les données contenues dans chaque champ. En parcourant la liste, vous verrez aussi un histogramme signalant le degré de probabilité des données (ici, celui du champ FirstName).

À ce point, vous pourrez apporter divers ajustements au champ ou au fichier, par exemple :

  • modifier le nom de tableau dans la base de données;
  • sélectionner les champs à importer;
  • modifier le nom des champs;
  • changer le type de données, s’il y a lieu;
  • changer le type de stockage (servant à la production du schéma);
  • basculer les principaux paramètres des champs uniques;
  • établir si un champ peut avoir une valeur nulle.

Une fois les modifications terminées, cliquez le bouton « View Schema » pour passer à la dernière partie du processus, la migration des données.

4e étape : charger les données

Clôture

Après avoir franchi ces étapes et téléversé les données dans la base de données, vous pouvez arrêter l’application en fermant simplement l’onglet du navigateur. Pour libérer les ressources dans l’ATIR, vous devrez supprimer l’instance Pile et le(s) conteneur(s) que vous avez créé(s). Il est possible de le faire en une étape. Retournez à la page Piles de la console Cloudformation d’AWS, sélectionnez la pile à supprimer et cliquez « Supprimer ».

Considérations

Architecture des données

La solution est autonome et une base de données SQL Server suffit pour la migration des données. L’application génère la structure de la base de données, sans lien avec une autre base.

Sécurité et réseau

La solution s’appuie sur les mesures de sécurité éprouvées de .Net Core (ASP.NET Core, Blazor). Les autres considérations dépendent de la manière dont le réseau est configuré et déployé. Un seul port d’entrée suffit pour accéder à l’application avec le protocole HTTPS. Nous préconisons d’établir la base de données de destination sur un réseau privé afin de restreindre le nombre de ports ouverts dans le pare-feu.

On configurera les paramètres du pare-feu du serveur de l’application de manière à autoriser la connexion avec les serveurs de la base de données. Pour effectuer des essais, si SQL Server et l’application se trouvent dans des conteneurs Docker distincts, il conviendrait d’ouvrir les ports 80 et 1433 afin qu’ils communiquent entre eux.

Mise à l’échelle

La solution est conçue pour utiliser de nombreux cœurs et exploiter efficacement les UCT afin d’équilibrer la charge de travail. Plus le fichier est petit, plus il sera traité et chargé rapidement. Les données sont téléversées en vrac dans la base pour une insertion optimale. Néanmoins, il est possible de modifier cette méthode dans le code afin d’autoriser une insertion normale et accommoder des bases de données configurées autrement.

Disponibilité

L’application utilise une infrastructure Web standard et acceptera des pare-feu et répartiteurs de charge ce qui en accroîtra la disponibilité grâce à des serveurs multiples.

Interface utilisateur (IU)

L’interface utilisateur a été bâtie avec Materialize (https://materializecss.com). Pour la modifier, il faudrait donc recourir à ce logiciel. L’adjonction d’autres interfaces de conception ouvertes comme Bootstrap est une possibilité, mais la chose pourrait s’avérer difficile car l’application suit d’autres normes CSS.

API

L’efficacité de l’application réside dans sa capacité d’analyser les champs et d’établir la nature des données qui s’y trouvent. Pour l’instant, la solution regroupe 30 identificateurs de données.

Pour augmenter le nombre d’identificateurs, ajoutez une nouvelle classe au projet d’identification (RecognizerTools) en procédant comme suit.

  1. Copiez et collez TemplateRecognizer.cs et lui donnant le nom que vous désirez.
  2. Ouvrez le nouvel identificateur et remplacez les attributs (StorageTypes) par ceux du type de stockage envisagé, puis modifiez la valeur de retour dans la fonction GetDescription() avec le nom de l’identificateur.
  3. Adaptez les interfaces d’après les caractéristiques du nouvel identificateur.
    1. Interface de base : INumberRecognizer, ILetterRecognizer, ILetterWithNumberRecognizer
    2. Interface de longueur : IShortStringRecognizer (0,4], IMediumStringRecognizer (4,11), ILongStringRecognizer [11,…)
    3. Interface de sensibilité : ISensitiveRecognizer
    4. Vous devez choisir une des interfaces de base et une ou plusieurs interfaces de longueur. Utilisez l’interface de sensibilité selon la nature de l’identificateur.
  4. Appliquez l’algorithme correspondant dans la fonction ValidateData().
  5. (Facultatif) – Adaptez le graphique des données en modifiant la fonction GetStatus() et en remplaçant la méthode de collecte des données par la vôtre dans la fonction IncrementStats().
    1. Examinez MoneyRecognizer.cs pour en savoir plus.
    2. C’est la longueur des données qui est déterminée par défaut.
  6. Ajoutez le nouveau DataType à la liste (DataTools.ColumnMetadata.cs)

Coût

Dans un environnement de développement, la solution devrait coûter environ 100 $ par mois, si la base de données et le serveur Web sont hébergés sur une grande image EC2 T2 et fonctionnent en permanence.

Dans un environnement de production, on devra ajouter d’autres nœuds et équilibrer la charge. Chaque nœud supplémentaire (petit EC2 T2) devrait coûter environ 20 $ par mois.

Licence d’exploitation

The license of the project is The Mozilla Public License v2. All the dependent libraries from Nuget are under compatible licenses.

Code source

Vous trouverez le code source dans le dépôt DAIR GOGS. Il est assorti de la licence Mozilla Public License V2.