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

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.

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

Composant Résumé
Plateforme de l’ATIR Cette plateforme propose une interface Web permettant au participant d’accéder à ses ressources.
Reconnaissance des données Cet é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 sensibles Sert à 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 nuage Des 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ées Ce 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

Avant le déploiement

L’outil Apption (A-DAT) se trouve dans le dépôt public Apption sur Docker Hub. On s’en servira dans Morpheus pour déployer la solution. Aucune autre configuration dans Morpheus n’est requise pour accéder à l’image Docker.

1re étape : création d’un hôte Docker

Pour lancer une image Docker, vous devrez d’abord créer au moins un hôte Docker. Pour cela, allez dans Infrastructure -> Hôtes et sélectionnez (voir la figure ci-dessous).

Écran n°2 : configuration de l’hôte

Les champs suivants sont obligatoires :

  • Nuage – sélectionnez le service en nuage où résidera l’hôte, à savoir Azure-Canada
  • Nom – donnez un nom à votre hôte Docker (par ex., MSFTdockerHost)
  • Cliquez « Next ».

 

Écran n° 3 : configuration du nœud

Nous préconisons au moins deux cœurs de 4 Go et une mémoire vive (RAM) de sept à huit gigaoctets pour SQL Server et Apption.

Les champs que voici sont obligatoires :

  • Image Type – sélectionnez l’image par défaut
  • Groupes de sécurité – sélectionnez le groupe de sécurité par défaut
  • Availability Set – sélectionnez « No Availability Set » (superflu)
  • Plan – sélectionnez au moins « Basic A3 – 4 Core, 7GB Memory »
  • Resource Pool – sélectionnez le bassin de ressources par défaut
  • Volumes (data) – 80 Go
  • Réseau – sélectionnez le réseau par défaut
  • Public IP – sélectionnez « Assign Public IP » (EIP)

Pour les écrans qui suivent, vous pouvez garder les paramètres par défaut et cliquer « Complete » sur l’écran « Review ». Cette étape terminée, l’hôte Docker a été créé sur Morpheus et vous devriez bientôt voir une icône verte dans la colonne « Statut ».

Hôtes AWS

La création d’un hôte AWS avec Docker est presque identique à la création d’un hôte Azure. Choisissez simplement AWS-Canada au lieu d’Azure-Canada comme nuage.

2e étape (facultative) : configuration de SQL Server sur Morpheus

Vous pouvez utiliser SQL Server de Microsoft sur Linux comme cible pour l’outil Apption (lire déployer SQL Server sur Linux avec Docker pour en savoir plus)

Nom de l’image mcr.microsoft.com/mssql/server
Version de l’image 2019-CTP2.3-ubuntu
Port du réseau 1433 (tcp)

L’image de SQL Server se trouve sur Docker Hub. Aucune configuration supplémentaire n’est requise pour les dépôts de données. Les écrans ci-dessous présument qu’on a déjà créé un hôte Docker.

Vous devez configurer deux variables environnementales dans Docker.

Nom Valeur Description
ACCEPT_EULA Y Indispensable. Confirme que vous acceptez l’entente d’utilisation. Sans cela, l’instance ne démarrera pas.
SA_PASSWORD docker123 Mot de passe de l’administrateur SA de SQL Server

1er écran : création d’une instance SQL Server sur Docker

Suivre le cheminement Provisionnement -> Instances -> Ajouter. Dans la boîte de dialogue suivante, sélectionnez « Docker » comme type d’instance et cliquez « Prochain ».

Vous devez remplir les champs que voici pour créer l’instance SQL Server sur Docker :

  • Group – sélectionnez « Azure-Canada » (ou AWS-Canada))
  • Cloud – sélectionnez « Azure » (ou AWS-Canada)
  • Name – donnez un nom quelconque à l’e instance
  • Environment Tag – sélectionnez une entrée dans la liste (Staging, Production, etc.)

Cliquez Prochain pour configurer l’instance Docker (voir la figure ci-dessous).

 

2e écran : configuration de l’instance

