使用Apache Nifi使用预定义文件将列添加到CSV

时间:2019-10-25 06:07:13

标签: 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

我使用了ReplaceTextWithMapping,但是它替换了包括id列在内的所有1,2,3值。

Here它定义了替换值,但是我想映射并向记录添加新列。

编辑:

在@Upvote回答之后。我的ReplaceTextWithMapping conf enter image description here

1 个答案:

答案 0 :(得分:2)

使用ReplaceTextWithMapping。总体流量:

enter image description here

GenerateFlowFile:

enter image description here

UpdateRecord:

enter image description here

配置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"
      }
   ]
}

请注意,它包括新列。 ReplaceTextWithMapping:

enter image description here

映射文件内容:

1   1S
2   3S
3   4S

值由制表符分隔。正则表达式必须与最后一行的值匹配,且每行后面都不能有逗号:

[0-9](?!,)

Regular expression visualization

Debuggex Demo

结果:

enter image description here