【问题标题】:Add column to csv using predefined file using apache nifi使用 apache nifi 使用预定义文件将列添加到 csv
【发布时间】:2019-10-25 06:07:13
【问题描述】:

我得到一个看起来像这样的原始 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 配置

【问题讨论】:

    标签: csv validation apache-nifi


    【解决方案1】:

    使用ReplaceTextWithMapping。总流量:

    生成流文件:

    更新记录:

    配置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:

    映射文件内容:

    1   1S
    2   3S
    3   4S
    

    值由制表符分隔。正则表达式必须匹配每行中最后一个不带逗号的值:

    [0-9](?!,)
    

    Debuggex Demo

    结果:

    【讨论】:

    • 当我按照这些步骤操作时,最终结果行看起来像 1,sachith,2,2,其中 final 2 应该是 3S。
    • @Sachith 您必须将 ,2 替换为 ,3S。使用链接答案中描述的 ReplaceTextWithMapping 或 ReplaceText。
    • 是的,我使用了ReplaceTextWithMapping 处理器。但最终结果相同。
    • 分享您的 ReplaceTextWithMapping 配置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 2019-10-19
    相关资源
    最近更新 更多