pentaho(keetle)数据同步实践

1 pentaho简介

pentaho是一款开源ETL工具,纯java编写的C/S模式的工具,可绿色免安装,开箱即用。支持Windows、macOS、Linux平台。

pentaho有2个核心设计,即转换作业

转换是一个包含输入、逻辑处理、输出的完整过程,即ETL。

作业是一个提供定时执行转换的机制,即定时服务调度。

pentaho官网下载链接:Pentaho Community Edition Download | Hitachi Vantara

pentaho(keetle)数据同步实践-LMLPHP

pentaho由主要四部分组成

  • Spoon.bat/Spoon.sh :勺子,是一个图形化界面,可图形化操作转换和作业
  • Pan.bat/Pan.sh : 煎锅,可用命令行方式调用转换
  • Kitchen.bat/Kitchen.sh : 厨房,可用命令行方式调用作业
  • Carte.bat/Carte.sh : 菜单,是一个轻量级web容器,可建立专用、远程的ETL Server

2 pentaho安装

由于是纯java编写,依赖jdk环境。所以需要先配置jdk环境,这里省略。

从官网下载pentaho安装包后,直接解压。

pentaho(keetle)数据同步实践-LMLPHP

重点目录以及执行文件说明

  • lib目录 : 这是依赖库目录,例如各个数据库的jdbc驱动,都放在此目录下
  • logs目录 :这是转换和作业运行的默认日志输出目录
  • simple-jndi目录 :这是各个数据库的JNDI连接信息的全局配置
  • Spoon.bat/Spoon.sh :勺子,是一个图形化界面,可图形化操作转换和作业
  • Pan.bat/Pan.sh : 煎锅,可用命令行方式调用转换
  • Kitchen.bat/Kitchen.sh : 厨房,可用命令行方式调用作业
  • Carte.bat/Carte.sh : 菜单,是一个轻量级web容器,可建立专用、远程的ETL Server

3 数据同步案例

3.1 执行Spoon.bat文件,启动图形化界面

pentaho(keetle)数据同步实践-LMLPHP

可以看到左侧只有作业转换

3.2 创建一个转换,右键,新建

pentaho(keetle)数据同步实践-LMLPHP

左侧是一些转换插件。

3.3 创建一个数据源输入,展开输入,选择表输入

pentaho(keetle)数据同步实践-LMLPHP

切换到主对象树,选择DB连接,连接数据源。

由于我这里是sqlserver同步到postgresql,所以需要创建sqlserver和postgresql的DB连接

sqlserver的连接

pentaho(keetle)数据同步实践-LMLPHP

postgresql的连接

pentaho(keetle)数据同步实践-LMLPHP

点击测试,如果连接成功,则会弹框提示

pentaho(keetle)数据同步实践-LMLPHP

3.4 编辑表输入

pentaho(keetle)数据同步实践-LMLPHP

先选择数据库连接

pentaho(keetle)数据同步实践-LMLPHP

点击获取SQL查询语句,获取数据表

pentaho(keetle)数据同步实践-LMLPHP

选择一个数据表后,会提示是否选择全部字段,选择是

pentaho(keetle)数据同步实践-LMLPHP

pentaho(keetle)数据同步实践-LMLPHP

点击确定,一个表输入就做好了。

3.5 创建一个数据源输出

展开输出节点,选择 插入/更新,并将其拖入到右侧图形界面中,然后将表输入连线到当前节点,按住shift+鼠标左键

pentaho(keetle)数据同步实践-LMLPHP

pentaho(keetle)数据同步实践-LMLPHP

双击进行编辑

pentaho(keetle)数据同步实践-LMLPHP

点击确定后,一个转换就完成了

pentaho(keetle)数据同步实践-LMLPHP

点击左上角的运行按钮,即可执行同步了。


Q1:这是一个单表转换,那如果需要一次同步多个表呢?

A1:那就继续按此步骤进行配置,多表转换配置完成后如下

pentaho(keetle)数据同步实践-LMLPHP

Q2:那表数量很多,这么配置很费时间,有什么更好的办法么?

A2:有。可以编写脚本,正在学习中……


Q3: 前面的转换已经配置完成了,但是只能手动点击运行,能否定时自动运行?

A3:可以。继续看第4节。


4 定时服务

选择文件–>新建–>作业,即可创建一个作业。

pentaho(keetle)数据同步实践-LMLPHP

在作业窗口,选择核心对象,展开通用,选择Start、转换、成功,分别拖入图形界面中,并按顺序连线

pentaho(keetle)数据同步实践-LMLPHP

双击转换就,进行编辑,选择转换文件

pentaho(keetle)数据同步实践-LMLPHP

此时一个作业即配置完成,但是注意,还没达到定时运行的目的,继续配置

双击Start,对作业进行配置

pentaho(keetle)数据同步实践-LMLPHP

配置完后点击确定,然后点击图形界面的运行按钮,定时服务即启动了

pentaho(keetle)数据同步实践-LMLPHP

在日志输出窗口,可看到服务运行日志

pentaho(keetle)数据同步实践-LMLPHP

至此,pentaho的定时数据同步已完成。


Q4: 定时服务开启后,这个程序窗口被关了或者说程序退出了,服务还运行吗?

A4:不会。由于是C/S模式,客户端服务端一体,进程退出即服务停止


Q5:那有类似后台服务的方式,悄悄运行呢,不被这个界面退出所终止服务?

A5:有。请看第5节。


5 以后台方式运行作业

在介绍中提到,有个Kitchen.bat/Kitchen.sh(厨房)的执行文件,它的作用就是用命令方式调用作业。由于是在Windows平台,所以选择Kitchen.bat执行文件。

打开控制台窗口,进入pentaho安装目录,即Kitchen.bat所在目录,执行如下命令

kitchen /file:{job file path} /level:Basic>>{log file path}

说明:

/file 参数指定 job文件

/level 参数指定日志级别,并写入指定的文件

指定日志文件后,控制台界面就不会输出日志,否则日志会在控制台输出,像下面这样

pentaho(keetle)数据同步实践-LMLPHP


Q6:总开着一个控制台黑框,也不太好,窗口被关了,服务不也停止了吗?有什么更好的方式吗?

A6:是的。有。可以隐藏掉黑窗口,那么继续往下看。


5.1 隐藏控制台窗口

在Kitchen.bat同级目录下创建一个txt文本文件,输入如下内容

@echo off 
if "%1" == "h" goto begin 
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit 
:begin
kitchen /file:"替换为job文件路径" /level:Basic>>"替换为日志文件路径"

然后以ANSI编码方式另存为.bat文件。用ANSI编码,是防止文件路径有中文出现乱码。

至此,一个完成的pentaho定时数据同步作业服务就完成了。

08-18 23:43