数据仓库开发——Kettle使用示例

摘要:
Kettle是一个开园ETL工具,做数据仓库用Spoon。并把这两个统计数字放在数据库表的一行的两列中,即输出的结果有一行,一行包括两列,每列是一个统计值。后续再开发接口给别的组调用。现在用kettle去做貌似就简单多了,现在感受到的是开发起来方便,干净利落。
Kettle是一个开园ETL工具,做数据仓库用Spoon。
工具:下载Spoon,解压即可用
1、认识常用组件:
表输入
插入\更新
数据同步
文本文件输出
更新
自动文档输出
表输出
列转行
增加常量
增加序列
排序记录
行转列
过滤记录
数据库连接
合并记录
排序合并
记录关联(笛卡尔输出)
记录集连接
分组
在内存中分组
2、第一个例子
生成 100 个随机数,随机数取值于[0,100)之间, 计算小于等于 50 的随机数个数和 大于50 的随机数个 数。 并把这两个统计数字放在数据库表的一行的两列中, 即输出的结果有一行,一行包括两列,每列是一个统 计值。
数据仓库开发——Kettle使用示例第1张
1.生成随机数,0-1区间内
2.定义常量,100
3.计算,随机数乘以100,使得生成的数据在0~100区间内
这里后面有分支,默认是数据分发,这里要保证数据全部都流到两条支路去要选择复制分发模式,在计算器这个步骤上面右键,选择数据发送,复制发送模式
4.条件判断有几种方法,这里用的是根据java代码过滤记录
5.分组计算总条数,4步中结果为真进分组1,否则分组2,分组里面计算总条数
6.关联记录
7.输出
3、数据仓库
目标:数据仓库就是把别的业务组的表查出来, 再转换, 保存到我们这边创建的新的业务表中。后续再开发接口(http、webservice、dubbo等)给别的组调用。
3.1用户评价表中有各种评价得分,这里对经纪人的各种得分求平均分保存到bidb_brance中
数据仓库开发——Kettle使用示例第2张
0.建立数据库连接
数据源1:mysql://172.16.2.187:33096/jjskfang
数据源2:mysql://172.16.2.245:33096/bidb_branch
1.表输入
使用数据源1,
初始数据为:
SELECT ID, WORKER_ID, WORKER_NAME, USER_ID, USER_NAME, GRADE, SCORE, PROFESS_SCORE,
KNOW_SCORE, SERVICE_SCORE, TAGS, CONTENT, ORDER_ID, ORDER_TYPE, `STATUS`, MODIFY_TIME,
CREATE_TIME FROM jjskfang.CUSTOMER_COMMENT
WHERE `STATUS` = 1
2.字段选择
选择必要的字段,这里也可以省略这一步
选择:WORKER_ID, WORKER_NAME,SCORE, PROFESS_SCORE, KNOW_SCORE,SERVICE_SCORE
3.排序:选择排序字段为WORKER_ID,分组前必须对分组字段进行排序,类似禹sql里面的group by
4.分组:根据WORKER_ID分组,同时使用聚合函数(这里就完全类似sql里面的分组和聚合函数了),如下图:
数据仓库开发——Kettle使用示例第3张
5.计算器:用计算器计算出各个指标的平均数,如图:
数据仓库开发——Kettle使用示例第4张
6.插入|更新:这一步将数据保存到目标数据库中,准备工作为先在数据源2中创建需要的表:
建表如图:
数据仓库开发——Kettle使用示例第5张
插入|更新如图:选择数据源2,表为刚刚创建的表
数据仓库开发——Kettle使用示例第6张
这一步根据workerId查询判断执行更新或者插入操作,到这里这个简单的转换工作就完成了,可以去数据库里面查询一下,看到数据都出来了是不是满满的成就感呢
数据仓库开发——Kettle使用示例第7张
感悟:做到这里让我想到一个问题,以前做车辆管理系统高危用户五级风险预警,当时是用java算出来的,真是让人头大。先去查询用户驾驶行为,再查询用户行为报警等各种数据,然后拼命的循坏各种判断,得到分析后的数据再保存到另外一个表中,来来回回写了一堆代码,最后发现执行的时候,定时器一启动服务启内存就完全不够用了,因为我开始是一次性把所有数据查出来再分析的。然后又去想怎么改程序,最终终于拼凑出来了。
现在用kettle去做貌似就简单多了,现在感受到的是开发起来方便,干净利落。不知道放到定时器运行的时候性能效率怎么样?后续持续研究。
4、java调用Kettle示例
从网上复制的代码, 后续自己写示例验证
public class KettleTest {
public static void main(String[] args) {
String filename = "/wang/work/study/Kettle/sample/excel_trans.ktr";
try {
KettleEnvironment.init();
EnvUtil.environmentInit();
TransMeta transMeta = new TransMeta(filename);
Trans trans = new Trans(transMeta);
trans.execute(null); // You can pass arguments instead of null.
trans.waitUntilFinished();
if ( trans.getErrors() > 0 ){
throw new RuntimeException( "There were errors during transformation execution." );
}
}
catch (KettleException e ) {
// TODO Put your exception-handling code here.
System.out.println(filename);
System.out.println(e);
}
}
}
5、java开发定时器执行ktr脚本
这个步骤省略。
总结:工具的使用并不难,关键在于理解业务,还有写sql的能力!
仅供参考,不足之处还请见谅,欢迎指正!转载请标明出处。如有疑问,欢迎评论或者联系我邮箱1034570286@qq.com

