Récits et astuces des tranchées : Transformation agile des données à l’aide de MDOX

COL03x - feature image oneil already 300x300Qu’est-ce que l’agilité ? Je la définirais comme la capacité à se déplacer rapidement, de manière fluide et efficace dans n’importe quelle direction. Dans la transformation des données, l’information se déplace à travers un processus consistant en une séquence d’opérations. Idéalement, les processus devraient être réversibles, garantissant ainsi qu’aucune information n’est perdue.

En modélisant les opérations de transformation de manière générique dans une table , MDOX permet la création de transformations de données agiles qui peuvent être facilement exécutées, inversées, révisées et répétées, ou supprimées.

Dans notre article précédent, Introducing MDOX, nous nous sommes concentrés sur les objets de métadonnées (MDO) en tant que modèle de données universel qui stocke les informations sous forme d’objets : des collections hiérarchiquement structurées d’éléments de données et d’attributs, liées à une hiérarchie de termes de métadonnées avec des propriétés facultatives. Dans cet article, nous allons nous concentrer sur les Processus qui mettent en œuvre des transformations de données agiles, mettant ainsi le “X” dans MDOX.

Le tableau 5 de l’article précédent, “Introducing MDOX” montre les principaux champs de la table :

Picture1

La table contient également plusieurs champs qui contrôlent la façon dont l’expression régulière optionnelle est appliquée aux éléments du terme parent, pour permettre l’analyse récursive des éléments enfants à partir du texte parent :

Picture2

Les correspondances pour l’expression régulière dans le champ sont temporairement stockées dans la table :

Picture3Chaque enregistrement dans la table définit une seule opération de transformation :

  1. Si le champ contient une expression régulière valide, alors cette expression est appliquée au texte long . pour tous les éléments liés au terme parent de . Les correspondances Regex sont temporairement stockées dans la table .
  2. Si le champ contient une instruction SQL valide, alors l’instruction est exécutée par l’application. Les requêtes Select et Transform sont soit affichées à l’écran, soit, si le processus est automatisé, exportées sous forme de feuilles de calcul dans le répertoire actuel de l’application. Les instructions d’insertion ajoutent de nouveaux enregistrements à une table ou à une vue actualisable. Les instructions de mise à jour ou de suppression affectent l’enregistrement sélectionné.

Notez que la présence d’une expression régulière ou d’une instruction SQL invalide entraîne l’échec d’un processus. Le développeur doit tester de manière répétée chaque opération jusqu’à ce que l’ensemble du processus s’exécute parfaitement.

Les opérations pour un terme donné sont exécutées dans l’ordre de . Si un terme a des termes enfants et que l’option “descend tree” est sélectionnée, alors les termes enfants sont traités dans l’ordre séquentiel. Ainsi, l’ordre global des opérations dans une transformation est déterminé à la fois par . et . Vous pouvez déplacer une opération précédemment développée vers un nouvel emplacement simplement en mettant à jour ces champs. En utilisant l’application MDOX, on peut facilement créer de nouveaux termes et opérations, ou mettre à jour le nom, la description et l’ordre de séquence des termes et opérations existants. Si un objet de données ou de méta-données est supprimé, les suppressions en cascade supprimeront tous les objets qui en descendent, par exemple les sous-termes, les propriétés, les processus, les éléments, les attributs et les correspondances regex. Ce comportement est bénéfique. L’illustration ci-dessous montre un terme nommé “test” ayant un terme enfant “regex” avec un processus qui rapporte les correspondances regex trouvées dans les éléments “test”. Plus tard, le terme “test” peut être supprimé, et tous les objets subsidiaires disparaîtront de la base de données.

Exemple 1 : Opération de transformation créant un rapport de tableau croisé à partir de correspondances regex

