历史版本3 :循环多次读取Linux环境文件同步数据 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 应用场景

1.2 实现思路

1.3 任务展示

2. 操作步骤编辑

2.1 场景模拟

服务器所在目录/data/demo_FR/webroot/WEB-INF/local_files/df_files/csv文件夹中,会定时上传未知数目的 csv 表数据。这些表数据最终定时手工汇总到数据库中的某张表中,存在效率低下和容易出错的问题。

现希望提高汇总数据的速度与准确性。

本文示例 csv 文件夹中存在两张表。如下图所示:

1681453484386719.png

示例表数据:csv.zip

1681463131595357.png

2.2 方案说明


2.3 准备工作

本文使用「Shell 脚本」节点,扫描指定文件夹下的 csv 文件,所以需要做以下准备。

1)由于需要在目标服务器执行指定 Shell 脚本,因此需要首先通过 SSH 远程连接至目标服务器。

因此新建 SSH 协议数据连接,参考:前提条件

4.png

2)本文使用「Shell 脚本」节点,扫描指定文件夹下的 csv 文件,所以需要准备 .sh 文件。

新建 file_search.sh 文件。代码如下所示:

本文示例 file_search.sh 文件:file_search.zip

#!/bin/bash
# 获取输⼊参数
path=$1 # 指定要扫描的文件夹路径
output=$2 # 指定输出文件的路径
# 输出表头
echo "文件名,绝对路径,修改时间" > $output
# 遍历文件夹
for file in $(ls $path)
do
# 获取文件名、绝对路径和修改时间
filename=$(basename $file)
abspath=$(realpath $path/$file)
modtime=$(stat -c %y $path/$file | awk '{print $1,$2}')
# 将文件名、绝对路径和修改时间输出到csv文件
echo "$filename,$abspath,$modtime" >> $output
done
# 输出完成信息
echo "扫描完成!输出文件路径为:$output"

3)将 file_search.sh 文件上传到 csv 文件夹所在的目录中。如下图所示:

1681455860262833.png

4)新建一个服务器本地目录数据连接,服务器本地目录选择存放 csv 文件夹的路径。

9.png

2.4 设置 Shell 脚本节点

本节目的:扫描指定文件夹下的 csv 文件,结果输出到 file_list.csv 表中。file_list.csv 表中包含 csv 文件夹下表信息的:文件名、绝对路径、修改时间。

1)新建定时任务,添加「Shell脚本」节点。

2)在「参数设置」中新增两个文本类型的参数。如下表所示:

参数说明
source_folder指定要扫描的文件夹路径,本文是 csv 文件夹
/data/demo_FR/webroot/WEB-INF/local_files/df_files/csv
target_csv

指定输出文件的路径,file_list1.csv名称可自定义,为自动生成的文件

包含 csv 文件夹下表信息的:文件名、绝对路径、修改时间

6.png

/data/demo_FR/webroot/WEB-INF/local_files/df_files/file_list.csv

7.png

3)「Shell脚本」节点中,「脚本路径」填写SSH目标端要执行的Shell脚本完整路径,「脚本参数」添加本节第二步设置的参数。如下图所示:

8.png

4)右键点击「Shell脚本」节点,点击运行节点,可生成  file_list.csv 表。如下图所示:

10.png

2.5 设置数据转换节点

本节目的:读取 2.4 节的输出文件 file_list.csv 表,获取扫描文件的相对路径,并将相对路径输出为参数。

2.5.1 读取输出文件

1)添加「数据转换」节点,与「Shell脚本」节点相连。

2)进入「数据转换」节点,添加「文件输入」算子,读取 file_list.csv 表。如下图所示:

11.png

点击数据预览,如下图所示:

1681459072872639.png

2.5.2 获取扫描文件的相对路径

添加「Spark SQL」算子,获取扫描文件的相对路径。如下图所示:

12.png

点击数据预览,如下图所示:

1681459100863251.png

2.5.3 将扫描文件的相对路径输出为参数

添加参数输出算子,将扫描文件的相对路径输出为参数。如下图所示:

15.png

2.6 设置循环

1)添加「循环容器」节点,设置如下图所示:

16.png

2)「循环容器」节点内添加「数据转换」节点,并进入「数据转换」节点内。

3)添加「文件输入」算子,通过待扫描文件的相对路径,读取要扫描的文件。如下图所示:

17.png

4)添加「DB表输出」算子,将扫描文件的数据汇总到某张表中。如下图所示:

18.png

5)保存并运行任务。

3. 结果展示编辑

test_1数据库中,huizong 表数据如下图所示:

1681462828844584.png