使用 PDI 元数据注入将用户定义的 JSON 输入到预期的 JSON 输出
Posted
技术标签:
【中文标题】使用 PDI 元数据注入将用户定义的 JSON 输入到预期的 JSON 输出【英文标题】:User defined JSON input to Expected JSON output using PDI Metadata Injection 【发布时间】:2017-09-13 10:08:59 【问题描述】:我创建了一个转换,它将从“.js”文件中读取 Flat Json 数据,并根据用户指定的元数据输入字段名称和元数据目标字段名称修改 JSON 字段(键)。
另外,我正在使用 ETL 元数据注入 步骤将元数据输入注入以下步骤:JSON 输入、选择/重命名值和 Json 输出。
请找到我为 JSON 输入的元数据注入创建的转换:
转换1:获取包含JSON文件的目录并调用JSON转换执行器。
转换 2:获取元数据输入、元数据目标字段、JSON 文件名并将它们发送到 ETL 元数据注入步骤
Metadata Injection
转换 3:处理来自元数据注入步骤的 JSON 输入并将输入 JSON 转换为预期的 JSON 数据
Input JSON data to Expected JSON output
当我运行上述转换时,出现以下错误:
2017/09/13 15:23:49 - JSON 到预期的 JSON Output.0 - 错误(版本 7.1.0.0-12,buildguy 从 2017-05-16 17.18.02 构建 1):意外错误 2017/09/13 15:23:49 - JSON 到预期的 JSON Output.0 - 错误(版本 7.1.0.0-12,buildguy 从 2017-05-16 17.18.02 构建 1):org.pentaho.di.core .exception.KettleException: 2017/09/13 15:23:49 - JSON 到预期的 JSON Output.0 - 在输入中找不到指定的字段“0”。 2017/09/13 15:23:49 - JSON 到预期的 JSON Output.0 - 2017/09/13 15:23:49 - JSON 到预期的 JSON Output.0 - 在 org.pentaho.di.trans.steps.jsonoutput.JsonOutput.processRow(JsonOutput.java:204) 2017/09/13 15:23:49 - JSON 到预期的 JSON Output.0 - 在 org.pentaho.di.trans.step.RunThread.run(RunThread.java:62) 2017/09/13 15:23:49 - JSON 到预期的 JSON Output.0 - 在 java.lang.Thread.run(Thread.java:745)
【问题讨论】:
【参考方案1】:有罪的一步是JSON to Expected JSON Output
,错的是The specified field '0' could not be found in the input
。
这一步(这是一个 JSON 输出)似乎没有找到输入流中的第一个字段。这意味着您在 JSON 输出的字段选项卡上指定的第一个字段不在上一步的选定字段列表中。提示:右键单击某个步骤以获取输入和输出字段列表。
当这可行时,您可以考虑通过首先更改 JSON 输入中的 Excel 输入来注入元数据。
正如我在您之前的帖子中提到的:我不确定元数据注入是否是重命名 JSON 中的字段的正确方法。从一个字符串中的文本文件中获取您的 JSON 并将其提供给 javascript 步骤,然后使用 javascript 丰富的高级函数集来更改 javascript 对象中的名称。并将修改后的字符串放入输出文件中。
您说“元数据目标字段名称由用户指定”,它是如何完成的:您在文件上有字典吗?一个两列的csv文件?
【讨论】:
我将字段传递给之前转换的 JSON 输出(即通过元数据注入步骤)。所以我在 JSON 输出步骤中保留了空字段。实际上,相同的步骤适用于 XML 文件输入、Excel 文件输入和 CVS 文件输入。但是,它不适用于 JSON 文件。此外,您建议使用 Javascript 而不是元数据注入。我们可以修改 JSON 字符串中的“键”名称(注意:不是值)吗?如果是这样,如果您提供示例 Javascript 代码来做到这一点,那就太好了。 > "你说“元数据目标字段名称由用户指定”,它是怎么做到的:文件上有字典吗?两列 csv 文件?是的,我已将 XLSX 文件上的字典作为元数据输入传递。以上是关于使用 PDI 元数据注入将用户定义的 JSON 输入到预期的 JSON 输出的主要内容,如果未能解决你的问题,请参考以下文章
工程师手记 | 数据科学专题第二篇:Pentaho数据集成(PDI)与数据科学笔记本集成
PDI 勺步骤中的 HTML 抓取(用户定义的 java 类)