2016-09-27 1 views
1

J'ai une situation où j'ai les tables suivantes.Comment faire face à 1 à plusieurs SQL (entrées de table) dans Pentaho Kettle

employés - emp_id, emp_name, emp_address

Employee_assets - emp_id (FK), asset_id, ASSET_NAME (1 beaucoup pour l'employé)

Employee_family_members - emp_id (FK) , fm_name, fm_relationship (1-many pour l'employé)

Maintenant, j'ai pour exécuter un travail de bouilloire programmé qui lit les données de ces tables dans des lots de 1 000 employés et crée une sortie XML pour ces 1 000 enregistrements en fonction de la relation dans la base de données avec les membres de la famille et les actifs. Ce sera un enregistrement XML imbriqué pour chaque employé.

Veuillez noter que la performance de ce travail de bouilloire est très cruciale dans mon scénario.

J'ai deux questions ici -

  1. Quelle est la meilleure façon de tirer dans les enregistrements de la base de données pour une relation 1-plusieurs dans le schéma?
  2. Quelle est la meilleure façon de générer la structure de sortie XML étant donné que les étapes de jointure XML sont un succès de performance?

Répondre

0

Voici comment j'ai réalisé cela.

Transformation showing the XML creation out of one to many

Donc, il y a une table étape d'entrée pour lire la table de base, puis créer le morceau XML pour elle. Par la suite, dans le flux, j'utilise la relation 1-many (table enfant) comme une autre étape de jointure de base de données en lui transmettant la clé de relation. Une fois les données extraites, les XML sont générés pour les lignes enfants. Ceci est ensuite passé à l'étape Modified Java Script Value (lignes de fusion) qui fusionne ensuite le contenu en utilisant trans_Status = SKIP_TRANSFORMATION pour les lignes similaires. Une fois que des lignes similaires ont été fusionnées/concaténées, le putRow(row) est utilisé pour le décharger en tant que sortie à l'étape suivante. Veuillez noter que cela nécessitait que le SQL soit ordonné par/trié en fonction des clés de relation. Cela fonctionne bien, donc je peux continuer avec cela.

0

Pour extraire des données, vous pouvez utiliser plusieurs champs de recherche db ou une étape de jointure de base de données. Performance sage Je pense que la jointure serait probablement plus rapide, mais tout dépend de la complexité de la requête que vous utilisez et comment il est écrit, etc