Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > ETL > Kettle-Pentaho
Kettle-Pentaho Forum d'entraide Kettle et Pentaho (Kettle, Pentaho Data Integrator)
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 29/03/2011, 11h19   #1
Invité de passage
 
Inscription : mars 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 5
Points : 4
Points : 4
Par défaut separation de champs avec pentaho

Bonjour ,
J'aimerai faire la transformation suivante par Pentaho.
je veux extraire les données d'un fichier log et les mettre dans une table MySQL.
mon fichier log contient plusieurs ligne de format différent, donc mon soucis est de distinguer entre les lignes de telle façon que chaque champ du fichier aille dans le champ lui correspondant dans la table.
exple simple:
la table MySQL contient les champs suivant: Nom, Prenom, Adresse, Age
j'ai deux lignes dans mon fichier log
ligne 1: AAAA ; aaaa ; Maroc
ligne 2: BBBB ; bbbb ; 13
comment faire pour que les les données Maroc s'enregistre dans le champ Adresse, et la données 13 s'enregistre dans le champ Age.

Merci d'avance
bahijasup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 11h29   #2
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 587
Points : 861
Points : 861
si tu as une dimension géographique ou une table avec les pays tu peux faire une étape 'recherche dans base de données' à condition que t'es la même orthographe que dans ton fichier ou tu fais 'une évaluation par reg exp' par contre si t'as plusieurs lignes ça doit être gourmand surtout si tu n'as pas de structure définie pour chaque lignes ce qui fait que tu devras tester chaque champs pour chaque lignes...
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 12h45   #3
Invité de passage
 
Inscription : mars 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 5
Points : 4
Points : 4
Merci pour votre réponse.
Mais franchement je n'est pas bien compris (genre pas du tout, je suis débutante).
je n'ai donné qu'un simple exemple, car les ligne de mon fichier log sont très longues et ont plusieurs formats.(j'ai 5 format dans mon fichiers)
pouvez vous SVP m'expliquer en détails comment utiliser "évaluation par Regex" ?
bahijasup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 14h32   #4
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 587
Points : 861
Points : 861
si tu utilises kettle qui est normalement intégré dans pentaho, je te dirai plutôt d'utiliser un script java interprété vu la complexité de ton fichier. si tu sais coder en java tu pourras manipuler chaque champs de chaque ligne que tu affecteras à une variable de ton choix et du type de ton choix.
Code :
1
2
3
4
5
6
7
8
var age;
IF(isNum(Field_000.getString()) && (Field_000.getString().length == 2 || Field_000.getString().length == 1)){
	age = Field_000.getString();
}
IF(isNum(Field_001.getString()) && (Field_001.getString().length == 2 || Field_001.getString().length == 1)){
	age = Field_001.getString();
}
....
voici un exemple de code vite fait mais tu peux faire encore mieux :
-tu fais une extraction depuis ton fichier csv (si tu as des entêtes de colonnes tant mieux sinon kettle nommera chaque champs par défaut)
et tu mets tout tes champs en string.
-tu lies ça à une étape 'Appel script interprété Rhino', tu coches mode compatible et le bout de code du dessus teste si le champs est numérique admettons l'age et vérifie que c'est bien sur 1 ou 2 chiffres comme l'age et pas autre chose...une fois que tu as fini ton script tu cliques sur 'transmettre les variables' et tu choisies celles que tu veux transmettre...
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 15h55   #5
Invité régulier
 
Femme
Étudiant
Inscription : mars 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2011
Messages : 6
Points : 6
Points : 6
utilise le script pour séparer les champ suivant sa nature:
- dans le fichier d'extraction, g définit 3 champs: ch1, ch2, ch3
- dans le script java, g utilisé la fonction isNum (dans fct d'évaluation)

Code :
1
2
3
4
5
6
7
8
9
10
11
var Pays=NULL
var Age=NULL
 
IF (isNum(ch3)==true)
    {
        Age=ch3
    }
else
    {
        Pays=ch3
    }
- et puis dans la table, g lié les champs

ça a marché pour moi
salemi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h38.


 
 
 
 
Partenaires

Hébergement Web