Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > ETL
ETL Le Forum d'entraide ETL (Extract Transform Load) et Datawarehouse : DataStage, SunOpsis, Data Integrator, Informatica, OWB, Data Manager, Talend Open Studio,...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/05/2008, 14h35   #1
Invité de passage
 
Inscription : mars 2003
Messages : 5
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : mars 2003
Messages : 5
Points : 1
Points : 1
Par défaut BO Data Integrator : Transformer CSV vers XML

Bonjour,

Pouvez-vous me dire comment générer un fichier XML à partir d'un fichier plat en entrée ?? J'utilise la version 11.5.

Merci.
Sto59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 09h40   #2
Membre éclairé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2006
Messages : 276
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : mai 2006
Messages : 276
Points : 374
Points : 374
il faut que tu fasses un fichier XSL décrivant la structure de ton fichier XML

Ensuite tu crées un job qui contient un dataflow qui prend en entrée ton fichier CSV (précédement créé sous forme de format) et qui fais un mapping (avec l'objet Query) vers ton fichier XML

Tu ne peux pas générer un XML sans en avoir décrit la structure avant
Prjprj est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2008, 14h01   #3
Invité de passage
 
Inscription : mars 2003
Messages : 5
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : mars 2003
Messages : 5
Points : 1
Points : 1
Concernant le XSL, tu veux parler d'un fichier XSD (ou XML Schema) ? Car si c'est une XSD, c'est bon elle est créée.

Pour ce qui est du fichier CSV en entrée et de l'objet Query, c'est ok également.

J'arrive à générer un fichier XML qui ne correspond pas du tout au nombre de valeurs que j'ai en entrée (une sorte de produit cartésien XML!!!).

Comme mon XML a plusieurs niveaux, dois-je mettre autant de fois mon fichier source en entrée pour réaliser le mapping ? En fait, je n'arrive pas à voir comment réaliser le mapping entre mon fichier plat et le XML.
Sto59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2008, 14h21   #4
Membre éclairé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2006
Messages : 276
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : mai 2006
Messages : 276
Points : 374
Points : 374
Effectivement je parlais de XSD

Par contre, je ne comprends pas vraiment ton problème, si tu mets plusieurs fois ton fichier en entrée sans rien mettre dans une clause "Where", tu auras effectivement un produit cartésien

Le fichier XML peut poser des problèmes du fait de la vision "hiérarchique" du fichier, mais tu n'as besoin que d'un fichier en entrée, le mapping est simplement un peu complexe, il faut prendre le focus sur le bon niveau de ton noeud puis faire ton mapping, puis passer au noeud précédent
Prjprj est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2008, 11h31   #5
Invité de passage
 
Inscription : mars 2003
Messages : 5
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : mars 2003
Messages : 5
Points : 1
Points : 1
Merci pour tes conseils, j'ai effectivement réalisé le mapping avec un seul fichier en entrée. Mais le résultat n'est toujours pas celui attendu. Il ne prend pas du tout en compte la hiérarchie du fichier XML. Il répète les données autant de fois qu'elles sont présentes dans le fichier pour chaque Tag. J'ai 10 lignes dans mon fichier CSV avec logiquement 1 seule valeur pour le tag du 1er niveau et je me retrouve en sortie avec 10 éléments identiques de 1er niveau (et le même type de répétition pour les autres niveaux).

J'ai essayé avec une DTD et là je me retrouve en sortie avec 1 seul niveau et le tag contient la concaténation des 10 valeurs de mon champ cible !

J'ai la version 11.5 de BODI, n'est-elle pas buguée pour la génération des XMLs ?
Car je retourne le problème dans tous les sens et toujours rien de concluant.
Le traitement ne semble pas si complexe que ça, juste une transformation. J'ai bien mappé mes champs et rempli le "From" pour l'ensemble des niveaux. Faut-il faire autre chose, car là je sèche ....
Sto59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2008, 15h59   #6
Membre éclairé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2006
Messages : 276
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : mai 2006
Messages : 276
Points : 374
Points : 374
D'après les tests que j'ai pu faire (je n'utilise pas de fichiers XML en général)

Tu dois avoir un fichier cible de la forme :
Code :
1
2
3
4
5
6
7
8
9
10
<racine>
   <element>
      <info1>truc</info1>
      <info2>machin</info2>
   </element>
   <element>
      <info1>chose</info1>
      <info2>bidule</info2>
   </element>
</racine>
ce qui revient à avoir dans ton mapping quelque chose comme ca :
Code :
1
2
3
4
5
6
Query
   element
      info1
         Texte
      info2
         Texte
D'après ce que j'ai pu voir, quand tu mets le focus sur "Info1", il ne te met pas le schéma source


En fait, c'est du au fait que, pour Data Integrator, chaque niveau de ton fichier XML est géré indépendamment des autres

La solution que j'ai trouvé, mais elle peut ne pas s'appliquer à ton exemple est de modifier la structure de ton fichier XML de façon à n'avoir qu'un élément en dessous de la racine et que tes informations soient stockées sous formes d'attributs dans ton élément
ce qui te donnerait un fichier cible de la forme :
Code :
1
2
3
4
<racine>
   <element info1='truc' info2='machin'/>
   <element info1='chose' info2='bidule'/>
</racine>
L'autre solution est de générer une table temporaire comprenant la même hiérarchie que ce que tu utilises sur ton fichier cible

Pour ce que j'ai pu lire dans les docs de formation éditeur, BODI n'est pas vraiment conçu pour écrire des fichiers XML, il sait les lire et ça suffit dans la plupart des cas
Prjprj est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 14h59   #7
Invité de passage
 
Inscription : mars 2003
Messages : 5
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : mars 2003
Messages : 5
Points : 1
Points : 1
En effet, la solution de modifier la structure du fichier de sortie n'est pas vraiment adéquate .

Pour ta solution de passer par une table temporaire, tu veux en venir où ? Car j'ai essayé de passer par des tables mais je bloque toujours lors de la génération de mon XML cible.
Soit DI me génère un XML avec un seul niveau (pourquoi ???). Il s'arrête dès le 1er niveau.
Au mieux, j'ai réussi à obtenir une structure basique avec 1 valeur par tag et par niveau avec un "Template XML" et un "Row Generation" (exemple trouvé sur le forum BOB).

Je pense que je vais finir par repasser par du bon vieux code pour générer mon arbre XML ... On avez espoir d'utiliser l'ETL pour éviter le code et profiter de sa maniabilité, mais à priori notre XML est un peu compliqué pour BODI.
Sto59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2008, 11h01   #8
Membre éclairé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2006
Messages : 276
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : mai 2006
Messages : 276
Points : 374
Points : 374
L'idée que j'avais en tête était de recréer ta hiérarchisation dans une table temporaire.

en découpant tes données, tu devrais pouvoir recréer la hiérarchie de ton fichier xml dans des tables intermédiaires, il te suffirait ensuite de copier ta table construite dans ton fichier XML.

Par contre, il est nécessaire que le SGBD que tu utilises gère les nested tables pour permettre ce genre de choses (SQL-Server 2005 ne le fait pas).

Je suis désolé de ne pas pouvoir t'aider beaucoup plus, mais je n'utilise pas du tout BODI de cette façon, et visiblement, il n'a pas été pensé pour le faire non plus .
Prjprj est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2008, 14h29   #9
Invité de passage
 
Inscription : octobre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 6
Points : 3
Points : 3
Citation:
Envoyé par Sto59 Voir le message
je retourne le problème dans tous les sens et toujours rien de concluant.
Le traitement ne semble pas si complexe que ça, juste une transformation. J'ai bien mappé mes champs et rempli le "From" pour l'ensemble des niveaux. Faut-il faire autre chose, car là je sèche ....
J'ai aussi eu ce probleme de produit cartesien dans mes xml, avec BODI et j'ai galéré pour trouver la solution, le post date un peu mais ca pourra tjr servir à d'autres:

Il faut simplement ne pas mettre dans les "from" de niveau inferieurs la table parente et bien faire les jointures avec elle dans les tables fils ex:

une table "element" et une table "info" que l'on souhaite imbriquer:
Dans le niveau "element" remplir le "from" normalement et rien ds le where.
Dans le niveau "info" juste mettre la table "info" dans le from, et mettre dans le where la jointure entre "element" et "info".

(J'avais plusieurs tables et pas un seul fichier, il faut donc dans ce cas, peut etre eclater au prealable le fichier csv en une table "element" et une "info" avec un id vers "element")
-Mapk- est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h45.


 
 
 
 
Partenaires

Hébergement Web