【问题标题】:Apache NiFi: Add column to csv using mapped valuesApache NiFi:使用映射值将列添加到 csv
【发布时间】:2019-10-25 08:11:53
【问题描述】:

使用 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”的新列,并且每个 id 都有相应的 nick。

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

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

【问题讨论】:

    标签: apache-nifi data-processing


    【解决方案1】:

    流程:

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

    您可以使用ReplaceTextReplaceTextWithMapping 来实现此目的。我用 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 新手,欢迎!您之前的任何问题都没有接受一个答案。如果他们解决了您的问题,请接受他们,因为这将帮助其他人找到解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 2019-05-07
      • 1970-01-01
      相关资源
      最近更新 更多