Apache NiFi:使用映射值将列添加到csv

时间:2019-10-25 08:11:53

标签: apache-nifi data-processing

使用GetFile处理器将csv带入NiFi工作流程。我有一列由“ id”组成。每个id表示一个特定的字符串。大约有3个ID。例如,如果我的csv由

组成
name,age,id
John,10,Y
Jake,55,N
Finn,23,C

我知道Y表示York,N表示Old,C表示Cat。我想要一个标题为“ nick”的新列,并为每个id都具有相应的昵称。

name,age,id,nick
John,10,Y,York
Jake,55,N,Old
Finn,23,C,Cat

最后,我想要一个带有多余列的CSV和每条记录的适当数据。使用Apache NiFi怎么可能。请给我有关必须使用的处理器以及必须更改的配置以完成此任务的建议。

1 个答案:

答案 0 :(得分:2)

流量:

  • 添加新的昵称栏
  • 将ID复制到“昵称”列
  • 查看每行,并将id与它的对应值匹配
  • 将此值设置为“刻痕”列中的当前行

您可以使用ReplaceTextReplaceTextWithMapping来实现。我是用ReplaceText做到的:

enter image description here

UpdateRecord将解析csv文件,添加新列并复制ID值:

enter image description here

创建一个CSVReader并保留默认属性。创建一个CSVRecordSetWriter并将模式访问策略设置为Schema Text。将模式文本属性设置为

{
   "type":"record",
   "name":"foobar",
   "namespace":"my.example",
   "fields":[
      {
         "name":"name",
         "type":"string"
      },
      {
         "name":"age",
         "type":"int"
      },
      {
         "name":"id",
         "type":"string"
      },
      {
         "name":"nick",
         "type":"string"
      }
   ]
}

请注意,它具有新列。最后用映射替换原始值:

enter image description here

PS:我注意到您是新手,欢迎光临!您之前的任何问题都没有接受一个答案。如果他们解决了您的问题,请接受他们,因为这将帮助其他人找到解决方案。