使用ApacheNIFI使用预定义文件将列添加到csv

使用ApacheNIFI使用预定义文件将列添加到csv,csv,validation,apache-nifi,Csv,Validation,Apache Nifi,我得到了一个原始csv文件,看起来像这样 id,name,star 1,sachith,2 2,nalaka,1 3,abc,3 我想用另一个文件映射星号列 1 1S 2 3S 3 5S 最后,csv应该是这样的 id,name,star,level 1,sachith,2,3S 2,nalaka,1,1S 3,abc,3,5S 我使用了,但它替换了id列中包含的所有1,2,3值 它定义替换一个值,但我想映射并向记录中添加一个新列 编辑: 在@Upvote的回答之后。我的Replac

我得到了一个原始csv文件,看起来像这样

id,name,star
1,sachith,2
2,nalaka,1
3,abc,3
我想用另一个文件映射星号列

1  1S
2  3S
3  5S
最后,csv应该是这样的

id,name,star,level
1,sachith,2,3S
2,nalaka,1,1S
3,abc,3,5S
我使用了,但它替换了id列中包含的所有1,2,3值

它定义替换一个值,但我想映射并向记录中添加一个新列

编辑:

在@Upvote的回答之后。我的ReplaceTextWithMapping conf 使用。总流量:

GenerateFlowFile:

更新记录:

配置
CSVReader
将第一行视为标题。保持其他财产不变。配置
CSVRecordSetWrite
将第一行作为标题,将架构从架构文本属性派生,并将架构文本设置为:

{
   "type":"record",
   "name":"foobar",
   "namespace":"my.example",
   "fields":[
      {
         "name":"name",
         "type":"string"
      },
      {
         "name":"age",
         "type":"int"
      },
      {
         "name":"id",
         "type":"string"
      },
      {
         "name":"nick",
         "type":"string"
      }
   ]
}
请注意,它包括新列。用映射替换文本:

映射文件内容:

1   1S
2   3S
3   4S
值由制表符分隔。正则表达式必须与最后一个值匹配,且每行中不后跟逗号:

[0-9](?!,)

结果:

使用。总流量:

GenerateFlowFile:

更新记录:

配置
CSVReader
将第一行视为标题。保持其他财产不变。配置
CSVRecordSetWrite
将第一行作为标题,将架构从架构文本属性派生,并将架构文本设置为:

{
   "type":"record",
   "name":"foobar",
   "namespace":"my.example",
   "fields":[
      {
         "name":"name",
         "type":"string"
      },
      {
         "name":"age",
         "type":"int"
      },
      {
         "name":"id",
         "type":"string"
      },
      {
         "name":"nick",
         "type":"string"
      }
   ]
}
请注意,它包括新列。用映射替换文本:

映射文件内容:

1   1S
2   3S
3   4S
值由制表符分隔。正则表达式必须与最后一个值匹配,且每行中不后跟逗号:

[0-9](?!,)

结果:


当我执行这些步骤时,最终结果行看起来像
1,sachith,2,2
,其中final 2应该是3S。@sachith必须用3S替换,2。使用链接答案中描述的ReplaceTextWithMapping或ReplaceText。是的,我使用了
ReplaceTextWithMapping
processor。但最终结果相同。请与Mapping config共享您的ReplaceText。当我执行这些步骤时,最终结果行看起来像
1,sachith,2,2
,其中final 2应该是3S。@sachith您必须将2替换为3S。使用链接答案中描述的ReplaceTextWithMapping或ReplaceText。是的,我使用了
ReplaceTextWithMapping
processor。但最终结果相同。请使用映射配置共享您的ReplaceText。