在Pentaho水壶中验证和解析复杂字段的最佳方法是什么?

时间:2014-10-17 23:57:32

标签: database validation pentaho etl kettle

验证连续字段的最佳方法是什么,如果无效,请将其更正为正确的格式?

最简单的例子是检查电话号码字段(可以采用变体格式 - > 111-111-1111,(111)111-1111等),我们理想情况下要验证这些并标准化为一种形式(让我们说:1111111111)。一种方法是使用过滤器行,然后使用正则表达式,或者我们可以使用数据验证器。但这只会告诉我们哪些数据无效但实际上并没有为我们格式化。然后我们可以使用Javascript修改的值步骤来编写一个js脚本来执行此操作。但我猜测有一种更好的方法(或者我没有遇到的内置集成)可以进行这些基本验证。或者是否建议只在单独的csv文件中转储包含无效字段的行,然后使用脚本单独解析它?

1 个答案:

答案 0 :(得分:0)

克'天

我使用优秀的'替换字符串'处理这种情况的步骤

你可以在单步中累积应用从字符串中删除坏char的规则 - 它非常容易用于你所描述的单字符修复,最重要的是,它还允许你基于正则表达式进行搜索同样 - 只需一步即可记录您的标准化并产生干净的输出

在你的情况下,我会创建两个规则'用任何东西替换() - 然而,-有点棘手;每次删除单个字符时都需要一个规则,因此您需要知道单个数据字段中-的最大数量,然后将这么多行添加到字符串'中。步骤

如果这是不合适的,请考虑用户定义的java表达式'并致电replace,例如:( (t0 != null) ? t0.replace("-","") : t0 )

正如我所述,每个人都在修复'按顺序应用 - In stream field是输入字段名称,而Outstream field留空指示d.i.修改字段本身 - 这是一个更复杂的例子,我搜索正则表达式并将其替换为空,对于我逃避"双引号的情况进行转义:

In stream field Out stream field    use RegEx   Search                                          Replace with
sc_srcuri                           N           {Internal.Transformation.Filename.Directory}                
re_s_sciname                        Y           ["]                                             \\"
re_s_sciname                        Y           .[\x08]                                                     
re_s_sciname                        Y           .[\x08]                                                     
re_s_sciname                        Y           .[\x08]                                                     
re_s_sciname                        Y           [*]                                                         
re_s_sciname                        Y           \s*$                                                        
re_s_sciname                        Y           ^\s*                                                        

请注意我删除最多三个删除'从这个特定字符串中控制代码[\x08]