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

Apache NiFi: Add column to csv using mapped values

使用 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" 的 header 的新列,并且每个 ID 都有相应的昵称。

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

最后我想要一个包含额外列和每条记录的适当数据的 csv。这怎么可能使用 Apache NiFi。请告诉我必须使用的处理器和必须更改的配置才能完成此任务。

流量:

  • 添加一个新的昵称栏
  • 将 id 复制到昵称栏
  • 查看每一行并将 id 与其对应的值匹配
  • 将此值设置为昵称列中的当前行

您可以使用 ReplaceText or ReplaceTextWithMapping 来实现。我使用 ReplaceText:

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

创建一个 CSVReader 并保留默认属性。创建一个 CSVRecordSetWriter 并将 Schema 访问策略设置为 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"
      }
   ]
}

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

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