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

Him*_*ege 2 data-processing apache-nifi

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

name,age,id
John,10,Y
Jake,55,N
Finn,23,C
Run Code Online (Sandbox Code Playgroud)

我知道 Y 表示约克 (York),N 表示旧 (Old),C 表示猫 (Cat)。我想要一个新列,其标题名为“nick”,并且每个 id 都有相应的昵称。

name,age,id,nick
John,10,Y,York
Jake,55,N,Old
Finn,23,C,Cat
Run Code Online (Sandbox Code Playgroud)

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

Upv*_*ote 6

流动:

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

您可以使用ReplaceTextReplaceTextWithMapping来实现此目的。我用 ReplaceText 来做到这一点:

在此输入图像描述

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

在此输入图像描述

创建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"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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