【Kettle】数据整合之FTP下载+本地照片文件导入Oracle数据库

一、数据整合业务场景

    1.1 背景

因GA某系统进行调整,导致原先从该系统备份数据库获取的相应数据资源无法正常获取,后续的数据统一由GA某系统每日将前一日的ZTRY照片数据压缩后上传到指定的FTP服务器上,需要从该FTP上下载下来,解压后将JPEG照片数据解析加载进入数据库。

    1.2 目标

需要建立作业可以定时从FTP下载服务器将ZIP文件下载到本地指定文件夹,将ZIP文件解压后,获得JPEG格式照片,通过Kettle转换将照片进行解析,同时按照一定的规则将照片的名字等信息解析拼接成唯一主键,以实现将本地照片文件整合到数据库中进行存储,整合完毕后将ZIP压缩文件转移至备份文件夹,同时将解压后的文件夹及照片文件删除。

    1.3 工具及组件

工具:IDI(基于Kettle二次开发的ETL工具)

组件:①转换:输入组件、输出组件、

②作业:

二、数据整合设计思路

    2.1 作业调度设计思路

设计思路如下图流程所示:

1、获取时间变量

作业启动后调用时间变量转换进行时间变量的捕获,获取经过格式化处理的昨日日期。

2、检查目录情况

进入本地指定下载文件夹中进行查看,确认文件夹中是否已经下载昨日日期的ZIP文件。

3、执行判断

若下载文件夹中为空,或不存在昨日日期的ZIP文件,则跳转进入FTP下载;反之,跳出作业停止,等待下一次作业启动。

4、FTP下载文件

根据日期从FTP上下载符合日期要求的ZIP文件,并将其保存在本地指定的下载文件夹中。

5、解压缩ZIP文件

将ZIP文件解压缩到指定的解压文件夹。

6、数据清洗整合

调用数据清洗处理整合转换,捕获ZIP文件中的数据并针对数据进行清洗、转换、处理、加载。

7、删除目录

数据清洗转换完成,数据正常加载进入数据库后,将解压缩产生的目录和文件删除,释放空间。

8、移动文件

将ZIP文件转移到备份文件夹进行保存,以便后期数据出现问题进行恢复或者进行核查。

9、结束

结束整个作业,等待作业下一次启动。

    2.2 转换抽取设计思路

        2.2.1 捕获时间变量

设计思路如下图流程所示:

1、获取系统日期时间

获取当前系统的昨日零点时间,即若本日为2018年07月15日18时36分47秒,则捕获的时间应为2018/07/14 00:00:00.000。

2、日期时间格式化

将上述2018/07/14 00:00:00.000格式化为20180714。

3、设置时间变量

将格式化的日期数据作为变量传入变量中保存。

        2.2.2 数据清洗整合

设计思路如下所示:

1、捕获照片文件名称

2、照片文件解析

将照片文件解析成为二进制数据。

3、照片数据清洗整合

将数据流中的数据通过组件进行清洗、转换,整合成目标数据流。

4、数据加载

将目标数据流加载进入数据库中存储。

三、数据整合解决方案

3.1 作业调度模型

3.1.1 作业调度流程

图示:作业调度模型

3.1.2 作业模型解析

3.1.2.1 启动

            3.1.2.2 调用时间变量转换模型

            3.1.2.3 检查目录是否为空

            3.1.2.4 跳出作业

            3.1.2.5 FTP下载

            3.1.2.6 解压缩文件

            3.1.2.7 调用数据清洗整合转换模型

            3.1.2.8 删除解压缩目录

            3.1.2.9 移动压缩文件

            3.1.2.10 作业结束

    3.2 整合转换模型

        3.2.1 整合转换流程

图示:捕获时间变量转换。

图示:数据清洗整合转换

        3.2.2 整合转换流程解析

            3.2.2.1 捕获时间变量转换

               3.2.2.1.1 获取系统日期时间

               3.2.2.1.2 日期时间格式化

//Script here

var SYS_DATE = date2str(TODAY,‘yyyyMMdd‘);

               3.2.2.1.3 设置时间变量

            3.2.2.2 数据清洗整合转换

                3.2.2.2.1 获取文件名

                3.2.2.2.2 照片转换二进制

/Script here

var file = new java.io.File(filename);

var fileInputStream = new java.io.FileInputStream(file);

var Content = org.pentaho.di.core.Const.createByteArray(file.length());

fileInputStream.read(Content,0,file.length());

fileInputStream.close();

                3.2.2.2.3 拆分字段

                3.2.2.2.4 字符串替换

                3.2.2.2.5 字段选择

                3.2.2.2.6 列转行

                3.2.2.2.7 数据修改

//Script here

var zp01 = ZP_1;

var zp02 = ZP_2;

var zp03 = ZP_3;

var zp04 = ZP_4;

var zp05 = ZP_5;

var zp06 = ZP_6;

var zp01modifytime = ZP_1_LASTMODIFYTIME;

var zp02modifytime = ZP_2_LASTMODIFYTIME;

var zp03modifytime = ZP_3_LASTMODIFYTIME;

var zp04modifytime = ZP_4_LASTMODIFYTIME;

var zp05modifytime = ZP_5_LASTMODIFYTIME;

