ETL(kettle)创建工作任务job详解
ETL任务说明
一、 地方业务库 到 地方前置交换库
例:etl\nationfep\tofep\project目录下的配置
总体任务
文件:project.kjb
建设项目相关的表的数据的转化
- 任务开始
- 转换(主要配置)
- 任务结束
说明:任务是调度的单元,之后windows任务计划配置的任务和kettle任务一一对应。一个任务可以包含多个kettle转换,原则上没有限制,但应当按照某个相关主题进行配置,简化管理维护。
转换
文件:以ktr结尾
以project.ktr为例
数据库连接配置
source为地方业务库
target为地方前置交换库
整体思路:获取前置交换库和业务库中的数据,进行比对,根据比对结果(一致的、改变了的、删除了的、新增的),对前置交换库进行新增(新增的)、修改(改变了的、删除了的,删除的也是做修改,只是标记为删除),新增、修改的数据都将为新的版本(原来前置交换库中最大的版本+1,原本不存在记录,则版本为1)。 - 获取本次同步记录的版本号
读取前置交换库中的表的当前最大版本,将其加一,或设置为一(如最大值不存在,即无记录) - 从业务库中获取数据,并增加DES_ID、DES_VERSION、DES_REPORT_TIME列
- 为上一个步骤的输出的DES_REPORT_TIME、DES_VERSION列增加数据类型和长度
- 对上一个步骤的输出进行排序,为合并数据做准备
只需设置按ID进行升序排序 - 从前置交换库中获取数据
不获取DES_TAG列 - 等待源表输入结束再继续执行
- 合并记录,对业务库和前置交换库的记录进行合并比对,增加flagfield列,标识比对结果
- 根据上一步骤比对的结果进行分支处理
- 选择列,去掉flagfield(不需要此步骤也没问题)
- 增加DES_TAG列,值为0,标识这是新增的数据
- 对新增的数据进行插入/更新操作
- 选择列,去掉flagfield(不需要此步骤也没问题)
- 增加DES_TAG列,值为1,标识这是修改的数据
- 等待步骤11结束再继续执行
- 对修改的数据进行插入/更新操作
与步骤11类似 - 选择列,去掉flagfield(不需要此步骤也没问题)
- 增加DES_TAG列,值为2,标识这是删除的数据
- 等待步骤15结束再继续执行
- 对删除的数据进行更新操作
- 空操作
二、 国家前置交换库 到 国家业务库
例:etl\centerfep\fromfep\project目录下的配置
总体任务
文件:project.kjb
建设项目相关的表的数据的转化 - 任务开始
- 转换(主要配置)
- 任务结束
说明:任务是调度的单元,之后windows任务计划配置的任务和kettle任务一一对应。一个任务可以包含多个kettle转换,原则上没有限制,但应当按照某个相关主题进行配置,简化管理维护。
转换
文件:以ktr结尾
以project.ktr为例
数据库连接配置
source为国家前置交换库
target为国家业务库
整体思路:获取上一次同步的版本号,查找前置交换库中大于该版本号的数据,对业务库中的数据,进行新增、修改、删除,在无错误的条件下,更新本次同步的版本号。 - 获取上一次同步的版本号
- 获取前置交换库中版本号大于上一次同步的版本号的数据
不需要获取DES_ID、DES_REPORT_TIME、DES_VERSION列,需要获取DES_TAG列 - 根据DES_TAG列,进行分支处理,对DES_TAG为0、1的进行插入/更新,对DES_TAG为2的进行删除
- 对DES_TAG为0、1的进行插入/更新
- 对DES_TAG为2的进行删除
- 增加TABLE_NAME列,值与第1步骤的表名一致
- 等待步骤4、5成功再执行
- 更新版本号,标记本次同步的最大版本号
三、 Windows任务计划配置
每一个kettle job都需要相应配置一个Windows定时任务进行周期性执行。
在kettle的任务目录下,建立windows-job目录,
windows-job目录包含2个执行文件
.bat文件中的内容:
.vbs文件中的内容:
配置windows任务
控制面板->管理工具(小图标下才有)->任务计划程序
双击进入管理界面,点击创建任务
填写基本信息
选择执行的操作
操作->新建
指定执行周期
触发器->新建
新建完成后,在任务列表中右键刚刚新建的任务,点击启动。