【Java实践】Kettle从一次实验说起
一,安装Kettle
1,关于简易安装Kettle
第一次接触kettle
(以前只是听过罢了),摸索了几天,在mac
源码安装失败,转而快速安装。在mac
上安装最新版kettle
并成功启动代码如下:
☁ ~ brew install kettle
☁ ~ cd /usr/local/Cellar/kettle/8.2.0.0-342/
☁ 8.2.0.0-342 cd libexec
☁ libexec spoon.sh
2,关于源码尝试安装kettle
git clone https://github.com/pentaho/pentaho-kettle
# or
git clone git@github.com:pentaho/pentaho-kettle.git
- 设置
setting.xml
将 setting.xml
参见: settings.xml 在你的Maven
启动目录/.m2
中。
☁ pentaho-kettle [master] ⚡ ll /Users/zhangbocheng/.m2
total 8
drwxr-xr-x 97 zhangbocheng staff 3104 11 8 17:28 repository
-rw-r--r-- 1 zhangbocheng staff 2345 11 8 20:10 setting.xml
- 安装
☁ pentaho-kettle [master] mvn clean install >> /Users/zhangbocheng/Desktop/kettle.log
- 关于
error.log
未设置 setting.xml
报错问题
.....................................
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 47:49 min
[INFO] Finished at: 2019-11-08T17:44:01+08:00
[INFO] Final Memory: 230M/985M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project pdi-ce: Could not resolve dependencies for project org.pentaho.di:pdi-ce:pom:9.0.0.0-SNAPSHOT: Could not transfer artifact org.hitachivantara.karaf.assemblies:client:zip:9.0.0.0-20191107.125717-160 from/to pentaho-public (http://nexus.pentaho.org/content/groups/omni/): Failed to transfer file http://nexus.pentaho.org/content/groups/omni/org/hitachivantara/karaf/assemblies/client/9.0.0.0-SNAPSHOT/client-9.0.0.0-20191107.125717-160.zip with status code 502 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <goals> -rf :pdi-ce
设置 setting.xml
后,就一直处在等待中。
二,实验案例
关于课程实验,第一次需要亲手搭建Kettle
,这算是一次比较有意思的工程实践机会,花最少的时间来认识认识比较流行而且强大的ETL
工具之一--Kettle
。
1,关于实验题目
任务描述:用kettle
完成下列实验,结果存储到MySQL
(或者CSV
)。已知Excel
文件,包含列(姓名,年龄,身份证号码,性别,挂号日期时间,门诊号),数据若干。
生成数据1,包含列(日,性别,儿童/青年/中年/老年,人次),其中儿童/青年/中年/老年的年龄段自己定义;
生成数据2,包含列(省份,hour,人次)
第一次接触kettle
,力求简单,仅考虑输入输出均为Excel
,首先按照题目要求捏造一批数据,如下图所示:
Excel
字段说明:
姓名:字符串
年龄:整型
身份证号码:字符串
性别:字符串
挂号日期时间:日期时间型
门诊号:整型
进入安装目录/usr/local/Cellar/kettle/8.2.0.0-342/libexec
启动kettle
:
根据实验要求,其实所涉及的问题仅仅是输入和输出,转换(分组统计)。创建任务之初,有必要先百度or Google
看看kettle
的输入输出是如何实现的?
2,实例预热
最容易实现的简单案例就是生成随机数,并存储到txt
文件。
1)新建一个转换保存为test_random
(后缀为.ktr
)通过拖拽插件方式,在核心对象->输入和输出分别拖拽“生成随机数”和“文本文件输出”两个按钮,然后点击“生成随机数”并按下sheft
键,用鼠标指向“文本文件输出”,以生成剪头,表示数据流向。如下图:
2)编辑输入流,即“生成随机数”按钮,如图所示:
关于支持的随机数据类型有:
3)然后编辑输出流,即“文本文件输出”按钮,如图所示:
输出文件名支持预览模式,即点击图中“显示文件名...”按钮:
4)最后执行,看看结果。
3,实验步骤
通过上述简单实验,我们知道了输入输出流的基本操作,下面开始进入正题。
1)将上述实验中的输入输出全部改为Excel
。进行相关配置说明如下:
Excel
输入:
在文件选项下,表格类型根据实际进行适配(xls or xlsx
),在文件或目录后,点击“浏览”选择自己的源数据文件,然后点击“添加”;
在工作表选项下,点击“获取工作表名称...”添加工作表,即Excel
中的sheet
;
在字段选项下,点击“获取来自头部数据的字段...”自动获取字段,由于原Excel
中整型数据转入会变成浮点型,所以需要进行更改,如图所示:
最后可以进行预览。
Excel
输出:只需要配置输出文件名即可,其他均为默认。
2)接下来需要处理的就行核心步骤,即转换。首先针对生成数据1
进行分析,由于kettle
中分组需要首先进行排序,从而需要处理的点有:
(1)将挂号日期时间截取到日;
(2)对年龄按照一定标准进行转换(自己定义);
(3)按照待分组的字段进行排序;
(4) 进行分组统计。
按照上述思路,在“转换”和“统计”核心对象中,分别找到对应组件,完成基本数据流节点配置,如图所示:
在“字段选择”组件中,对时间进行处理。在元数据选项中,需要对Date
进行转换成String
,格式设置为yyyy-MM-dd
,同时可以对字段进行更名操作。另外还可以对字段进行选择,修改,移除。如图所示:
注意,这里如果不将时间设置为String
,进行一个小实验可以可以发现,最后存储的依然是带时间的日期,本次实验过程中在这个坎纠结了,错误地以为是kettle
不支持多关键字(两个以上)排序,如下图所示:
经过与各位大佬沟通确认,kettle
是不可能不支持对多关键的排序的,对此深信不疑,那么问题就从kettle
本身存在的可能bug
消失了,对一个小白而言,不熟悉kettle
本身应遵守的规则,这是致命的,只能对怀疑的其他种种可能进行逐一实验了。期间怀疑过待排序关键字的顺序问题,测试发现都不是问题的根本原因,整个过程下来只有对日期做过预处理,而且从错误中发现,引起错排的唯一合理解释就是日期按照预处理之前的原始数据的日期时间型排序的。单独对日期设计实验,如果对预处理生效,那么输出也是预期结果。
- 验证日期实验
输入流,如图所示:
假设日期类型不改成String
,如图所示:
输出流,结果预览,如图所示:
输出流,Excel
输出,如图所示:
验证实验室结果发现,预览数据并没有存储到输出Excel
中去,然后尝试转换为String
,输出便一致了。再次验证,kettle
对日期类数据处理有待提高。
在“数值范围”组件中,对年龄进行处理,划分标准自己定义(如下定义可能存在瑕疵)如图所示。
在“排序记录”组件中,按照生成数据要求,需要对日期,性别,年龄段进行来袭,如图所示。
在“分组”组件中,进行分组统计,如图所示。
3)执行,结果如图所示。
4,实验二简要说明
针对生成数据2
进行分析,需要处理的点有:
(1)将挂号日期时间设置
String
,由于不能直接从预设格式中提取日,需要采取字符串截取;(2)对日期和身份证进行字符串截取,分别提取日和省份代码(身份证前两位);
(3)按照待分组的字段进行排序;
(4)对省份和时间段进行值映射;
(4) 进行分组统计。
整体设计数据流图,如图所示:
在“剪切字符串”组件,设置如下:
在“省份值映射”和“时间值映射”组件中,分别设置如下:
运行结果,如图所示:
三,总结
通过本次实验,初步认识了一下强大的ETL
工具之kettle
,要想获取更多知识就得更多实验,从错误中反思学到的远比从成功中收获更多。作为工具,只有多多实验才能更好的掌握好它,印证了那句经典--“实践出真知”。
【Java实践】Kettle从一次实验说起的更多相关文章
- 2018-2019-20175205 实验三敏捷开发与XP实践《Java开发环境的熟悉》实验报告
2018-2019-20175205 实验三敏捷开发与XP实践<Java开发环境的熟悉>实验报告 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)>&l ...
- 2018-2019-2 20175306实验三敏捷开发与XP实践《Java开发环境的熟悉》实验报告
2018-2019-2 20175306实验三敏捷开发与XP实践<Java开发环境的熟悉>实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 1.没有Linux基础的同学建议先 ...
- 2018-2019-20175329 实验三敏捷开发与XP实践《Java开发环境的熟悉》实验报告
2018-2019-20175329 实验三敏捷开发与XP实践<Java开发环境的熟悉>实验报告 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)>&l ...
- 20145330《Java程序设计》第五次实验报告
20145330<Java程序设计>第五次实验报告 实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统 4.结队伙伴 ...
- 20145320《Java程序设计》第三次实验报告
20145320<Java程序设计>第三次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.22 15: ...
- 20145227《Java程序设计》第3次实验报告
20145227<Java程序设计>第3次实验报告 实验步骤与内容 一.实验内容 XP基础 XP核心实践 相关工具 二.实验过程 (一)敏捷开发与XP 1.XP是以开发符合客户需要的软件为 ...
- ETL实践--kettle转到hive
ETL实践--kettle只做源数据的抽取,其他数据转换转到hive上. 1.用hive代替kettle的数据关联的原因 (1).公司之前的数据ELT大量使用了kettle.用kettle导原始数据速 ...
- 20162330 实验一 《Java开发环境的熟悉》 实验报告
2016-2017-2 实验报告目录: 1 2 3 4 5 20162330 实验一 <Java开发环境的熟悉> 实验报告 课程名称:<程序设计与数据结构> 学生班级:1623 ...
- 2018-2019-20175307实验一《Java开发环境的熟悉》实验报告
实验内容与结果 一.Java开发环境的熟悉-1 1.实验要求: 0 参考实验要求 1 建立"自己学号exp1"的目录 2 在"自己学号exp1"目录下建立src ...
- 2018-2019-2 20175205实验一《Java开发环境的熟悉》实验报告
2018-2019-20175205实验一<Java开发环境的熟悉>实验报告 实验步骤 (一)命令行下Java程序开发 在Linux下运行结果: 在IDEA中运行结果: (二)IDEA下J ...
随机推荐
- FreeRTOS优化与错误排查方法
写在前面 主要是为刚接触 FreeRTOS 的用户指出那些新手通常容易遇到的问题.这里把最主要的篇幅放在栈溢出以及栈溢出j检测上,因为栈相关的问题是初学者遇到最多的问题. printf-stdarg. ...
- bugku 一个普通的压缩包
压缩包打不开,用winhex打开压缩包,发现头文件是zip的,将后缀改为zip,成功解压. 打开发现还是个压缩包,而且打不开,提示secret.png损坏,使用winhex打开. 将a8 3c 7a ...
- 关于padding被计算在width中问题——box-sizing相关
目录 盒子模型 与box-sizing有什么关系 我们为什么要开历史的"倒车" bootstrap怎么解决的 控件的box-sizing 注意甄别 前一阵子遇到一个小问题,在同样的 ...
- django后台管理-admin
0922自我总结 django后台管理-admin 一.模型注册 admin.py 注册方式一: #在对于注册的app中的admin文件中导入模型然后注册模型 admin.site.register( ...
- 「看完不后悔系列!」Maya的建模小技巧
Maya 将最大的联合影响力降至最低 最大的联合影响力是游戏角色装备的已知要求. 但是,对于每种类型的生产来说,这实际上都是一个很好的工作流程. 从透视图上看,如果你将联合影响力从4更改为5,则不一定 ...
- 关于用gulp合并压缩seaJs模块
现在很多人都在用seaJs来开发项目,seaJs上手容易,操作简单.但在后期做合并压缩的时候却中了个巨大无比的坑,但坑也总得有人来填.于是花了将近一个星期的时间来填了这坑,现将填坑的一些心得与大家分享 ...
- lodash 学习笔记
一.介绍 官方文档: 中文 - https://www.lodashjs.com/docs/latest 英文- https://lodash.com/docs/4.17.15 1.作用 lodash ...
- Dropzone.js
2015-11-25 发布 DropzoneJS 官网没有中文版的,很多东西只能跟着自己的感觉去理解,有些地方把握不了是否准确,在网上搜了一下中文版,看到一位大神简易的中文版 个人觉得和原官网对比着看 ...
- C#的集合类型及使用技巧
在日常开发过程中,我们不能避免的要对批量数据处理,这时候就要用到集合.集合总体上分为线性集合和非线性集合.线性集合是指元素具有唯一的前驱和后驱的数据结构类型:非线性集合是指有多个前驱和后驱的数据结构类 ...
- 移动端真机调试--weinre
一.安装 首先确保你的电脑上有node环境,然后使用cnpm或npm 安装 windows下 npm install weinre -g --registry=https://registry.npm ...