1. 概述编辑
1.1 应用场景
文件输出算子 可将数据按行数拆分至多个文件,但存在以下问题:
场景 | 问题 |
---|---|
每次运行后,被拆分的文件存在重名情况 | 用户多次运行任务,根据数据量不同,被拆分的文件个数可能不同 若用户第一次运行任务,数据被拆分为 5 个文件,第二次运行任务数据被拆分为 3 个文件,上一次被拆分的文件依然存在,影响用户查看文件数据 |
每次运行后,被拆分的文件不存在重名情况 | 若被拆分的文件以日期和时间命名,文件不重名,但随着运行次数增多,生成的拆分文件过多,占用空间 |
本文提供方案解决上述问题。
1.2 实现思路
使用「shell 脚本」节点和「文件输出」算子:
「文件输出」算子将处理后的数据按照行数拆分为多个文件。
「shell 脚本」节点,每次只保留最新的拆分文件,将上一次生成的文件打包压缩备份起来,且只保留近 7 天的压缩文件。
2. 操作步骤编辑
本文
2.1 数据连接准备
1)本文方案中,需要使用 shell脚本 节点,所以需要配置 SSH 数据连接。步骤请参见:配置SSH协议数据连接
2)本文方案中,需要使用 文件输出算子 将数据拆分并输出为文件,所以需要准备一个FTP/SFTP/服务器本地目录数据连接,本文示例中,准备的是 FTP/SFTP 数据连接。
2.2 SH 文件准备
1)准备.sh脚本文件。
示例文件:SH文件.zip
.sh 文件代码如下:
用户根据实际情况修改下面代码,本文示例中,被拆分后的文件保存在/data/demo_files/wendy下,所以 search_path 的值为/data/demo_files/wendy;被拆分后的文件以测试开头命名,所以 folder_name 为测试。
#!/bin/bash
timestamp=$(date +%Y-%m-%d-%H:%M:%S) # 获取当前时间
# 定义要压缩的文件列表(包括路径)
folder_name="测试" # 将此处修改为需要查找和删除的文件夹名
search_path="/data/demo_files/wendy" # 将此处修改为目标文件夹的路径
find "$search_path" -type f -iname "*$folder_name*.xlsx" -exec tar -rvf "$search_path/$folder_name备份_$timestamp.tar" {} +
# 如果 tar 文件为空(即没有找到文件),则删除它
if [ ! -s "$search_path/$folder_name_$timestamp.tar" ]; then
rm "$search_path/$folder_name_$timestamp.tar"
echo "没有找到名为 $folder_name 的 .xlsx 空文件,因此未删除压缩文件。"
fi
days_ago=$(date -d "7 days ago" +%Y%m%d)
# 使用find命令找到并删除7天前的.tar文件
find "$search_path" -type f -name "*.tar" ! -newermt "$days_ago" -exec rm -f {} \;
# 输出完成消息
echo "已删除超过$days_ago前的所有.tar文件。"
find "$search_path" -type f -iname "*$folder_name*.xlsx" -delete
2)将 .sh 脚本文件上传到/opt/ceshi下。如下图所示:
3)赋予 .sh 脚本文件执行权限。如下图所示:
chmod +x wenjian.sh
2.3 添加参数
本文示例中,被拆分的文件名称中包含日期,方便删除 7 天之前的文件。所以,需添加一个日期参数,被拆分文件名称中引用该参数即可。
1)新建定时任务。
2)点击工具栏中的参数列表,添加参数 date ,类型为日期,值为 yyyy-mm-dd 。如下图所示:
2.4 设置 shell 脚本节点
拖入「shell脚本」节点。SSH 连接选择 2.1 节中配置的 SSH 数据连接,「脚本路径」中输入 SH 文件所在的路径,如下图所示:
2.5 文件拆分并输出
1)拖入「数据转换」节点,与「shell脚本」节点相连,进入「数据转换」节点。
2)拖入「DB表输入」算子,读取文件数据。如下图所示:
3)拖入「文件输出」算子,将数据拆分为多个文件。
文件目标选择 2.1 节中的 FTP/SFTP 数据连接;文件夹地址选择 2.2 节中 SH 文件的 search_path 值;文件名为 2.2 节中 SH 文件的 folder_name 值+2.3节的参数,为测试${date};每 400 行拆分为一个文件,文件重名策略选择:文件重名,停止写入并报错。如下图所示:
4)点击右上角「保存」按钮。
2.6 效果查看
1)运行该任务后,被拆分的文件如下图所示: