相关文章推荐
体贴的路灯  ·  需要为批量电子邮件提取器添加一个正则表达式 ...·  1 年前    · 
飘逸的黄瓜  ·  int32 最大值 python-掘金·  1 年前    · 
至今单身的橙子  ·  python中的四种集合数据类型(列表,元组 ...·  2 年前    · 
坏坏的帽子  ·  TextBox.Format 屬性 ...·  2 年前    · 
Code  ›  kettle学习【大牛经验】开发者社区
https://cloud.tencent.com/developer/article/1187714
谦和的蘑菇
2 年前
作者头像
Java帮帮
0 篇文章

kettle学习【大牛经验】

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > Java帮帮-微信公众号-技术文章全总结 > kettle学习【大牛经验】

kettle学习【大牛经验】

作者头像
Java帮帮
发布 于 2018-08-16 15:51:29
3.3K 0
发布 于 2018-08-16 15:51:29
举报

ETL是EXTRACT(抽取)、TRANSFORM(转换)、LOAD(加载)的简称,实现数据从多个异构数据源加载到数据库或其他目标地址,是数据仓库建设和维护中的重要一环也是工作量较大的一块。当前知道的ETL工具有informatica, datastage,kettle,ETL Automation,sqoop,SSIS等等。这里我们聊聊kettle的学习吧(如果你有一定的kettle使用,推荐看看Pentaho Kettle解决方案,这里用kettle实践kimball的数据仓库理论)

内容有 :认识kettle、安装kettle、简单入门实例、进阶实例、Linux中kettle部署、kettle发邮件、常见错误

认识kettle

kettle是纯java开发,开源的etl工具。可以在Linux、windows、unix中运行。有图形界面,也有命令脚本还可以二次开发。(官方社区:http://forums.pentaho.com/;官网wiki:http://wiki.pentaho.com/display/COM/Community+Wiki+Home;源码地址:https://github.com/pentaho/pentaho-kettle)

安装kettle

1.kettle是基于java开发的,所以需要java环境(下载jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html)

2.kettle使用时,需要访问相关的关系型数据库,则需要下载对应的链接驱动。比如我们访问MySQL,则下载相应的驱动解压后放入kettle文件的lib目录下

3.下载kettle并解压到自定义位置。kettle其实是以前的叫法,现在官方称为:PDI(Pentaho Data Integeration)。在windows中,双击目录中的Spoon.bat启动kettle.

简单的kettle实例

1.新建作业/转换(功能区:文件 --> 新建 --> 作业;新建-->转换)

一个作业(job,文件以kjb结尾)的主体是转换(transform,以ktr结尾),job主要来设置调度,可以有影子拷贝,任一拷贝信息修改所有拷贝的都被修改;transform做主体的内容,控件名称唯一。

2.三个控件(start、转换、成功)和流程线(hop);

start:job开始的地方,可以设置开始的时间、频率、周期等(但要求kettle不能关闭,有点挫)

转换:后续详解

成功:job结束

流程线:关联两个控件(实体),指定数据流。同时还可以设置是否可用、分发模式、错误输出等;添加方式:按住shift进行鼠标拖动

3.转换的工作

新建的转换:job中需引用该转换文件

加入我们现在要同步MySQL中的一张表。在转换中要有输入和输出。

> 表输入:先配置链接(完成后测试一下是否OK),再输入查询sql(比如:select id from tab2 limit 10;)

>excel输出。,指定输出路径

> 完成转换的配置后保存,在job中引用保存的文件。

> 完成,结束!

进阶实例:

百度上看到了一篇关于kettle的作业,但是没有详细的过程。这里以此说明,全图过程如下。

作业说明:生成 100 个随机数,随机数取值于[0,100)之间, 计算小于等于 50 的随机数个数和 大于50 的随机数个 数。 并把这两个统计数字放在数据库表的一行的两列中, 即输出的结果有一行,一行包括两列,每列是一个统 计值。

第一步:生成随机数(输入-->生成随机数;需要生成100个随机数,右击控件,选择"改变开始开始...数量"为100)

第二步:增加常量(转换-->增加常量;给变量取个名称,类型和值。)

第三步:计算器(转换-->计算器;给出你的计算逻辑和计算出的字段;)

第四步:两个分支,一个输出;一个过滤;输出指定Excel,并执行数据发送模式(√:复制发送模式)

第五步:设置过滤(流程-->过滤记录);并双击控件填写对应的条件;

第六步:分组(统计-->分组),双击控件后有两个需要关注,一个是分组(相当于group by);一个是聚合(相当于count、sum等函数)

第七步:记录关联(连接-->记录关联(笛卡尔输出));这是一个join操作,但是没有on条件;但是控件中提供了sql中where条件的刷选

第八步:输出

Linux上部署kettle任务

kettle的"开始"控件虽然可以进行调度,但要求程序一直运行。在实际工作中通常在windos中测试,放到Linux中以crontab的方式进行调度。在Linux中以kitchen.sh执行job任务,pan.sh执行transform任务;这里我们以上面为实例,如何在Linux中进行部署。

第一步:通过WinSCP将kettle拷贝到Linux中,在拷贝路径中执行. kitchen.sh ,如果有参考消息输出则没有问题

第二步:对于已在windos中执行成功的地址、文件名、用户等参数进行变量替换。执行export KETTLE_HOME=/home/shj,会生成/home/shj/.kettle目录,通过编辑目录下的kettle.properties文件来设置变量。实例中,我们仅仅需要替换两个输出文件的地址为变量即可。

第三步:修改kettle目录下的.sh文件权限为可执行(chmod a+x *.sh);并执行文件。

这里说明:/norep:表示不往资源库中写日志,Do not log into the repository

/file:使用文件,The filename (Job XML) to launch

第四步:验证结果。

kettle中发送邮件

kettle发送邮件还是比较简单的,我们需要一个邮件发送的控件和对应的账号密码等自有信息

简单的流程:

需要配置发送邮件控件:

这样执行后,邮件就发送出去了。那么如何在kettle生产中利用邮件功能呢?我们可以将kettle的转换信息、统计信息、错误信息以文件的形式放入到指定的位置(或形成指定的参数),使用邮件以附件形式发送这些信息。

流程:

1.这里我们新增控件:添加文件到结果文件中;配置转换中的输出的文件

2.发送邮件中我们增加附件的配置,如下图

补充:如果觉得kettle发送的正文信息太多,可以配置邮件信息中,只发送邮件注释(注释信息需要自己写,如果是动态的话需要开发)

常见错误

第一种:Timestamp:Unable to get timestamp from resultset at index 3**,如图。这个错误需要在db链接的选线中设置命令参数zeroDateTimeBehavior(值:convertToNull )

第二种:字段的空被替换成了null值。这是kettle默认的设置,需要我们在kettle.properties中增加设置(KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL=Y)。

补充,在设计流程时我们并不希望出错了作业就停止了,而是继续执行并将错误信息以某种方式反馈出来。这时,我们可以通过“定义错误处理”来实现。

并将错误信息输出,供后续引用。

本文参与 腾讯云自媒体分享计划 ,分享自微信公众号。
原始发表:2018-08-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除
其他

本文分享自 Java帮帮 微信公众号, 前往查看

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

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

其他
评论
登录 后参与评论
0 条评论
热度
最新
登录 后参与评论
关于作者
Java帮帮
上海满吉教育科技有限公司CEO
0
文章
0
累计阅读量
0
获赞
前往专栏
领券
  • 社区

    • 专栏文章
    • 阅读清单
    • 互动问答
    • 技术沙龙
    • 技术视频
    • 团队主页
    • 腾讯云TI平台
  • 活动

    • 自媒体分享计划
    • 邀请作者入驻
    • 自荐上首页
    • 技术竞赛
  • 资源

    • 技术周刊
    • 社区标签
    • 开发者手册
    • 开发者实验室
  • 关于

    • 社区规范
    • 免责声明
    • 联系我们
    • 友情链接

腾讯云开发者

扫码关注腾讯云开发者

扫码关注腾讯云开发者

领取腾讯云代金券

热门产品

  • 域名注册
  • 云服务器
  • 区块链服务
  • 消息队列
  • 网络加速
  • 云数据库
  • 域名解析
  • 云存储
  • 视频直播

热门推荐

  • 人脸识别
  • 腾讯会议
  • 企业云
  • CDN加速
  • 视频通话
  • 图像分析
  • MySQL 数据库
  • SSL 证书
  • 语音识别

更多推荐

  • 数据安全
  • 负载均衡
  • 短信
  • 文字识别
  • 云点播
  • 商标注册
  • 小程序开发
  • 网站监控
  • 数据迁移

Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有

深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569

腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287

问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

Copyright © 2013 - 2023 Tencent Cloud.

All Rights Reserved. 腾讯云 版权所有

登录 后参与评论
 
推荐文章
体贴的路灯  ·  需要为批量电子邮件提取器添加一个正则表达式 - Excel VBA。
1 年前
飘逸的黄瓜  ·  int32 最大值 python-掘金
1 年前
至今单身的橙子  ·  python中的四种集合数据类型(列表,元组,集合,字典)_python数据类型集合_一名正在努力的大数据learner的博客-CSDN博客
2 年前
坏坏的帽子  ·  TextBox.Format 屬性 (Access) | Microsoft Learn
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号