前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库同步工具etl之kettle

数据库同步工具etl之kettle

作者头像
简单的程序员
发布2020-04-20 11:21:25
2.5K0
发布2020-04-20 11:21:25
举报
文章被收录于专栏:奕仁专栏奕仁专栏

公司领导交给我了一个活,让我用etl工具将数据清洗,并同步到我们公司的数据中心,于是我便在网上找教程学习了etl。

ETL

ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换,迁移,所以了解并掌握一种etl工具的使用,必不可少,这里我介绍一个我在工作中使用了3年左右的ETL工具Kettle,本着好东西不独享的想法,跟大家分享碰撞交流一下!在使用中我感觉这个工具真的很强大,支持图形化的GUI设计界面,然后可以以工作流的形式流转,在做一些简单或复杂的数据抽取、质量检测、数据清洗、数据转换、数据过滤等方面有着比较稳定的表现,其中最主要的我们通过熟练的应用它,减少了非常多的研发工作量,提高了我们的工作效率,不过对于我这个.net研发者来说唯一的遗憾就是这个工具是Java编写的。

开源框架kettle

1、Kettle概念

Kettle是一款用java编写的开源ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。 Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。 Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。 Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。

2、下载和部署

žKettle可以在点下载 ž ž下载kettle压缩包,因kettle为绿色软件,解压缩到任意本地路径即可 3、Kettle环境配置(有Java环境的直接忽略此章节) 4、由于kettle是用java编写的,所以需要安装java环境,需要安装jdk并配置环境变量。

kettle的使用

作业(job)

负责将[转换]组织在一起进而完成某一块工作,通常我们需要把一个大的任务分解成几个逻辑上隔离的作业,当这几个作业都完成了,也就说明这项任务完成了。 1.Job Entry:一个Job Entry 是一个任务的一部分,它执行某些内容。 2.Hop:一个Hop 代表两个步骤之间的一个或者多个数据流。一个Hop 总是代表着两个Job Entry 之间的连接,并且能够被原始的Job Entry 设置,无条件的执行下一个Job Entry, 直到执行成功或者失败。 3.Note:一个Note 是一个任务附加的文本注释信息。

file
file

转换(Transformation)

定义对数据操作的容器,数据操作就是数据从输入到输出的一个过程,可以理解为比作业粒度更小一级的容器,我们将任务分解成作业,然后需要将作业分解成一个或多个转换,每个转换只完成一部分工作。

1.Value:Value 是行的一部分,并且是包含以下类型的的数据:Strings、floating point Numbers、unlimited precision BigNumbers、Integers、Dates、或者Boolean。 2.Row:一行包含0 个或者多个Values。 3.Output Stream:一个Output Stream 是离开一个步骤时的行的堆栈。 4.Input Stream:一个Input Stream 是进入一个步骤时的行的堆栈。 5.Step:转换的一个步骤,可以是一个Stream或是其他元素。 6.Hop:一个Hop 代表两个步骤之间的一个或者多个数据流。一个Hop 总是代表着一个步骤的输出流和一个步骤的输入流。 7.Note:一个Note 是一个转换附加的文本注释信息。

file
file

ž4.1 Kettle使用 Kettle提供了资源库方式的方式来整合所有的工作,但是因为资源库移植不方便,所以我们选择没有资源库; 1)创建一个新的transformation,点击 保存到本地路径,例如保存到D:/etltest下,保存文件名为EtltestTrans,kettle默认transformation文件保存后后缀名为ktr; 2)创建一个新的job,点击 保存到本地路径,例如保存到D:/etltest下,保存文件名为EtltestJob,kettle默认job文件保存后后缀名为kjb; 3) 新建转换, 然后连接源数据库和目标数据库,将源数据库的数据导入到目标数据库。 大致流程如下,对源数据源转换后的数据列表进行遍历,然后对目标数据源进行转换:

file
file

这是一个Kettle 的作业,第一个转换内容是查询的表数据,同时复制到记录上。

file
file

表输入中的语句为:

代码语言:javascript
复制
select * from hbp_record –hbp_record

代表的查询的表名。 值得注意的是:在这里只是为了测试循环遍历的整个流程,整个转换在使用时使用的应该是配置文件,通用的配置文件。 第二个 遍历获取功能是一个JavaScript脚本验证,主要使用的是获取上一个转换传递过来的数据。具体代码如下:

代码语言:javascript
复制
var prevRow=previous_result.getRows();//获取上一个传递的结果
if (prevRow == null &&(prevRow.size()=0))
{
    false;

}else{
    parent_job.setVariable("tables", prevRow);//ArrayList存储表名变量,以数组形式保存入table1,table2
    parent_job.setVariable("size", prevRow.size());//存储执行表的总数量
    parent_job.setVariable("i", 0);//循环控制变量
    /**
    TABLENAME 这里写死了,hbp_record 代表了需要查询的表,
    prevRow.get(0).getString("TABLES","")//这是通用版的
    */
    parent_job.setVariable("TABLENAME","HBP_RECORD");
    true;
}

第三步:检验字段的值 这个步骤代表类似Java中的for循环语句,进行循环遍历数据使用的,配置信息如下:

file
file

第五步:再次使用Javascript的脚步验证 主要功能是:进行数据的累加,遍历执行表的数据 代码如下:

代码语言:javascript
复制
var list_Tables =parent_job.getVariable("tables").replace("[","").replace("]","").split(",");
var size = new Number(parent_job.getVariable("size"));
var i = new Number(parent_job.getVariable("i"))+1;
if(i<size){
    parent_job.setVariable("TABLENAME", list_Tables[i]);
}
parent_job.setVariable("i",i);
true;
file
file
file
file
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ETL
  • 开源框架kettle
    • 1、Kettle概念
    • kettle的使用
      • 作业(job)
        • 转换(Transformation)
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档