我正在尝试处理一些数据并将其存储在数据仓库中。为此,我想将维度存储在一个转换中,并将事实(只有一个)存储在另一转换中。因此,我可以使用作业来执行第一个作业,将行复制到结果
并将它们放入第二个转换中。
在第一个转换中,我读取了一些 Excel 文件并将这些数据分成一些流。这是来自洗礼的数据,所以我有一个用于该人的流,另一个用于 parent 的流,另一个用于赞助商的流,依此类推...在每个流的末尾,我将数据插入数据库并返回自动生成的 PK(它是一个 id 自动增量)。
在第二个中,我只有从结果中获取行
并希望将它们设置到一个txt文件中(只是为了看看它是否正确完成)。问题是文件已创建但它是空的。我想如果我让 Get rows from result
中的字段为空,它就会获取所有字段。
我做错了什么?
最后,我想要的是在第一个转换中每个流的末尾有一个将行复制到结果
,并在第二个转换中获取所有这些数据。
在“Insert Pare Padrina”中,我返回自动生成的 id_pare_padrina,与“Insert Mare Padrina”相同(我有更多流,我也必须将它们包含到结果中)。此转换不是每行执行,因为我需要其他行的值。
谢谢!
最佳答案
为了将数据从第一个转换传递到第二个转换,您需要设置某些参数,例如:
1.首先,在第二个转换的转换设置(在作业级别)中,检查以下项目:下图:
将以前的结果复制到参数将确保“将行复制到结果”步骤中的所有结果/数据正确传递到下一个级别。
对每个输入行执行:将为第一个转换文件中的每一行执行第二个转换。根据您的要求,这是可选的。
2. 在同一转换设置中,在“参数”选项卡中定义“参数”。检查下面的图片:
这里,NAME是我定义的参数。因此,当您使用“从结果中获取行”时,您可以定义这些参数名称。
3. 您可以不使用“从结果中获取行”,而是使用“获取变量”步骤来获取来自上一步的所有变量。您所需要做的就是在 ktr 文件中定义参数名称 (CTRL + T)。 (实际上我已经以这种方式实际实现了并且它对我有用。)
4. 由于“将行复制到结果”步骤使用堆内存,因此定义此步骤的多个实例可能会很快耗尽内存空间,并且您的代码可能会遇到麻烦。理想情况下使用此步骤的单个实例。
但是如果您的数据交互只有一行,最好的选择是使用“设置变量”步骤。
我认为您可能错过了工作中的某些部分。
您可以阅读有关复制行的更多信息,结果为 here .
希望有帮助:)
关于Pentaho - 将多个复制行结果导致从结果中获取行为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29632388/