首页 > 解决方案 > Apache Nifi:从 csv 中删除多列

问题描述

我有一个超过 60 列的 csv 。然而,我只想要初始 csv 中的 32 列。(我的 csv 有标题)

我使用了一个QueryRecord处理器并添加了一个CSVReader和一个CSVRecordSetWriter. 然后我添加了一个名为的新属性并将done以下 SQL 语句分配为值。

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

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

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

错误

希望您能给我推荐一个处理器或 nifi 工作流程,我可以成功地从 65 列中取出 32 列。

我尝试了 15 并且它有效。因此我尝试了 16 列并且它有效。所以我又试了 15 次,但还是不行。该错误似乎不一致。

标签: javacsvapache-nifi

解决方案


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

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

如果您不知道架构,那么 QueryRecord 应该可以工作(取决于您面临的错误)


推荐阅读