kettle案例一抽取gz格式文本内容保存到mongodb

来源:互联网 发布:淘宝产品详情模板 编辑:程序博客网 时间:2024/06/05 21:01



版本和启动

我们这里使用的7.1版本,官网下载的安装包为pdi-ce-7.1.0.0-12.zip。

安装目录下非常多的执行程序,但没有明显的启动图标。

Kettle常用三大家族:Spoon、Pan、Kitchen。
Spoon:通过图形界面方式设计、运行、调试Job与Transformation。
Pan: 通过脚本命令方式来运行Transformation。
Kitchen: 通过脚本命令方式来运行Job,一般就是通过调用Kitchen脚本来完成定时任务。

所以对应到 目录中的启动文件为:
Spoon.bat: 图形界面方式启动作业和转换设计器。
Pan.bat: 命令行方式执行转换。
Kitchen.bat: 命令行方式执行作业。

我们初级阶段可以使用 图形界面来进行操作,非常方便。
点击Spoon.bat等待启动后如图:

Kettle中有两类设计分别是:Transformation(转换)与Job(作业),Transformation完成针对数据的基础转换,Job则完成整个工作流的控制。

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

也就是说 转换可以是作业的组成部分,是作业的其中一个小步骤,作业负责把步骤连接起来。作业可以包含多个转换。

更多详细关于转换和作业可查看链接:
ETL工具Kettle简介和安装配置基本使用

我们要把gz的文本内容抽取出来输出到mongodb,这个可以算作一个转换。那么我们鼠标左键双击转换即可。界面会自动跳转到转换的核心对象栏。

我们这里主要会用到 输入 转换 输出 因为mongodb的操作是在Big Data里的,所以不用输出 而是使用Big Data。


拖动组件构造流程

我们这里主要会使用 输入(文本文件输入) 转换(拆分字段) 和 Big Data (MongoDB Output)。
分别在里面选取相应的组件拖入右边的界面中。如下:

我们这里使用的是 文本文件输入—->拆分字段—>MongoDB Output,需要选中后点击第一个按钮,把步骤串联起来:

连接步骤的箭头需要正确,点击连线可以翻转方向。

最终效果如图:


配置输入文件

鼠标左键双击文本文件输入,跳出配置框。

注意左上角的导航栏。


选择文件

点击浏览,选中gzip压缩文件,点击增加,看到文件已经进入到选中文件的列表中:
(看不到压缩文件时需要把类型改为所有文件)


这里的文件目录路径也可以使用正则表达式通配符模糊匹配。

辅助工具:
正则表达式测试网站

然后调试出通配符。
路径为:
F:chip
我这里文件名称如下:
ALL.chr1.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz
ALL.chr2.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz
ALL.chrMT.phase3_callmom-v0_4.20130502.genotypes.vcf.gz
ALL.chrY.phase3_integrated_v2a.20130502.genotypes.vcf.gz
调试出的通配符为:
.*genotypes.vcf.gz

则选中的文件如下:

可以点击 显示文件名和显示来自第一行数据行的内容 确认下是否选中正确的文件。行数不宜太大,不然容易卡死。

显示文件内容 按钮慎点,文件太大会卡死。

文件名如下:

内容预览如下:


选择内容类型

点击左上角的导航栏 内容。
进入到内容配置环节。
文件类型不csv的话可以选择 Fixed 固定大小的文件。
分隔符使用制表符(点击Insert TAB)分割出每一行(根据自己的文件内容设置)
文本限定符:指定一个字符串左右的限定符号,有限定符的字符串里可以使用分隔符。有限定符的字符串内部如果要使用限定符,要将限定符加倍。比如”N1;N2”,如果输入限定符为”,则输出为N1;N2。
逃逸字符也叫转义字符,比如,输入逃逸字符后 输出里会去掉逃逸字符。比如文档内容为N1;N2
,逃逸字符为
则输出为N1;N2。
头部和尾部主要是表明头部和尾部的行数。因为获取字段时只会展示前50行的数据,所以 如果 头部内容超过了50行则看不到分割出的数据了。我们这里先填250行。
压缩选择 文件的压缩格式,我这里是gz,所以选择GZip。
其他的可以保持不变。
最终内容配置 最终设置如图:


选择字段

点击左上角的导航 字段
点击获取字段
这里发现字段只能根据长度去分列,这种方式我们不推荐,因为长度不一时有可能分割错误的数据出来。
所以我们先把一整行当作一列,作为输出,在字段选择环节再进行处理。
直接点击finish

设置如图:

预览记录如图:

我们后续会使用空格来进行列分割,所以这里不去除空格,虽然看起来是没有空格,但是 左键点击后发现空格还是保留了的。


过滤

在内容预览的时候 我们发现文件内容中有些注释的行在头部以#号开头。
如果以头部行数来跳过是一种方案,但是我们是同时多个文件,它们的行数不一样。
所以就不能使用头部行数的方式了。
只能使用过滤的方式。
点击左上角导航栏的 过滤
过滤字符串 表示含有 该字符串的行会被过滤 我们这里输入#号。
过滤位置 表示过滤符号所在的位置。0表示第一个字符。 填写小于0则表示 会搜索整行。默认搜索整行。
停止在过滤器 是表示 匹配到一行则停止 过滤 否表示不停止 默认为否
积极匹配 是表示 匹配到的数据行将出现在 输出中, 否表示过滤掉这些数据,不出现在输出中,默认为否。
我们填下如下:

设置好过滤条件后 把头部改为0,免得数据被当作头部过滤掉。

到这里 我们的文本文件输入就做好了。


配置拆分字段

左键双击拆分字段后
在分隔符的地方输入想要使用的分隔符,我这里直接复制记录中的空白,发现是一个制表符。
选中字段,给出新的字段命名

因为拆分字段没有自带预览记录,所以需要运行一下才能看到是否拆分得正确。
对着拆分字段右键,点击preview。

把行数改为3点击快速启动
会跳出预览数据窗口如下:

说明我们的分割是正确的。


配置MongoDB数据库输出

左键双击MongoDB Output
在configure connection中配置Host和Port
我这里配置的是 内网中的数据库和端口

在Output options中配置Database和Collection,如果每次都清空表的话 选择 Truncate collection。增量更新则不能选择 Truncate collection。

在Mongo document fields中点击Get fields,获取到字段。


启动转换和结果校验

点击界面上的播放按钮即可启动转换。

默认参数点击启动。

如果转换脚本没保存会弹出选择路径框我们先保存,输入任意脚本名称点击保存即可。

启动起来后可以在执行结果的地方看到执行情况

这时候去数据库中查看,已经自动新建了gene库和chip集合,里面不断新增的就是我们抽取的数据

抽取成功。


输出文件名和行数作为字段

如果需要输出文件名和行数作为字段,可以在内容栏里设置。
勾选在输出包括字段名 名称输入 fileName。
勾选输出包含行数 名称输入 lineNum。
勾选按文件取行号。
设置如图

预览时发现已经有这两个字段了

这里的文件名是包含路径的,如果不想包含路径则去掉勾选在输出包括字段名,而是在其他输出字段里填写文件名字段名称即可。
如下图:

预览如图: