Pentaho - 将多个复制行结果导致从结果中获取行为空

标签 pentaho etl kettle spoon

我正在尝试处理一些数据并将其存储在数据仓库中。为此,我想将维度存储在一个转换中,并将事实(只有一个)存储在另一转换中。因此,我可以使用作业来执行第一个作业,将行复制到结果并将它们放入第二个转换中。

在第一个转换中,我读取了一些 Excel 文件并将这些数据分成一些流。这是来自洗礼的数据,所以我有一个用于该人的流,另一个用于 parent 的流,另一个用于赞助商的流,依此类推...在每个流的末尾,我将数据插入数据库并返回自动生成的 PK(它是一个 id 自动增量)。

在第二个中,我只有从结果中获取行并希望将它们设置到一个txt文件中(只是为了看看它是否正确完成)。问题是文件已创建但它是空的。我想如果我让 Get rows from result 中的字段为空,它就会获取所有字段。

我做错了什么?

最后,我想要的是在第一个转换中每个流的末尾有一个将行复制到结果,并在第二个转换中获取所有这些数据。

enter image description here

在“Insert Pare Padrina”中,我返回自动生成的 id_pare_padrina,与“Insert Mare Padrina”相同(我有更多流,我也必须将它们包含到结果中)。此转换不是每行执行,因为我需要其他行的值。

谢谢!

最佳答案

为了将数据从第一个转换传递到第二个转换,您需要设置某些参数,例如:

1.首先,在第二个转换的转换设置(在作业级别)中,检查以下项目:下图:

enter image description here

将以前的结果复制到参数将确保“将行复制到结果”步骤中的所有结果/数据正确传递到下一个级别。

对每个输入行执行:将为第一个转换文件中的每一行执行第二个转换。根据您的要求,这是可选的。

2. 在同一转换设置中,在“参数”选项卡中定义“参数”。检查下面的图片:

enter image description here

这里,NAME是我定义的参数。因此,当您使用“从结果中获取行”时,您可以定义这些参数名称。

3. 您可以不使用“从结果中获取行”,而是使用“获取变量”步骤来获取来自上一步的所有变量。您所需要做的就是在 ktr 文件中定义参数名称 (CTRL + T)。 (实际上我已经以这种方式实际实现了并且它对我有用。)

4. 由于“将行复制到结果”步骤使用堆内存,因此定义此步骤的多个实例可能会很快耗尽内存空间,并且您的代码可能会遇到麻烦。理想情况下使用此步骤的单个实例。

但是如果您的数据交互只有一行,最好的选择是使用“设置变量”步骤。

我认为您可能错过了工作中的某些部分。

您可以阅读有关复制行的更多信息,结果为 here .

希望有帮助:)

关于Pentaho - 将多个复制行结果导致从结果中获取行为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29632388/

相关文章:

machine-learning - Kafka 流的最佳实践

pentaho - 创建宽度为 100% 的 Pentaho CDE 仪表板

pentaho - 如何使用 Pentaho 数据集成使用 (Select * into ##temp from table) 语法(对于 MS SQL)创建临时表

postgresql - 简单的查找查询在 Postgres 上很慢,在 MySQL 上很快

Pentaho ETL : Database Join vs Table Input

java - 从 cmd 运行 pentaho Kettle。如何将源文件作为参数发送?

java - 在 Spoon (Pentaho Kettle) 中执行 .jar 文件

merge - 如何在 Pentaho 中合并具有相同列的两个流?

database - 在 Postgres 中将数据从一个表移动到另一个表的最快方法

过程中的 MySQL 函数 LENGTH() 不会以字节形式返回字符串长度