XML vers Table
- Type de tâche : xml-to-table
La tâche XML vers Table permet de importer des données à partir d’un fichier XML avec une structure tabulaire et de les insérer dans une table d’une base de données. Sa fonction est double : elle se connecte à une base de données pour écrire physiquement les données et, en même temps, expose les données importées sous forme de Dataset pour être utilisé par d’autres tâches dans le Workflow (comme un Iterator). Cette tâche fonctionne sur un XML en entrée fourni par une tâche précédente (par exemple, Importer du texte).
1. Connexion à la base de données
Dans cette section, vous configurez tous les paramètres pour établir la connexion à la base de données de destination.
Table cible
Il est possible de définir l’origine des identifiants pour la connexion :
- Manuelle : permet d’entrer manuellement tous les données de la connexion et de la table dans les champs suivants.
- Environnement : permet d’utiliser un environnement de connexion préconfigurée. En sélectionnant l’un d’eux, les champs d’authentification sont remplis automatiquement.
Type de base de données
Sélectionnez le type de base de données (SGBD) auquel vous souhaitez vous connecter. Les options prises en charge incluent :
- PostgreSQL
- SQL Server
- MySQL
- Oracle DB (en utilisant Oracle, vous pouvez choisir entre SID et SERVICE)
- SAP HANA
Connexion SSL
Indiquez si la connexion à la base de données doit être établie via un canal sécurisé.
Authentification
| Champ | Description |
|---|---|
| Host | Adresse du serveur de base de données externe autorisé. |
| Port | Port utilisé pour la connexion au serveur de base de données externe. |
| Nom DB | Nom de la base de données à laquelle se connecter. |
| User | Nom d’utilisateur pour accéder à la base de données. |
| Mot de passe | Permet d’entrer le mot de passe de manière sécurisée. |
Gestion de la table
Définit comment la tâche doit interagir avec la table physique dans la base de données.
- Table cible : détermine l’action à effectuer sur la table :
- Créer table : crée toujours une nouvelle table. L’opération échoue si une table avec le même nom existe déjà.
- Créer table si non existe : crée une nouvelle table uniquement si une table avec le même nom n’existe pas déjà.
- Table existante : insère les données dans une table déjà présente. Par défaut, les nouveaux données sont ajoutés à ceux déjà présents (Append). En activant la case à cocher Truncate Insert, la table est vidée avant l’insertion des nouveaux données.
- Nom de la table cible : nom de la table à créer ou dans laquelle écrire les données (par exemple,
utenti,prodotti,log_eventi).
2. Structure tabellaire
La section Structure tabellaire permet de définir les champs (colonnes) de la table et de mapper chaque colonne avec les éléments du fichier XML d’origine.
Champs disponibles
Chaque ligne représente une colonne de la table. Pour chaque champ, il est possible de configurer :
| Champ | Description |
|---|---|
| Type | Type de données du champ. Valeurs disponibles : NUMERICO, STRINGA, DATA, DONNÉES ET HEURE |
| Précision | Pour NUMERICO : nombre maximal de chiffres ; pour STRINGA : longueur maximale |
| Alias | Nom réel de la colonne dans la table de la base de données. Ce sera le nom visible dans le DB. |
| Expression JSONPath | Expression JSONPath pour extraire la valeur du fichier XML d’origine (par exemple, $.persona.info.name) |
Gestion de la structure de la table
En bas à droite de la Structure tabellaire sont présents trois boutons :
| Bouton | Action |
|---|---|
| Enregistrer | Enregistre la structure définie |
| Importer | Importe une structure existante |
| Exporter | Exporte la structure définie |
Cette fonctionnalité permet de sauvegarder, exporter ou réutiliser les mappages, évitant la compilation manuelle des champs et réduisant le risque d'erreurs.
Note Technique
- Visibilité: Les structures sauvegardées dans le système sont visibles exclusivement par l'utilisateur qui les a créées.
- Approfondissement: Pour une description détaillée de toutes les options et de la logique de fonctionnement, faire référence à la page Structure de la table.
3. Exemple de configuration
Pour créer une table utenti avec les champs suivants :
| Type | Alias | Expression JSONPath |
|---|---|---|
| STRINGE | name | $.user.info.name |
| STRINGE | $.user.info.email | |
| NUMÉRIQUE | age | $.user.info.age |
| STRINGE | city | $.address.city |
| DATE | registration_date | $.registration.date |
| DATE ET HEURE | registration_datetime | $.registration.datetime |
Le résultat de cette configuration sera la création d'une table dans la base de données avec les colonnes name, email, age, city, registration_date et registration_datetime (Alias) poplées avec les valeurs extraites du XML (Expression JSONPath).
Alias avec caractères spéciaux ou majuscules
Si vous souhaitez utiliser des lettres majuscules, des caractères spéciaux ou des espaces dans les noms des colonnes, il est nécessaire de mettre l'Alias entre guillemets doubles (par exemple, "Nom Utilisateur").
| Type | Alias | Expression JSONPath |
|---|---|---|
| STRINGE | “Name” | $.name |
| STRINGE | “Surname” | $.surname |
Résultat dans la Base de Données
4. Gestion de Structures XML Ancrées
La tâche XML to Table est capable de gérer les fichiers XML qui contiennent des éléments imbriqués, c'est-à-dire une hiérarchie de données au sein du record principal. Au lieu de demander la création de tables séparées (normalisation), la tâche peut sérialiser l'ensemble du bloc de données imbriqué en une seule colonne de texte, typiquement au format JSON.
Exemple Pratique
Considérons le fichier XML d'entrée suivant, où chaque <person> possède une liste imbriquée de <departments> :
<people>
<person>
<name>Luca</name>
<surname>Rossi</surname>
<departments>
<department>Marketing</department>
<department>Sales</department>
</departments>
</person>
<person>
<name>Maria</name>
<surname>Bianchi</surname>
<departments>
<department>HR</department>
</departments>
</person>
...
</people>
L'objectif est de mapper chaque <person> à une ligne du tableau, en préservant la liste des départements associés à chaque personne.
Configuration dans la "Structure Tabellaire"
Pour obtenir ce résultat, la configuration dans l'onglet "Structure tabellaire" sera la suivante :
| Type | Précision | Alias | Expression JSONPath |
|---|---|---|---|
| String | 1000 | name | $.name |
| String | 1000 | surname | $.surname |
| String | 4000 | departments | $.departments |
Explication :
- Les colonnes name et surname sont mappées directement, car leurs valeurs sont des éléments simples (
<name>,<surname>). - Pour la colonne departments, l'Expression est définie sur departments. Cela indique à la tâche de ne pas rechercher une seule valeur, mais de prendre la contenu entier du tag
<departments>pour chaque personne. - La tâche convertit automatiquement ce fragment XML en son équivalent JSON avant de l'insérer dans la colonne de la base de données.
Résultat dans la Base de Données
En appliquant cette configuration, la tâche produira un tableau où la colonne departments contient une chaîne JSON qui représente la structure imbriquée originale. Cela permet de conserver toute l'information hiérarchique dans un seul champ de texte, prêt à être éventuellement analysé par d'autres outils ou tâches.
Extraction de sous-éléments avec JSONPath
Si, au contraire, on souhaitait extraire des éléments imbriqués individuels, comme par exemple les noms des départements, il est possible d'utiliser une Expression JSONPath spécifique. Par exemple :
| Type | Précision | Alias | Expression JSONPath |
|---|---|---|---|
| String | 1000 | name | $.name |
| String | 1000 | surname | $.surname |
| String | 1000 | department_names | $.departments.department[*].details.name |
Avec cette configuration, la tâche XML to Table sélectionne tous les valeurs name présentes dans l'array department et les insère dans la colonne department_names de la base de données, les séparant éventuellement par une virgule.
Résultat dans la Base de Données
| name | surname | department_names |
|---|---|---|
| Luca | Rossi | Marketing, Sales |
| Maria | Bianchi | HR |
Cette approche permet d'extraire uniquement les données nécessaires, sans sérialiser l'ensemble du bloc JSON, rendant le tableau plus facilement interrogable et utilisable dans d'autres tâches ou rapports.
5. Paramètres de Sortie
Une fois que la tâche XML to Table a terminé son traitement, elle expose un ensemble riche de paramètres de sortie. Ces paramètres ne fournissent pas seulement des informations sur le résultat de l'opération, mais mettent également à disposition les données traitées dans divers formats pour les tâches suivantes.
- result: Fournit l'état global de l'exécution de la tâche (par exemple, "Success" ou un message d'erreur).
- targetTable: Indique le nom de la table de la base de données dans laquelle les données ont été insérées.
- rowCount: Indique le nombre total de lignes qui ont été insérées dans la table de destination.
- DataExportCsv: Fournit l'ensemble de données traité au format texte dans le format CSV (Comma-Separated Values).
- DataExportJson: Fournit l'ensemble de données traité au format chaîne JSON.
- Dataset: Ce paramètre représente le nom de la colonne de la table (par exemple : name). Il s'agit du paramètre le plus important pour connecter cette tâche à un Itérateur. Pour accéder aux valeurs d'une colonne spécifique lors d'une itération, utilisez la syntaxe Dataset.NomColonne.
- DataColumn: Ce paramètre permet d'accéder à l'ensemble du contenu d'une colonne en tant qu'entité unique (par exemple, un tableau ou une liste).
- DataColumn.NomColonne: Renvoie toutes les valeurs de la colonne “NomColonne”. Par exemple : “Luca, Maria, Giovanni, Elena”
- resultJson: représente le résultat de l’exécution de la tâche en format JSON, incluant des informations générales, des configurations et des détails sur l’exécution.
6. Exemple paramètre resultJson
{
"run_info": {
"status": "Completed",
"run_result": "Success"
},
"output_parameters": {
"exitStatus": "0"
}
}