Kettle学习笔记一 :MySQL到Postgres导入数据且发送日志邮件

来源:互联网 发布:鬼子来了 知乎 编辑:程序博客网 时间:2024/05/21 22:43

Kettle脚本编写平台:windows7 64bit

Kettle脚本运行平台:CentOS release 5.9

Kettle工具的版本:4.3.0

Kettle导数的一大箩筐的优点和不足,咱们就不讨论了,直接从制作一个完整流程的小脚本开始吧。

我要实现的目的是:从mysql的一个表里导出数据,然后灌入postgresql里,同时将导入数据的条目数通过邮件发到指定邮箱。

 

好了,开始

先说下前提,因为我们的服务器和本地是无法通讯的,所以无法通过kettle本身自动同步mysql的数据结构,只能手工修改涉及的地方;

图片1

我使用的是win7,点击这个图标打开kettle,经过漫长的等待,你可以看到它的主界面,如下图所示,我这里的默认界面是这样的,如果你之前用过,且打开过脚本,那么就会默认显示之前打开的,so funny!

图片2

1、新建Transformation

使用快捷键Ctrl+N,可以新建Transformation

如图示,左侧列表显示的是你创建转换的时候可以使用的组件或者功能

图片3

我需要读取Mysql的数据表,所以在左侧列表里点开“输入”文件夹,并选中“表输入”项,拖动到右侧工作区

图片4

双击工作区中的“表输入”图标,就可以打开编辑界面(其他打开方式自己摸索哈!)

图片5

其中

A)步骤名称:这一个表输入操作成为一个步骤,我们可以给它起一个名字,我们叫他mysql_export,方便管理,更重要的是后边我么有个操作需要这个名字才能完成,给每个步骤添加合适的名字也是个好习惯。

B)数据库连接:这个地方是配置你要连接的数据的信息,一般情况下你需要点击最右边的“新建”按钮,则会打开数据库配置页面

图片6

我们根据自己的情况将红色框中的信息填写正确就好了,我本地没法链接到远程数据库,如果你可以,那么点击下“Test”按钮测试下连接是否成功吧。然后点击“OK”按钮确定修改并关闭配置页面;

这里有个地方可以关注下,如果mysql的编码是latin1的,那么我们可以点击上图左侧列表里的“Advanced”标签,打开高级选项页面,在“Enter the SQL statements”输入框中填入set names latin1;这样导出的数据就不会出现乱码问题了,当然了这个设置和mysql的一致才可以。

图片7

如果还是不起作用的话,那么你可以打开左侧列表中的“Options”标签

图片8

按照红色框中的方式输入,一般就可以解决问题了。

C)此时已经回到了表输入配置页面了,这时候在SQL输入框中输入sql语句,查询哪些字段,根据哪些条件,查询那张表等

图片9

D)此时你可能看到了“替换SQL语句里的变量”这个选项,如果你的SQL里有需要设置的变量,比如查询日期等,这里可以勾选上,然后通过脚本填充(稍后讲到),其他的选项暂时保持默认值吧,点击确定关闭该窗口。

我们从MySQL中读出的数据需要导入到Postgresql中,那么还需要添加一个输出,我们重复之前步骤,不过这次是在输出文件夹里,把“表输出”拖动到工作区,

图片10

然后双击该图标打开配置页面

图片11

我们把这个起名叫pg_import,数据库连接的话,我们的操作与mysql的数据库配置页面是相同的,只是在数据库选项中Connection Type中选择PostgreSQL,并根据实际情况填写数据库参数即可。

这些地方都比较简单,下边说个比较麻烦的地方:

我们需要对应mysql和postgres的字段

图片12

点击打开“Database fields”标签页,在这里我们可以看到需要我们填入字段对应关系,如果你本地和连接到远程数据库,那么点击“Get fields”即可,但是悲催的我是不行的,so,我只能另辟蹊径。

