✨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

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文件,并存储到数据库的主要内容,如果未能解决你的问题,请参考以下文章

数据湖:数据同步工具NiFi

数据湖:数据同步工具NiFi

NIFI同步API接口数据

Nifi:如何在 nifi 中同步两个目录

从nifi中的xml中提取属性

尼菲 |使用 Nifi 表达式进行 Json 解析