Groovy NiFi:为ExecuteScript处理器编写代码以合并多个条目
我有一个NiFi流程(可以使用),它可以将大量的电子表格按公司名称拆分为单独的Groovy NiFi:为ExecuteScript处理器编写代码以合并多个条目,groovy,apache-nifi,Groovy,Apache Nifi,我有一个NiFi流程(可以使用),它可以将大量的电子表格按公司名称拆分为单独的csv 例如 这就把这个,比如说, 问题出现在类似这样的csv,同一家公司的输入略有不同: 我知道我需要在这里粘贴一个ExecuteScript处理器。我需要将所有这些副本合并到一个文件中,而不必梳理数千行来找出以多种方式输入的每个公司 我认为使用Groovy很容易做到这一点: flowFile = session.get() if(!flowFile) return myAttr = flowFile.getAt
csv
例如
这就把这个,比如说,
问题出现在类似这样的csv
,同一家公司的输入略有不同:
我知道我需要在这里粘贴一个ExecuteScript
处理器。我需要将所有这些副本合并到一个文件中,而不必梳理数千行来找出以多种方式输入的每个公司
我认为使用Groovy很容易做到这一点:
flowFile = session.get()
if(!flowFile) return
myAttr = flowFile.getAttribute('filename')
不确定从这里走到哪里。您可以使用处理器用法将所有副本合并,然后将文件存储到目录中 流量:
GetFile -> SplitText -> PartitionRecord -> UpdateAttribute-> MergeContent
-> PutFile
GetFile
-> SplitText
-> PartitionRecord
-> UpdateAttribute //add directory attribute
-> MergeContent
-> UpdateAttribute //change filename to ${UUID()}
-> PutFile
更新属性配置:
GetFile -> SplitText -> PartitionRecord -> UpdateAttribute-> MergeContent
-> PutFile
GetFile
-> SplitText
-> PartitionRecord
-> UpdateAttribute //add directory attribute
-> MergeContent
-> UpdateAttribute //change filename to ${UUID()}
-> PutFile
- 使用添加新规则 条件
${partition\u field\u name:toLower():contains(“坎贝尔”)}
在上面的规则中,我们检查partition\u field\u name属性值是否包含campbell,这样就可以使用NiFI表达式语言并添加逻辑来识别各种分区值并执行所需的操作campbell.csv
PutFile
configs
冲突解决策略,因为我们将再次使用相同的文件名UUID(或)timestamp..etc
GetFile -> SplitText -> PartitionRecord -> UpdateAttribute-> MergeContent
-> PutFile
GetFile
-> SplitText
-> PartitionRecord
-> UpdateAttribute //add directory attribute
-> MergeContent
-> UpdateAttribute //change filename to ${UUID()}
-> PutFile
您可以使用处理器用法将所有副本组合起来,然后将文件存储到目录中 流量:
GetFile -> SplitText -> PartitionRecord -> UpdateAttribute-> MergeContent
-> PutFile
GetFile
-> SplitText
-> PartitionRecord
-> UpdateAttribute //add directory attribute
-> MergeContent
-> UpdateAttribute //change filename to ${UUID()}
-> PutFile
更新属性配置:
GetFile -> SplitText -> PartitionRecord -> UpdateAttribute-> MergeContent
-> PutFile
GetFile
-> SplitText
-> PartitionRecord
-> UpdateAttribute //add directory attribute
-> MergeContent
-> UpdateAttribute //change filename to ${UUID()}
-> PutFile
- 使用添加新规则 条件
${partition\u field\u name:toLower():contains(“坎贝尔”)}
在上面的规则中,我们检查partition\u field\u name属性值是否包含campbell,这样就可以使用NiFI表达式语言并添加逻辑来识别各种分区值并执行所需的操作campbell.csv
PutFile
configs
冲突解决策略,因为我们将再次使用相同的文件名UUID(或)timestamp..etc
GetFile -> SplitText -> PartitionRecord -> UpdateAttribute-> MergeContent
-> PutFile
GetFile
-> SplitText
-> PartitionRecord
-> UpdateAttribute //add directory attribute
-> MergeContent
-> UpdateAttribute //change filename to ${UUID()}
-> PutFile
也许你可以在开始抓取之前重命名文件…是的,你可以在100多万行上尝试…可能你可以在开始抓取之前重命名文件…是的,你可以在100多万行上尝试。当你在第二节中说
partition\u value
时,你是否将${partition\u field\uu}
更改为${partition\u value\u…}
?@papelr,不,我的意思是说基于${partition\u field\u…}
属性值创建另一个名为目录的属性
并基于此目录属性值将文件存储到这些目录中。谢谢!如果我做了第二部分,我不需要做${partition\u field\u name:toLower():contains(“campbell”)}
?只是为了让事情在我自己的生活中保持整洁head@papelr,仍然需要执行${partition\u field\u name:toLower():contains(“campbell”)}
获取目录属性值,然后根据目录属性值创建/保存文件到这些目录中..!!当您在第二节中说分区\u值
时-您是否将${partition\u字段\u…}
更改为${partition\u值\u…}
?@papelr,不,我的意思是说基于${partition_field_…}
属性值创建另一个名为director的属性