ApacheNIFI:映射具有多个列的csv以创建新行

ApacheNIFI:映射具有多个列的csv以创建新行,csv,apache-nifi,data-processing,Csv,Apache Nifi,Data Processing,我发现堆栈溢出。这种方法只需几列就可以很好地工作,但我意识到这种方法不可能用于包含大量列的csv 我有一个有75列的csv。我决定跟随(与上面提到的链接相同)。正如在那个问题上被要求做的那样。我添加了UpdateRecord处理器,并添加了CSVReader和CSVWriter。然后,如前所述,我输入了我的SchemaText这相当长,因为它需要我定义整个70列。然后CSVRecordSetWriter被告知无效 我意识到在模式中包含一定数量的列定义后,它变得无效 我的部分架构如下所示: {

我发现堆栈溢出。这种方法只需几列就可以很好地工作,但我意识到这种方法不可能用于包含大量列的csv

我有一个有75列的csv。我决定跟随(与上面提到的链接相同)。正如在那个问题上被要求做的那样。我添加了
UpdateRecord
处理器,并添加了
CSVReader
CSVWriter
。然后,如前所述,我输入了我的
SchemaText
这相当长,因为它需要我定义整个70列。然后
CSVRecordSetWriter
被告知
无效

我意识到在模式中包含一定数量的列定义后,它变得
无效

我的部分架构如下所示:

{
   "type":"record",
   "name":"test2.csv",
   "namespace":"my.namespace",
   "fields":[
      {
         "name":"download",
         "type":"string"
      },
      {
         "name":"upload",
         "type":"string"
      }
      .
      .
      .
      .
      {
         "name":"operatorId",
         "type":"string"
      },
      {
         "name":"errorCode",
         "type":"string"
      }      
   ]
}
我的csv也包含标题

目标: 我需要将
errorCode
列中的数据映射到名为
errorMean
的新列。希望你能提出一个方法,我可以做到这一点。自由地给出一个解决方案,它甚至可以完全跳过写下
模式文本的过程

我在堆栈溢出上发现了一个类似的问题。这种方法奏效了 只需要几列就可以了,但我意识到这种方法并不适用 可能用于具有大量列的csv

为了避免提供非常大的模式,您将
CSVReader的
模式访问策略设置为
推断模式
,并将
CSVRecordSetWriter的
模式访问策略
设置为
继承记录模式
。因此,当读取CSV时,将推断模式。然后将使用相同的模式编写CSV


其余映射的工作原理与您链接的答案中所述的相同。

Inherit Record Schema(继承记录模式)模式访问策略只是告诉任何RecordSetWriter使用RecordReader使用的模式,因此它不一定意味着它将从CSV头中获取该模式。@iAnethling感谢Ian!我在回答中更正了这一点。@Upvote那么处理器不是无效的,而是替换了每列中的所有值。我只想替换新列中的值。@himsaraglege很可能您的正则表达式是错误的。请提供正则表达式和示例输入。嘿,Himsara,您是否尝试过这样做,但将模式保存到AvroschemareRegistry?我无法在没有访问您的完整架构的情况下进行测试。