Apache Nifi:从csv中删除多个列

时间:2019-12-02 07:01:58

标签: java csv apache-nifi

  

我有一个超过60列的csv 。但是,我只只想从最初的csv中选出32列。 (我的csv有标题)

我使用了QueryRecord处理器,并添加了CSVReaderCSVRecordSetWriter。然后,我添加了一个名为done的新属性,并将以下SQLstatement分配为该值。

SELECT col1, col2, col9, col18, ..... col65 FROM FlowFile

上面的语句具有我想要在输出csv中输出的32列的所有名称(这种情况下的col1,col2等是列的名称)。

此操作失败,因为我收到以下错误。据我了解,这是由于超出了支持的列数限制。因为如果我想要7-8列,则此方法有效。

error

希望您可以建议我使用处理器或nifi工作流程,我可以成功地从65列中抽取32列。

我尝试了15次,它可以正常工作。因此,我尝试了16列,并且有效。所以我再次尝试了15次,但即使这样也不起作用。该错误似乎不一致。

1 个答案:

答案 0 :(得分:1)

您可以共享日志中的全部错误吗?实际原因将在您从公告/错误共享的文本之后。我不确定表名是否区分大小写,但我建议使用FLOWFILE作为表名,以防万一。

此外,如果您提前知道输入模式,则可以使用ConvertRecord并将CSVRecordSetWriter的模式设置为类似于输入模式,但只包含所需的字段名称(列)。 ConvertRecord将不会输出在输出模式中不存在的字段,这具有删除这些字段并仅保留所需字段的作用。

如果您不了解架构,则QueryRecord应该可以工作(取决于您面临的错误)