我正尝试创建一个读取csv文件的转换,并检查该csv中每个字段的数据类型。
像这样:标准字段A应该是string(1)字符,而字段B是整数/数字。
我要检查/验证:如果A不是string(1),那么如果B不是整数/数字,也要设置Status = Not Valid
。然后所有状态为Not Valid
的文件都将移至错误文件夹。
我知道我可以使用Data Validator
进行操作,但是如何以该状态移动文件?我找不到任何步骤。
答案 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。如果您需要长期维护,它会更加灵活。