apache - 按列的值拆分 csv 文件 - Apache Nifi
问题描述
我有一个 csv 文件,它具有以下结构。
ERP,J,JACKSON,8388 SOUTH CALIFORNIA ST.,TUCSON,AZ,85708,267-3352,,ALLENTON,MI,48002,810,710-0470,369-98-6555,462-11-4610,1953-05-00,F,
MARKETING,J,JACKSON,8388 SOUTH CALIFORNIA ST.,TUCSON,AZ,85708,267-3352,,ALLENTON,MI,48002,810,710-0470,369-98-6555,462-11-4610,1953-05-00,F,
如您所见,没有标题,但为了您的信息,第一部分(第一列)代表获取数据的扇区。
我要做的是取决于第一列的值,例如(MARKETING 或 ERP)我必须将所有这些行发送到不同的输出目录。
例如,所有带有 ERP 的行到 /output/ERP/ 所有带有 MARKETING 的行到 /output/marketing/
我有一个想法,但我的问题是关于我正在使用的 RouteOnAttribute 处理器,我不知道如何引用第一列并指示稍后发送的值(ERP 或 MARKETING)是什么它到正确的输出目录。
这是我的架构。
谢谢。
解决方案
在这种情况下使用PartitionRecord
处理器。
使用 配置处理器record reader/writer controller services
。即使您没有标头,您也可以在 avro 模式中使用 col1、col2...等。
- 添加定义处理器的新属性以使用该字段对流文件进行分区。
现在分区记录处理器添加了partition field attribute
with 值,通过使用这个属性值,我们可以dynamically store files
动态地进入受尊重的目录。
流动:
1.GetFile
2.PartitionRecord
3.PutFile //configure directory as /output/${<keep_partition_field_name_here>}
请参阅此链接以配置分区记录处理器的使用。
(或者)
旧方法:
使用RouteText
处理器而不是SplitText + RouteOnAttribute
处理器
将 RouteText 处理器配置为
使用ERP/MARKETING
连接到 PutFile 处理器并使用RouteText.Route
属性值将文件动态保存到目录中。
流动:
1.GetFile
2.RouteText
3.PutFile //configure directory as /output/${RouteText.Route}/
您还可以使用组正则表达式属性值来创建分区。
笔记
使用PartitionRecord 处理器将比 RouteText 处理器更有效。
推荐阅读
- swift - 桥接头如何在 Xcode 中工作?
- sql-server - 我可以远程连接到 RDS sql server 实例以支持始终处于高可用性、行级安全功能吗?
- azure - Azure AD B2C - 在注册 v2 流程的 MFA 页面上筛选国家选项列表
- loops - Ansible 循环遍历文件中指定的值
- html - 检查下面的代码以帮助我将我的 gmail 按钮居中
- c++ - 我对这个问题有疑问我的输出不正确
- influxdb - InfluxDB 数据库复制
- android - 在 Android Room 中,有没有办法为多个插入/更新查询只触发一次更改事件?
- java - 来自 Spring Rest API 控制器的意外 JSon 响应
- angular - 如何在材料表中显示 API 响应