第一次接触kettle
(之前只是听过罢了),摸索了几天,在mac
源码安装失败,转而快速安装。在mac
上安装最新版kettle
并成功启动代码以下:git
☁ ~ brew install kettle ☁ ~ cd /usr/local/Cellar/kettle/8.2.0.0-342/ ☁ 8.2.0.0-342 cd libexec ☁ libexec spoon.sh
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
中。github
☁ 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
报错问题apache
..................................... [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
后,就一直处在等待中。bash
关于课程实验,第一次须要亲手搭建Kettle
,这算是一次比较有意思的工程实践机会,花最少的时间来认识认识比较流行并且强大的ETL
工具之一--Kettle
。dom
任务描述:用kettle
完成下列实验,结果存储到MySQL
(或者CSV
)。已知Excel
文件,包含列(姓名,年龄,身份证号码,性别,挂号日期时间,门诊号),数据若干。maven
生成数据1,包含列(日,性别,儿童/青年/中年/老年,人次),其中儿童/青年/中年/老年的年龄段本身定义;
生成数据2,包含列(省份,hour,人次)工具
第一次接触kettle
,力求简单,仅考虑输入输出均为Excel
,首先按照题目要求捏造一批数据,以下图所示:
Excel
字段说明:测试
姓名:字符串 年龄:整型 身份证号码:字符串 性别:字符串 挂号日期时间:日期时间型 门诊号:整型
进入安装目录/usr/local/Cellar/kettle/8.2.0.0-342/libexec
启动kettle
:
根据实验要求,其实所涉及的问题仅仅是输入和输出,转换(分组统计)。建立任务之初,有必要先百度or Google
看看kettle
的输入输出是如何实现的?ui
最容易实现的简单案例就是生成随机数,并存储到txt
文件。插件
1)新建一个转换保存为test_random
(后缀为.ktr
)经过拖拽插件方式,在核心对象->输入和输出分别拖拽“生成随机数”和“文本文件输出”两个按钮,而后点击“生成随机数”并按下sheft
键,用鼠标指向“文本文件输出”,以生成剪头,表示数据流向。以下图:
2)编辑输入流,即“生成随机数”按钮,如图所示:
关于支持的随机数据类型有:
3)而后编辑输出流,即“文本文件输出”按钮,如图所示:
输出文件名支持预览模式,即点击图中“显示文件名...”按钮:
4)最后执行,看看结果。
经过上述简单实验,咱们知道了输入输出流的基本操做,下面开始进入正题。
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)执行,结果如图所示。
针对生成数据2
进行分析,须要处理的点有:
(1)将挂号日期时间设置
String
,因为不能直接从预设格式中提取日,须要采起字符串截取;(2)对日期和身份证进行字符串截取,分别提取日和省份代码(身份证前两位);
(3)按照待分组的字段进行排序;
(4)对省份和时间段进行值映射;
(4) 进行分组统计。
总体设计数据流图,如图所示:
在“剪切字符串”组件,设置以下:
在“省份值映射”和“时间值映射”组件中,分别设置以下:
运行结果,如图所示:
经过本次实验,初步认识了一下强大的ETL
工具之kettle
,要想获取更多知识就得更多实验,从错误中反思学到的远比从成功中收获更多。做为工具,只有多多实验才能更好的掌握好它,印证了那句经典--“实践出真知”。