var zp06modifytime = ZP_6_LASTMODIFYTIME;

var zpscrq = replace(dirname,‘_ZP‘,‘‘);

var dirname1 = ‘ftp://10.78.1.30/‘+ dirname + ‘.zip‘;

if(zp01==null && zp02==null && zp03==null){
     zp01=zp04;
     zp02=zp05;
     zp03=zp06;
     zp01modifytime=zp04modifytime;
     zp02modifytime=zp05modifytime;
     zp03modifytime=zp06modifytime;

}

                3.2.2.2.8 获取系统信息

                3.2.2.2.9 字段选择

                3.2.2.2.10 过滤记录

                3.2.2.2.11 插入更新

                3.2.2.2.12 抛弃无效数据

四、其他说明

暂无。

原文地址:https://www.cnblogs.com/badian/p/9319015.html

时间: 2024-08-24 10:57:11

【Kettle】数据整合之FTP下载+本地照片文件导入Oracle数据库的相关文章

kettle 7.1.0.0-12下载安装使用并连接oracle数据库

下载地址:https://community.hds.com/docs/DOC-1009855作者下载的是最新版本,jdk要用最新版jdk8.162打开spoon.bat,新建转换,连接DB如果无法连接,说明缺少odbc jar包安装oracle 客户端,到下图目录拷贝到kettel的lib目录下重新打开spoon.bat连接db成功. 原文地址:http://blog.51cto.com/12185273/2102882

ftp下载指定日期文件(文件名中含日期)

网上查了很多,但是执行都各种错误,然后自己研究了半天,整了个能用的 要求:FTP文件名中含日期 步骤:将一下代码保存为BAT脚本,配置定时任务即可 @echo offrem 计算指定天数之前的日期set DaysAgo=1rem 假设系统日期的格式为yyyy-mm-ddcall :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDaysset /a PassDays-=%DaysAgo%call :DaysToDate %PassDays%

利用TOAD实现把EXCEL数据导入oracle数据库

利用TOAD实现把EXCEL数据导入oracle数据库 工具:   Toad11.7z(百度搜索,直接下载) 1.将Excel文件中某些字段导入到Oracle数据库的对应表 连接想要导入的数据库 ,然后Database->Import->Table Data打开了导入窗口,如下图   选择一个数据库表,点击Show Data按钮,可以显示表中的内容 其中schema 就是这张表的所属用户 Object type 就是 table Object name 就是表的名称 Commit mode 

当地使用impdp导出服务器转储文件,本地使用impdp导入远程数据库用户

本地使用impdp导出服务器转储文件,本地使用impdp导入远程数据库用户 1)expdp是可以在客户端上生成转储文件的 2)impdp是可以在不同的实例之间进行数据的迁移复制的 练习1: 1)将远程数据库WSJB用户使用expdp命令导出到本地磁盘的D:\下 Microsoft Windows [版本 6.1.7600] 版权所有 (c) 2009 Microsoft Corporation.保留所有权利. C:\windows\system32>sqlplus system/system S

c#如何将dataset中的数据批量导入oracle数据库

不要写insert语句,因为数据库字段太多了,有什么简单点的效率高的方法吗 public void MultiInsertData(DataSet ds) { string connt = "Oracle的连接字符串"; string sql = "select id,name,- from tablename";必须与ds中的一致 DataTable dt = ds.Defaults[0]; OracleConnection conn = new OracleCo

采用struts2+hibernate实现保存文件到Oracle数据库&&并附下载代码【导入即可用】;数据库中保存blob类型的二进制文件

原文:采用struts2+hibernate实现保存文件到Oracle数据库&&并附下载代码[导入即可用]:数据库中保存blob类型的二进制文件 源代码下载地址:http://www.zuidaima.com/share/1550463402478592.htm

代码执行批量Excel数据导入Oracle数据库

由于基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数据进入Oracle数据库的内容. 方法一: 1.准备数据:在excel中构造出需要的数据 2.将excel中的数据另存为文本文件(有制表符分隔的) 3.将新保存到文本文件中的数据导入到pl*sql中 在pl*sql中选择tools--text importer,在出现的窗口中选择Data from Te

批量Excel数据导入Oracle数据库 导入excel错误:外部表不是预期的格式 解决方案

在asp.net网站中导出Excel文件后,再把文件导入到数据库中. 读取Excel文件时,打开连接出错. 错误为:外部表不是预期的格式 解决:检查了一下,导出的Excel是标准文件不是html,没错,Excel文件正常. 调试代码,创建连接对象oleDbConnection也正常,但在conn.Open()打开链接时出错. 仔细看了下链接字符串,检查出了错误,Excel版本问题,Exce连接字符串版本是office2003的 ,更改为Excel2007版本则正常导入. 总结规则如下: usin

SSIS 实例 从Ftp获取多个文件并对数据库进行增量更新。

整个流程 Step 1 放置一个FTP Task 将远程文件复制到本地 建立FTP链接管理器后 Is LocalPatchVariable 设置为Ture 并创建一个变量设置本地路径 Operation 设置为 Receive files OverwriteFileAtDest 设置为True 同样的设置远程路径变量 Step 2 放置一个Foreach Loop ,循环将文件内容导入到数据库 Collection 页中Enumerator 选择Foreach File Enumerator 图