1. 概述
1.1 应用场景
FTP 服务器上的文件不定期自动更新,每次通过新建文件更新数据。用户希望自动读取这些文件的所有信息并将信息存储到数据库表中。
1.2 实现思路
文件输入 算子+参数实现。
「文件输入」算子每天读取新增的文件数据,将数据同步到数据库表中。
2. 前提条件
1)若需要读取本地的 Excel 和 CSV 文件数据至 FineDataLink,需要新建一个「服务器本地目录」数据连接,并将要读取的文件放到%FDL%/webroot/WEB-INF/local_files/路径下,并且有该数据连接的使用权限。具体请参见:配置服务器本地目录数据连接
2)若需要读取远程 FTP/SFTP 服务器 Excel 和 CSV 文件数据,需要配置 FTP/SFTP数据连接,并且有该数据连接的使用权限。具体请参见:配置FTP/SFTP数据连接
本方案适用于 4.0.24 及之后版本。
注:本文示例是从 FineDataLink 服务器本地读取文件。
3. 示例一:基于文件修改时间判断新增文件
本示例适用于:文件夹中的文件名称中不包含文件新增时间,以新增文件的方式新增数据,不更新原有文件数据。
示例数据:csv文件.zip
3.1 设置参数
1)新建定时任务。
2)点击参数设置,设置参数 time ,值为yyyy-mm-dd,代表取 ${cyctime} (任务执行时间) yyyy-mm-dd 格式的值。如下图所示:
注:${cyctime} 为定时任务在 调度配置 中设置的每次运行的时间节点,格式为 yyyy-mm-dd hh:mm:ss
3.2 读取文件夹内数据
1)拖入「数据转换」节点,进入「数据转换」节点。
2)拖入「文件输入」算子,选择要读取的文件夹,「文件筛选」处设置文件修改时间大于参数 time ,筛选出新增文件。
如果设置每天晚上 11 点开始执行任务,那么每天此处筛选的就是从今天 0 点到今晚 11 点新增的文件。(所以需要保证每天晚上 11 点到 12 点之间不再新增文件)
「文件修改时间」说明如下:
理解示例:比如某文件夹中昨天的表是 A 和 B,今天新增表 C ,更新表 B 中的数据,「文件筛选」中筛选「文件修改时间」为今天的表,可筛选出表 C 和表 B(表 B 中的所有数据,非今天更新的数据)。
精确度仅到分钟,暂时无法精确到秒级别。
注:「文件输入」算子具体设置项介绍请参见:功能说明
注:文件筛选设置步骤如下:
3)点击「数据预览」,可看到新增的文件数据已被读取。如下图所示:
3.3 数据输出
1)拖入「DB表输出」算子,将新增数据输出到数据库表中。如下图所示:
2)写入方式选择「直接将数据写入目标表」,将全部数据写入到目标表中。如下图所示:
3)点击右上角「发布」到生产模式。
3.4 定时执行
点击「调度计划」,定时执行任务。如下图所示:
注:下图中设置每天 23:55:55 执行任务,需保证该时间到晚上 24 点之前,无新增文件生成。
3.5 结果展示
4. 示例二:基于文件名称判断新增文件
本示例适用于:文件名中包含文件新增时间,以新增文件的方式新增数据,不更新原有文件数据。
示例数据:2023-05-29库存.xls
本示例执行时间为 2023-05-29 ,筛选出 2023-05-29 新增的文件。
4.1 设置参数
1)新建定时任务。
2)点击参数设置,设置参数 time ,值为yyyy-mm-dd,代表取 ${cyctime} (任务执行时间) yyyy-mm-dd 格式的值,目的是筛选任务执行时当天新增的文件。如下图所示:
注:${cyctime} 为定时任务在 调度配置 中设置的每次运行的时间节点,格式为yyyy-mm-dd hh:mm:ss
4.2 读取文件夹内数据
1)拖入「数据转换」节点,进入「数据转换」节点。
2)拖入「文件输入」算子,选择要读取的文件夹,「文件筛选」处设置要读取的文件名称中包含参数 time ,筛选出新增文件。
如果设置任务定时执行时间为每天晚上 11 点开始执行,那么每天此处筛选的就是从今天 0 点到今晚 11 点新增的文件。(需要保证每天晚上 11 点到 12 点之间不再新增文件)
注:「文件输入」算子具体设置项介绍请参见:功能说明
3)点击「数据预览」,可看到新增的文件数据已被读取。如下图所示:
4.3 数据输出
1)拖入「DB表输出」算子,将新增数据输出到数据库表中。如下图所示:
2)写入方式选择「直接将数据写入目标表」,将全部数据写入到目标表中。如下图所示:
3)点击右上角「发布」按钮,发布到生产模式。
4.4 定时执行
点击「调度计划」,定时执行任务。如下图所示:
注:下图中设置每天 23:55:55 执行任务,需保证该时间到晚上 24 点之前,无新增文件生成。