2011-07-18 2 views
4

Je suis face au problème suivant:Comment fusionner 2 fichiers csv par colonnes en cuillère, pentaho, tout en gérant la conversion des données?

J'ai deux entrées:
1) J'ai un fichier de base csv avec 35 colonnes et leurs en-têtes appropriés.
2) J'ai une variété de fichiers donnés, non contrôlés par moi, qui peuvent ou non contenir les 35 colonnes et, pire encore, ils peuvent être hors service.

Je dois faire correspondre les colonnes du deuxième fichier csv aux colonnes du premier fichier csv. Si le second fichier csv ne contient pas toutes les 35 colonnes, je devrais les créer dans le bon ordre. Une fois que j'ai un bon fichier csv (dont l'en-tête ressemble au premier en-tête csv), je le passe à un script qui gère les données en les référençant par les en-têtes des colonnes. Une solution possible serait d'obtenir les entrées de champ existantes à l'intérieur du script, cependant, je ne suis pas capable de le faire parce que les champs semblent être fixes en référence aux en-têtes de colonne existants du deuxième fichier csv. Par conséquent, quand j'essaie d'accéder à une colonne qui n'existe pas, je me retrouve avec une exception ...

Toute aide serait grandement appréciée!

+2

Juste pour suivre le problème. J'ai abandonné ça. J'ai résolu le problème avec bouilloire en utilisant une base de données locale. Mais ce qui a vraiment résolu mon problème était un petit pot que j'ai développé juste pour traiter les fichiers csv en dehors de la bouilloire. Mon ami est toujours à la recherche d'une solution sur ce point car il doit utiliser uniquement la bouilloire =/ – wleao

+3

Ceci est très difficile dans PDI. Vous devriez jeter un coup d'œil à l'étape d'injection de métadonnées - cela fera probablement ce que vous voulez. Effectivement vous devriez lire le fichier, travailler sur la structure, puis l'injecter dans la transformation pour ensuite lire le fichier lui-même. – Codek

Répondre

0

This is an example data widening.

terme « champs dans la deuxième csv sur ordre » pourrait avoir plusieurs sens

  1. même source de fichier csv mais l'ordre des champs différents de temps en temps
  2. Position champ (numéro de colonne) dans le fichier csv est différent dans les fichiers fournis par une source différente.

Premier cas vraiment bizarre. La même source devrait fournir les mêmes données, et si cela n'est pas vrai, alors la logique pour prendre une décision peut être vraiment compliquée.

Deuxième cas semble plus réel. Dans ce cas, vous pouvez faire toutes les sources à 35 champs de large. Ensuite, vous devez identifier les champs. Il y a beaucoup d'outils disponibles dans la bouilloire pour détecter le type de données, la manipulation de chaîne, regexp et ainsi de suite.

En fait, il semble que vous ayez besoin de l'auto-détection des champs.

Mais sans données réelles, motif difficile à voir. Puisque vous mettez en œuvre une telle logique de détection de champ au niveau de la base de données, il est également possible de le faire dans une bouilloire.

Quoi qu'il en soit Si la logique est vraiment complexe, utilisez JavaStep, JavaScript.

Questions connexes