java - 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 次,但还是不行。该错误似乎不一致。
解决方案
您可以分享日志中的完整错误吗?实际原因将在您从公告/错误中共享的文本之后。我不确定表名是否区分大小写,但我建议FLOWFILE
作为表名以防万一。
此外,如果您提前知道输入模式,则可以使用 ConvertRecord 并将 CSVRecordSetWriter 的模式设置为与输入模式类似,但只有您想要的字段名称(列)。ConvertRecord 不会输出输出模式中不存在的字段,这会影响删除这些字段并仅保留您想要的字段。
如果您不知道架构,那么 QueryRecord 应该可以工作(取决于您面临的错误)
推荐阅读
- sql - Oracle SQL:从表中选择两个子集的最大值
- javascript - 当我们输入很长的电子邮件时,Vuetify 电子邮件规则会挂起网页?
- java - 在同一页面中的 ColumnDocumentRenderer 和 DocumentRenderer 之间切换?
- visual-studio-code - 使用 Visual Studio 代码段将浮点数转换为范围
- qt - 在 Qt Quick Controls 中隐藏 TextArea 时无法摆脱光标
- c# - 使用 VSTS 的数据工厂 V1 的 CI/CD 管道
- html - 如何使用 XSL 修复 XML 转换中的冒号问题
- angular - @types/googlemaps/index.d.ts' 不是模块
- javascript - 如果对象传播不是可迭代的,它如何工作?
- r - R字符串操作:我该如何优化这个?