免责声明:文章转载自《数据仓库开发——Kettle使用示例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇最终大赛作品——VGA简单显示、简单视力检测备战双 11!蚂蚁金服万级规模 K8s 集群管理系统如何设计?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle SQL获取每个分组中日期最大的一条数据

  在报表开发中,经常遇到这样的问题:分组后,只需要每个分组最新的一条数据,其他的就不要了   此时的思路应该是:对分组进行排序,并编号,然后select编号为1的记录即可。   代码如下: select rn,a,b,c from (select ROW_NUMBER() OVER(PARTITION BY a ORDER BY b DESC) r...

像Excel一样使用python进行数据分析(3)

像Excel一样使用python进行数据分析(1) 像Excel一样使用python进行数据分析(2) 7,数据汇总 第七部分是对数据进行分类汇总,Excel中使用分类汇总和数据透视可以按特定维度对数据进行汇总,python中使用的主要函数是groupby和pivot_table。下面分别介绍这两个函数的使用方法。 分类汇总 Excel的数据目录下提供了“...

kinect学习笔记(三)——深度数据的提取

一、创建Console工程 二、添加kinect引用 里面用引用,打开后 选择然后OK。 三、编写代码(有附加注释) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Task...

利用Kettle转储接口数据

1.     项目背景 1.1.  项目背景 数据接口 API:应用程序接口(Application Program Interface)的简称,是实现计算机软件之间数据通信的工具。同时API也是一种中间件,为各个平台提供数据共享。在大数据与物联网发展的背景下,目前有大量的数据接口被提供或发掘出来,提供给开发者使用,应用到生活中的每一个细节中。本文旨在阐述...

axios 将post请求数据转为formdata

axios({ url: '/api/index/getIndexlbt', method: 'post', data: { relevanceId:this.$route.params.id, pictureType:4},...

postgresql优化数据的批量插入

原文:http://www.cnblogs.com/mchina/archive/2012/08/11/2537393.html 有以下几种方法用于优化数据的批量插入。 1. 关闭自动提交:在批量插入数据时,如果每条数据都被自动提交,当中途出现系统故障时,不仅不能保障本次批量插入的数据一致性,而且由于有多次提交操作的发生,整个插入效率也会受到很大的打击。解...