PDI-检查字段的数据类型

时间:2018-07-30 09:49:34

标签: kettle pentaho-data-integration pdi

我正尝试创建一个读取csv文件的转换,并检查该csv中每个字段的数据类型。

像这样:标准字段A应该是string(1)字符,而字段B是整数/数字。

我要检查/验证:如果A不是string(1),那么如果B不是整数/数字,也要设置Status = Not Valid。然后所有状态为Not Valid的文件都将移至错误文件夹。

我知道我可以使用Data Validator进行操作,但是如何以该状态移动文件?我找不到任何步骤。

2 个答案:

答案 0 :(得分:1)

您可以循环读取文件,并且

添加步骤如下,

数据验证后,您可以过滤结果为负(不匹配)的行->添加常量值步,并且错误= 1->为默认值为0的错误字段添加设置变量步。

转换完成后,您可以在父作业中添加简单的评估步骤以检查ERROR变量的值。

如果它的值为1,则移动其他文件....

我希望这会有所帮助。

答案 1 :(得分:0)

您可以执行与this question中相同的操作。读取后,使用Group by每个文件有一个标志。但是,这一次您无法一次转换,应该使用作业。

您的用例在PDI发行版随附的示例中。该示例位于文件夹your-PDI/samples/jobs/run_all中。打开Run all sample transformations.kjb并用您的逻辑替换Filter 2的{​​{1}},该逻辑包括一个Get Files - Get all transformations.ktr,每个文件具有一个状态,而不是每行具有一个状态。

如果您想知道为什么为什么需要如此复杂的逻辑来执行此任务,请记住PDI同时启动转换的所有步骤。这就是它的强大功能,但是您不知道是否必须在处理完每一行之前移动文件。

或者,您拥有your similar question的快速而肮脏的解决方案。通过类型检查更改过滤器行,并通过Group by / Synchronize after merge

更改最后一个Process File

最后一条建议:与其使用Move检查类型(本身是一个很好的解决方案),不如使用Data validator there。如果您需要长期维护,它会更加灵活。