Picture4 La regex “(\d+)\.\s(\w+)” contient 2 sous-expressions, entre parenthèses. La première sous-expression (\d+) correspond à un ou plusieurs chiffres. La seconde (w+) correspond à une ou plusieurs lettres. Entre ces sous-expressions, l’expression ” \.\s” correspond à un point suivi d’un caractère d’espacement. Dans cet exemple, MDOX recherche le regex, “(\d+)\.\s(\w+)” dans les éléments du terme parent, “test”:

Picture5

Les correspondances du regex sont stockées dans le tableau où

  • = 0 => la correspondance complète du regex, par ex.p. ex. “10. foo”
  • = 1 => la 1ère correspondance de sous-expression, p. ex. “10”
  • = 2 => la 2e correspondance de sous-expression, par exemple “bar”

Picture6

Après la collecte des correspondances regex, une autre opération compile et exécute ce texte SQL:

TRANSFORM First(.value) AS FirstOfvalue
SELECT Element.elem_id, Element.elem_value, .nmatch
FROM Element INNER JOIN _regexp ON Element.elem_id = .rid
GROUP BY Element.elem_id, Element.elem_value, .nmatch
PIVOT .nsub;

Le jeu d’enregistrements résultant est affiché ou exporté vers “Test_regex.csv”:

Picture7

Exemple 2 : Opération de transformation créant un catalogue d’objets de système de fichiers

La vue actualisable est définie comme suit :

SELECT Elements.*, Attributes.attr_name, Attributes.attr_value, Attributes.elem_id AS attr_id
FROM Elements LEFT JOIN Attributes ON Elements.elem_id = Attributes.elem_id;

L’instruction suivante insère un nouvel élément ainsi qu’un attribut associé dans :

INSERT INTO attributes ( elem_id, attr_name, attr_value )
SELECT GetFileSystem(GetFolderDialog("Select root folder for files"),".*"
,True,True) AS elem_id, "insertDateTime" AS attr_name, Now() AS attr_value;

Cette opération utilise l’instruction ci-dessus pour créer un catalogue d’un système de fichiers :

Picture8

Le catalogue créé est une hiérarchie d’éléments avec des attributs de système de fichiers, par ex.g.

Picture9

Une opération ultérieure peut signaler les fichiers sélectionnés par le biais d’une vue basée sur les éléments et les attributs, par exemple

Picture10

Comme indiqué ci-dessus, la fonction GetFileSystem() peut extraire le texte du fichier et le stocker dans ., avec ou sans remplacement des caractères spéciaux par leurs équivalents ASCII les plus proches. Cette option est utile pour l’analyse regex des fichiers avec un contenu texte, par exemple les filetypes txt, sql, doc, ppt, pdf, html, etc.

Des fonctions similaires GetData() importent d’autres types de données dans le schéma de la base de données MDOX. Par exemple, GetSheets() importe les données tabulaires des feuilles de calcul Excel et des documents Word. GetWordDoc() importe le contenu textuel de tout format de document pouvant être ouvert par Microsoft Word, y compris PDF et PowerPoint. GetXml() importe des données structurées sous forme d’éléments avec des attributs associés à partir de formats de balisage textuels tels que les fichiers XML, XSD et WSDL. Les détails de mise en œuvre de ces méthodes d’importation de données seront décrits par le prochain article TDAN, Développement d’applications MDOX.

Après l’importation initiale de données sources dans MDOX à l’aide des méthodes GetData(), de nouveaux termes et processus peuvent être développés pour transformer davantage les données dans le format de sortie souhaité, qui peut être exporté ou chargé directement dans une table de base de données liée. Quelques exemples de transformations plus ou moins complexes seront décrits dans le dernier article de cette série, Techniques de transformation de données MDOX.

En résumé, MDOX permet une transformation agile des données en modélisant les données et les processus de manière générique. Il est ainsi possible de construire une application qui facilite le traitement des données dans un modèle de données statique. MDOX peut exécuter des transformations compliquées automatiquement, à travers un processus, construit d’opérations, qui peuvent être exécutées, inversées, révisées et répétées, ou supprimées si nécessaire.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.