Vous devez remplir tous les champs qui suivent.

  • Layout – sélectionnez Single Container
  • Plan – sélectionnez au minimum 4GB Memory, 40GB Storage
  • Volumes – 40Go
  • Docker Image – indiquez l’emplacement de l’image SQL Server sur Docker : mcr.microsoft.com/mssql/server
  • Image Version – Enter the image version of the Docker image: 2017-latest-ubuntu
  • Docker Hub Registry – sélectionnez Docker Hub (Public)
  • Log Volume (valeur par défaut)
  • Config Volume (valeur par défaut)
  • Data Volume (valeur par défaut)
  • Expose ports section – permet essentiellement aux autres applications d’accéder au serveur – pour SQL, ouvrir tcp port 1433
  • Environment Variables (voir plus bas) – saisir ce qui suit :
      • ACCEPT_EULA en attribuant la valeur Y
      • SA_PASSWORD avec un mot de passe quelconque pour votre SQL Server

Une fois SQL Server déployé, vous pourrez tester la connexion avec SQL Server Management Studio (SSMS). Téléchargez SSMS ici.

Le nom du serveur doit respecter la convention ,. Utilisez l’adresse IP publique et le port mentionné sur l’écran Instances Summary (à savoir, 13.88.255.160:10000 ci-dessus). 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.

Connection Paramètres de 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 et sélectionnez New Database.

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

Déploiement d’Apption dans le nuage de l’ATIR

Bien qu’elle en fasse beaucoup en arrière-plan, un de nos objectifs était de rendre l’application aussi simple et intuitive que possible à l’avant-plan. Aucune configuration n’est donc requise après installation et exécution. L’utilisateur doit simplement connaître l’emplacement de ses fichiers de données et le chemin pour se connecter à sa base de données.

Une fois que l’hôte Docker a été créé, la production d’une instance Docker est un jeu d’enfant.

Les précisions qui suivent serviront à configurer et à déployer l’application Apption en conteneur.

Image Docker : apption/adat-os

Version de l’image : latest

Port ouvert : 8000 (accès par l’interface Web)

1er écran : création de l’instance Docker

Suivre Provisionnement  Instances  Ajouter. Dans la boîte de dialogue suivante, choisir « Docker » comme type d’instance, puis cliquer « Prochain ».

2e écran : configuration de l’image Docker et des ports (avec les précisions fournies plus haut)

La démarche est similaire à la configuration de SQL. Vous devez remplir tous les champs.

  • Layout – sélectionnez Single Container
  • Plan – choisissez au moins 1GB Memory, 10GB Storage>
  • Volumes – ‘10GB’
  • Docker Image – utilisez l’image d’Apption apption/adat-os
  • Image Version – latest
  • Docker Hub Registry – sélectionnez Docker Hub (public)
  • Log Volume (valeur par défaut)
  • Config Volume (valeur par défaut)
  • Data Volume (valeur par défaut)
  • Expose Ports Section – vous devez ouvrir le port http Port 8000 pour que l’application fonctionne

3e écran : attendez l’icône verte dans la colonne Statut.

Pour tester l’interface Web, cliquez l’hyperlien HTTP de l’instance pour ouvrir une nouvelle fenêtre de navigation pointant vers l’hôte et le port de l’image Docker.

Lisez Aperçu de la solution pour des explications sur l’interface utilisateur et les quatre étapes à suivre.

Attention : Pour accéder à l’application Web A-DAT, vous devez placer l’adresse IP externe de la machine dans le groupe de sécurité Azure. Sans cela, la connexion ne s’établira pas. [L’écran sera ajouté après la mise à jour de Morpheus v3.6.4]

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. 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.

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’hôte Docker et le(s) conteneur(s) que vous avez créé(s). Il est possible de le faire en une étape. Sous Infrastructure à Hôtes, cliquez le nom de l’hôte à supprimer puis le bouton « Delete ». La boîte de dialogue ci-dessous apparaîtra à l’écran, cochez les trois options, inscrivez « DELETE » dans le champ, en bas, puis cliquez le bouton « DELETE ». L’hôte Docker et les instances qui s’y rattachent seront supprimés peu après.

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)

Exemple : pour créer un identificateur d’argent (MoneyRecognizer), ajoutez « Argent » à la liste DataType.

  1. Ajoutez « RegisterRecognizer(“XXX”, DataType.XXX); » à la fonction RegisterRecognizers() (RecognizerTools.SecondPass.cs), où XXX correspond au nom créé pour DataType.

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.