2017-09-13 3 views
0

J'ai créé une transformation qui lit les données Flat Json d'un fichier '.js' et modifie les champs JSON (clés) en fonction des noms des champs d'entrée des métadonnées et les noms de champs de cibles de métadonnées spécifiés par l'utilisateur.Entrée JSON définie par l'utilisateur pour la sortie JSON attendue à l'aide de PDI Metadata Injection

En outre, j'utilise l'étape ETL Metadata Injection pour injecter des entrées de métadonnées aux étapes: entrée JSON, valeurs de sélection/renommage et sortie JSON.

S'il vous plaît trouver des transformations que j'ai créées pour métadonnées pour injection JSON Entrée:

Transformation 1: Pour obtenir le répertoire qui contient les fichiers JSON et appelle la transformation JSON Executor.

Transformation 2: Obtenir les entrées de métadonnées, les métadonnées champ cible, le nom de fichier JSON et les envoyer à ETL métadonnées Injection étape

Metadata Injection

Transformation 3: Processus L'entrée JSON de l'étape d'injection de métadonnées et convertir JSON d'entrée en données JSON attendues

Input JSON data to Expected JSON output

Quand je lance ce qui précède tra nsformations, je suis l'erreur ci-dessous:

2017/09/13 15:23:49 - JSON to Expected JSON Output.0 - ERROR (version 7.1.0.0-12, build 1 from 2017-05-16 17.18.02 by buildguy) : Unexpected error 2017/09/13 15:23:49 - JSON to Expected JSON Output.0 - ERROR (version 7.1.0.0-12, build 1 from 2017-05-16 17.18.02 by buildguy) : org.pentaho.di.core.exception.KettleException: 2017/09/13 15:23:49 - JSON to Expected JSON Output.0 - The specified field '{0}' could not be found in the input. 2017/09/13 15:23:49 - JSON to Expected JSON Output.0 - 2017/09/13 15:23:49 - JSON to Expected JSON Output.0 - at org.pentaho.di.trans.steps.jsonoutput.JsonOutput.processRow(JsonOutput.java:204) 2017/09/13 15:23:49 - JSON to Expected JSON Output.0 - at org.pentaho.di.trans.step.RunThread.run(RunThread.java:62) 2017/09/13 15:23:49 - JSON to Expected JSON Output.0 - at java.lang.Thread.run(Thread.java:745)

Répondre

0

L'étape est coupable JSON to Expected JSON Output, et la faute est que The specified field '{0}' could not be found in the input.

Il semble que cette étape (qui est une sortie JSON) ne trouve pas le premier champ dans le flux d'entrée. Ce qui signifie que le premier champ que vous avez spécifié dans l'onglet Champ de la sortie JSON n'est pas dans la liste du champ sélectionné de l'étape précédente. Astuce: faites un clic droit sur une étape pour obtenir la liste des champs d'entrée et de sortie. Lorsque cela fonctionne, vous pouvez penser à Injecter les métadonnées en modifiant d'abord l'entrée Excel dans l'entrée JSON.

Comme je l'ai mentionné dans votre message précédent: Je ne suis pas sûr que l'injection de métadonnées est la bonne approche pour renommer les champs dans un JSON. Obtenez votre JSON à partir d'un fichier texte dans une chaîne et donnez-le à l'étape Javascript, puis utilisez l'ensemble riche javascript de la fonction de haut niveau pour modifier les noms dans l'objet javascript. Et mettez cette chaîne modifiée dans le fichier de sortie.

Vous dites que "les noms des champs de métadonnées sont spécifiés par l'utilisateur", comment cela se fait-il: avez-vous un dictionnaire sur un fichier? Un fichier csv à deux colonnes?

+0

Je passe les champs à la sortie JSON de la transformation précédente (c'est-à-dire via l'étape d'injection de métadonnées). J'ai donc gardé les champs vides dans l'étape de sortie JSON. En fait, les mêmes étapes ont fonctionné pour l'entrée de fichier XML, l'entrée de fichier Excel et l'entrée de fichier CVS. Cependant, cela ne fonctionne pas pour les fichiers JSON. En outre, vous avez suggéré d'utiliser Javascript au lieu de Metadata Injection. Peut-on modifier les noms 'clés' (Note: pas les valeurs) dans une chaîne JSON? Si c'est le cas, ce serait bien si vous fournissez l'exemple de code Javascript pour le faire. –

+0

> "Vous dites" les noms des champs de métadonnées sont spécifiés par l'utilisateur ", comment cela se fait-il: avez-vous un dictionnaire sur un fichier? Un fichier csv à deux colonnes?" Oui, j'ai passé le dictionnaire sur un fichier XLSX en tant qu'entrées de métadonnées. –