✨Nifi系列✨ Nifi同步并解析FTP服务器Excel文件,并存储到数据库
Posted DATA数据猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了✨Nifi系列✨ Nifi同步并解析FTP服务器Excel文件,并存储到数据库相关的知识,希望对你有一定的参考价值。
✨Nifi系列✨ Nifi同步并解析FTP服务器Excel文件,并存储到数据库
FTP服务器中存有Excel文件,希望将Excel文件中数据转储到数据库,在Nifi中使用GetFTP
-> ConverttExcelToCSVProcessor
-> UpdateAttribute
-> ConvertRecord
-> SplitJson
-> EvaluateJsonPath
-> ReplaceText
-> PutSQL
流程。
一、Excel数据同步
1 待同步数据
模拟当前FTP服务器中有一个Excel文件zxy.xlsx
,文件内数据如下:
根据已知数据在数据库中建表:
create table zxy.province_and_city(
province varchar(25) null,
city varchar(25) null,
area varchar(25) null
)
2 GetFTP
配置FTP服务器的基础信息,以及配置递归搜索、不删除源数据文件、支持UTF-8编码
3 ConvertExcelToCSVProcessor
将读取到的Excel转换成CSVProcessor,主要配置在于CSVFormat为Microsoft Excel
4 UpdateAttribute
默认即可
5 ConvertRecord
配置Record Reader和Record Writer,将CSV转换成JSON类型
Record Reader需要配置CSVReader,如果没有这个选项,通过Create new service
创建即可,然后启动CSVReader
Record Writer需要配置JsonRecordSetWriter,同上
当配置好这两项后,正确结果应该如下:
6 SplitJson
默认即可
7 EvaluateJsonPath
在EvaluateJsonPath中,需要获取JSON中的每个字段的数据并重命名。Destiation设置为flowfile-attribute,即将area、city、province分发到后面的流程中。
8 ReplaceText
通过上一步获得了各个字段名称,可通过$
引用值,在Replacement Value处预写SQL。
insert into province_and_city values('$province','$city','$area')
9 PutSQL
只需要配置JDBC Connection Pool即可
10 启动流程
select *
from zxy.province_and_city;
二、多Excel数据同步
如果有两个表结构一样的Excel文件,那么我将数据存储到数据库后,我怎么区分数据原来属于哪个excel呢?
1 数据库修改
# 在数据库的zxy.province_and_city表中添加filename字段,用于存储excel文件名
alter table zxy.province_and_city add column filename varchar(25) null ;
2 流程修改
整个流程中,只需要修改ReplaceText Processor的Replacement Value
项即可。
修改为insert into province_and_city values('$province','$city','$area','$filename')
3 启动流程
修改完ReplaceText后,重启启动整体流程即可。
同步完成后,通过查询数据库,可以看出已经将filename插入到数据库中。filename的组成是Excel表名_Sheet页名.csv
以上是关于✨Nifi系列✨ Nifi同步并解析FTP服务器Excel文件,并存储到数据库的主要内容,如果未能解决你的问题,请参考以下文章