前提:我本地不能同步远程数据库(说是为了数据库安全),那么到了这一步,就需要完成比较麻烦的一些操作,这是你可以先保存并关闭这个转换页面,当然了我们一直没有保存,所以系统提示我们保存并起名字,我们这里叫kettle-test.ktr。

Ok~现在我们找到你保存的这个ktr文件,并找到这里

图片13

红框里边的fields是我根据mysql和postgresql的字段对应人肉输入的,这一步无误的填写完毕之后,我们保存退出,切换到kettke,并打开该文件,此时就可以看到所有的字段已经ok了

图片14

嗯嗯,这一步不是不得不做的步骤,是可以避免的,如果你们有个善良的DBA的话。

建立输入和输出的关系

图片15

此时,mysql读取的数据就可以通过通道灌入到postgresql里去了,当然逻辑上是这样的,事实上是不行的。

其实这一步做完也是可以完成导数据这个事情了,稍微透露下吧(这里我实在centos上执行)

$KETTLE_PATH/pan.sh -file=”$SCRIPT_PATH/kettle-test.ktr” ,然后看看效果吧(类似结果)

图片16

说了这么多终于到了我们的主题部分,怎么获得数据导入的关键信息:读取了多少数据,成功导入到目标表里多少数据呢?

我们可以这么做,找到核心对象标签页里的Statistics目录,将Output steps metrics拖动到工作区,效果如下图:

图片17

现在我们双击打开Output steps metrics看看他的属性

图片18

现阶段我们只需要关心“Lines red”和“Lines written”即可,(其他的扩展属性请期待后续文章介绍;)我想大家都能从其字面意思知道这两个字段的含义了,于是我们将其于之前的转换建立起联系,这里请注意!不是要拖动连接线咯,而是通过转换的步骤名称建立联系,这就是之前我为什么要大家命名好转换的名字的缘故了;

图片19

在这里,我填写上需要获得记录的转换的名称“pg_import”,然后我需要把这些数据记录重定向到一个文件里,则将它的输出连接到一个文本输入文件里即可,这样,当你的转换完成后,处理的结果的数据就会写入文本文件了。

当然了在实现重定向到文本文件的时候,我们需要再做点什么:

图片20

图片21

也就是这几步,然后再次执行$KETTLE_PATH/pan.sh -file=”$SCRIPT_PATH/kettle-test.ktr” ,就会在你对应的目录下产生类似kettle_monitor2014-01-04.txt的文件了,快去看看什么内容吧。

2、新建Job

a) Job的创建就比较简单了

我们建立如下的结构

图片22

图片23

大功告成,把我们的两个文件传到服务器上去,执行/data/data-integration/kitchen.sh -file=”/data/etlcfg/最后创建的job的名称.kjb” -level=”basic” ic”

输出类似的结果

图片24

最后一步,发送邮件:

新建一个转换,并新建一个邮件

图片25

双击打开配置,并在Address标签页中填入如上图所示的内容,邮件发送方的名字,地址,接收方的地址,抄送,密抄,联系人等;

图片26

第二个标签页Sever配置服务器信息,我一般喜欢163的邮箱,使用它的smtp还是不错的选择;在AttachedFiles里,我们需要添加我们的附件文件的地址,这里会在发邮件时捎带着附近发出,

图片27

剩下的标签页大家根据实际情况填写吧,我这里没填,而且我这里使用这个转换带发送附件是不成功的,所以我要接下来在job里边做点动作;

打开我们刚才新建的job:

图片28

他可能已经成了这样了,其中test_kettle引用的是我们刚才编写的mysql导入postgres的转换,而send_mail 那个,则是我们的mail的转换,这个时候需要在他们之后赘上一个job里边的mail,而这个mail的配置唯一不同的是这里:

图片29

我们需要将“带附件”勾选上,因为我们执行kettle使用的是basic level,所以这里我们选择文件类型为“一般”,OK,that’s ALL!

去享受整个流程吧!!

OVER~~

0 0
原创粉丝点击