【文章大纲】
1. Kettle 工具安装
2. Kettle 连接sqlServer 数据库
3. 两表之间数据同步案例
1. 一次性同步插入数据
2. 不存在就插入数据,存在的就更新数据
3. 创建定时作业
4. 基于时间戳增量更新案例
5. 将表中查询出来的数据转换成JSON
6. Kettle 使用 WebService 查询组件请求WebService 接口获取天气信息案例
7. Kettle 使用HttpPost 组件请求WebService 接口获取天气信息案例
【说明】
[点击下载请求WebService接口的案例](https://bs-resource.oss-cn-zhangjiakou.aliyuncs.com/bs%E6%96%87%E6%A1%A3/Kettle%E5%90%8C%E6%AD%A5%E5%B7%A5%E5%85%B7%E6%A1%88%E4%BE%8B.zip),使用Kettle工具直接打开就可以预览
**一、Kettle 工具下载安装**
* 官方下载方式
百度进入kettle的官网
网址路径:[https://community.hitachivantara.com/docs/DOC-1009855](https://community.hitachivantara.com/docs/DOC-1009855)
* 镜像下载方式
官网的下载比较慢,也可通过以下国内镜像下载:[http://mirror.bit.edu.cn/pentaho/Pentaho%208.2/client-tools/](http://mirror.bit.edu.cn/pentaho/Pentaho%208.2/client-tools/)
* qq群下载
在**飞讯软件培训群 ** 的群文件中可以自行下载
访问网址,根据指南添加qq群:[http://demo.feixuns.com/www/demopages/fsExplain.html](http://demo.feixuns.com/www/demopages/fsExplain.html)
![](https://img.kancloud.cn/31/10/3110d1812d05fdb018e483c7ae9dd14a_712x597.png)
* 安装
由于kettle使用的是java编写的,所以需要安装java环境。
( 安装Java环境请阅读: 环境搭建 -> JDK环境搭建)
<br>
下载后进行解压,由于kettle是绿色免安装版的,所以解压后找到如下图的文件,点击运行即可。
![](https://img.kancloud.cn/a8/78/a8786fb86189ff431badb42e03a93796_1011x498.png)
**二、Kettle 连接sqlServer 数据库**
首先打开软件
![](https://img.kancloud.cn/51/68/5168fda465ca3a2d3b0a75ca30da15be_1664x838.png)
点击文件\--->新建\----->转换。如下
![](https://img.kancloud.cn/28/21/282125a0ddc9354bbfb2c2913fdf9a0f_1689x813.png)
从左边的列表里面的核心对象\-->输入\--->表输入。选中表输入,然后拖到右边
![](https://img.kancloud.cn/a4/72/a4726bf7c567c9f9aa37b7685ab6e0b8_1554x601.png)
![](https://img.kancloud.cn/49/02/4902ec3c086b421cd6c28cec9971f083_716x1040.png)
![](https://img.kancloud.cn/93/f5/93f5c6136ddeb21b0c24238cd8069274_482x619.png)
![](https://img.kancloud.cn/37/5a/375a852c41c9abbccb3344416e335a74_482x619.png)
可能发生的错误:
![](https://img.kancloud.cn/00/ba/00ba50336bd7e72b40af53ca3e68bec7_553x327.png)
原因:由于第一次运行没有sqlServer的驱动导致的,所以我们把SQL server的数据库的驱动放进来
解决办法:[https://www.microsoft.com/en-us/download/details.aspx?id=11774](https://www.microsoft.com/en-us/download/details.aspx?id=11774)
下载 ojdbc4.jar包
![](https://img.kancloud.cn/9b/82/9b82e70853e7aee5320655e0cfc26537_553x109.png)
copy到kettle安装目录\\lib 下面。重新运行spoon程序。
然后重新启动kettle,然后像上面一样创建,输入连接名称,你的sql server数据库等信息,点击测试按钮,提示你已经连接成功。
**三、两表之间数据同步案例**
kettle数据抽取可以分为转换和作业。转换是进行单独的从一个表抽到另一个表,如果多个呢?
那么就需要作业,在作业里可以调用多个转换,同步或是异步都可以。
3.1. 一次性同步插入数据
下面先来讲一个简单的转换。
首先打开kettle
![](https://img.kancloud.cn/aa/2b/aa2b4abf3d45422ef009eee3dd4e53ff_1203x653.png)
点击文件\--->新建\----->转换。如下
![](https://img.kancloud.cn/aa/19/aa1950d3dd4a83de0130722e1c0aefe3_1267x684.png)
从左边的列表里面的核心对象\-->输入\--->表输入。选中表输入,然后拖到右边
![](https://img.kancloud.cn/c2/70/c270a2c3ba1f4308343c7db6ac7dc3f9_1920x1005.png)
点击拖动的表输入会出现如下如的对话框,在选择如图的新建,配置需要从哪个数据库那个表抽取数据(参照第二步的连接数据库)
![](https://img.kancloud.cn/ab/53/ab534a763a6b9841ef84d3dcb65ad097_1014x671.png)
填写查询数据的sql语句,表是你自己创建的,点击预览。我们可以看到从数据库读到的数据。
![](https://img.kancloud.cn/64/8d/648dec3261b4174e412420316278763b_935x545.png)
![](https://img.kancloud.cn/31/71/3171253e81369df58bff3245368636ae_1068x535.png)
在右边找到输入 \--> 表输出,拖到右边的区域,然后点击设置另外要写入SqlServer数据库信息如下图
![](https://img.kancloud.cn/2f/61/2f6138ed6b97d46072bd875d4d41d9ee_1206x722.png)
点击确定后如下图,点击浏览选择需要插入的表,我的是demo表,demo表的结构和Linux 数据库的表demo1结构是一样的。然后点击确定
![](https://img.kancloud.cn/4f/ac/4facdee5d10127116614834b8fd40835_1133x733.png)
点击确定。通过shift+鼠标左键按住不放,从表输入拖一条线到表输出连接起来,这样他们就进行了数据的交换。
![](https://img.kancloud.cn/4f/ac/4facdee5d10127116614834b8fd40835_1133x733.png)
点击运行按钮,保存这个转换
![](https://img.kancloud.cn/69/05/6905e4d458a80c8b4526448c4bbaf558_1126x779.png)
保存这个转换后,可以看到这个转换已经在运行了。在下面输出了日志,可以看到进行了两条数据的已经写入到了sqlServer。如下图
![](https://img.kancloud.cn/e8/e9/e8e9d6fe6c35dfdf171caae4b7e9b318_1069x891.png)
![](https://img.kancloud.cn/57/e7/57e71d31bdaa2b0d52e99d6b2a9f89b1_1022x302.png)
进入sqlserver查看刚才插入的数据。可以看到插入成功
![](https://img.kancloud.cn/a9/75/a97526320f6d8c55155edefa14cd63d3_739x607.png)
有的人会有疑问,两张表结构一样这样可以。那要是两张表结构不一样呢。
![](https://img.kancloud.cn/30/11/30119dcec7ed66915b5f6dd495d56063_1118x756.png)
上面配置的应用只适合一次性导入数据,重复执行就会出现错误。如果用重复就更新怎么配置呢?
![](https://img.kancloud.cn/db/50/db50c0f1619dfbeb9ad9caddba55d2e7_1256x940.png)
3.2. 不存在就插入数据,存在的就更新数据
出现错误会停止抽取数据,碰到这种情况,我们需要使用另一个输出,插入或更新,如下图
![](https://img.kancloud.cn/e3/ee/e3ee282f9ec1aeb51d8ae1b5f7f48bf4_329x770.png)
点击插入/更新配置数据源信息,在我划线的地方只保留主键的列,在更新字段下面可以主键重复时是否更新 (Y/N)
![](https://img.kancloud.cn/57/8c/578cc8ef3611e1357a6d7e4498090559_1342x778.png)
点击运行
![](https://img.kancloud.cn/7d/92/7d92306e08c9b5f05532bbd432f97dab_1043x818.png)
3.3. 创建定时作业
文件 \--> 新建 --> 作业
![](https://img.kancloud.cn/ce/7d/ce7d8fc828f5f5de0c130ce181ab7de0_1594x563.png)
双击Start 设置时间间隔
![](https://img.kancloud.cn/a8/0b/a80bdbcf9f738921805bc2fb97cb7c03_1041x454.png)
设置好后,点击运行,就可以定时同步了
![](https://img.kancloud.cn/8a/26/8a2690df44093818f21b52c4fca013a3_1222x843.png)
**四、基于时间戳增量更新案例**
1、提前建好ts时间表,设置两个字段分别为current\_t和load\_t,current用于比较原表中日期的上限,load\_t则为上次加载的日期,几位原表中日期的下限。
~~~
create table demo_ts(
current_t datetime,
load_t datetime
)
insert into demo_ts(current_t,load_t) values(GETDATE(),GETDATE())
select * from demo_ts
~~~
![](https://img.kancloud.cn/a1/e3/a1e3e22f8954b9c83e7eb168bcd7355d_367x203.png)
2、 新建转换
2.1. 获取当前系统日期,并赋值给变量${SYSDATA},然后更新到ts表中
在同一转换中通过表输入获取上次加载日期,并赋值给变量${CURRENT\_T}
![](https://img.kancloud.cn/7c/3e/7c3edadfa679ecb2e5df0bda31cc6081_844x602.png)
![](https://img.kancloud.cn/0e/b9/0eb98bd48fab2de1036413d371cc153a_994x639.png)
![](https://img.kancloud.cn/28/42/2842ac6ab3ce0742e92b3d629b0eee27_965x770.png)
![](https://img.kancloud.cn/be/9a/be9aa1ee1f503aaee217c019450e4f69_1002x773.png)
![](https://img.kancloud.cn/7b/c4/7bc4d40a73a19bae35977c15200f40d0_1056x748.png)
2.2. 抽取增量数据,并更新
![](https://img.kancloud.cn/cc/62/cc627ae95ccc8c44bf5eae7509c09291_1020x809.png)
![](https://img.kancloud.cn/97/ae/97aea1a0e7c544bb620daed5789be366_1035x915.png)
2.3. 更新加载日期
![](https://img.kancloud.cn/02/bb/02bbda7cd002951be4b77ab7de78ba2e_1129x809.png)
![](https://img.kancloud.cn/89/38/8938389a1afaa97bdc170254f65e2af3_977x883.png)
3、数据抽取作业
![](https://img.kancloud.cn/af/43/af43fd821c53b7960bece8db5f34cfe4_1329x501.png)
4、执行效果
![](https://img.kancloud.cn/fb/e3/fbe3740d6653dbea2d912962f65653c9_657x835.png)
**五、将表中查询出来的数据转换成JSON**
![](https://img.kancloud.cn/27/98/2798f19f98f5e079533c579e491f1e68_1279x472.png)
有两种转换成JSON的方法
1. 使用JavaScript 组件编写js转换,适用于自定义格式JSON
2. 使用JSON output 组件,使用比较方便,适用于标准格式JSON
1、使用JavaScript 组件转换成JSON
从左边的列表里面的核心对象\-->输入--->表输入。选中表输入组件,然后拖到右边。连接数据库并写查询sql(参考第二步的连接sqlServer)
![](https://img.kancloud.cn/2b/eb/2beb06fd9ee1f43ea6d9c3a6821a3d18_1501x371.png)
从左边的列表里面的核心对象\-->脚本--->JavaScript代码。选中JavaScript代码组件,然后拖到右边。按住Shfit键点击组件,将组件连接
~~~
//Script here// 自定义Json格式
var jsonData = {
"params":{
"empno": empno,
"empname": empname
}
}
// 创建一行
var row = createRowCopy(getOutputRowMeta().size());
// 获取最后一行下标
var index = getInputRowMeta().size();
// 赋值
row[index] = JSON.stringify(jsonData);
// 将行加入到输出中
putRow(row);
trans_Status = SKIP_TRANSFORMATION;
~~~
![](https://img.kancloud.cn/fc/1e/fc1e992d37a0551fbcdda521ca862f63_1265x659.png)
点击 获取变量 可能出现错误
![](https://img.kancloud.cn/c6/7c/c67c98642c7337e1038de9767177bad9_881x641.png)
解决方法:先随便新增一个字段,然后点击确定。再双击打开组件获取变量就可以了
![](https://img.kancloud.cn/b7/e6/b7e6a71f96c99183b60acb87e30ec8d3_881x641.png)
![](https://img.kancloud.cn/73/ba/73ba1bb8ad4271c99293ab4aeaeac19a_881x641.png)
将结果输出到文件中查看,输出 --> 文本文件输出
![](https://img.kancloud.cn/de/65/de65ec413fd3fbd25482fba13e49f36c_969x630.png)
![](https://img.kancloud.cn/2b/61/2b6103246ee4305406d0da956e030689_988x610.png)
执行成功后查看文件数据
![](https://img.kancloud.cn/6e/ed/6eed8d4060acaadc47bb278fdb1b93fb_1508x573.png)
2、使用JSON output 组件,将数据转换成JSON格式
从左边的列表里面的核心对象\-->输入--->表输入。选中表输入组件,然后拖到右边。连接数据库并写查询sql(参考第二步的连接sqlServer)
![](https://img.kancloud.cn/2b/eb/2beb06fd9ee1f43ea6d9c3a6821a3d18_1501x371.png)
从左边的列表里面的核心对象-->输出--->Json output。选中Json output组件,然后拖到右边。按住Shfit键点击组件,将组件连接
![](https://img.kancloud.cn/fc/90/fc905fda551ad3132cc7f1eec516c8f2_818x649.png)
**操作分为三种:**
**Output value:只输出值,可以在后面的组件当中进行使用**
**写到文件:只写到文件当中,不输出**
**Output value and write to file:输出值的同时也写入到文件当中**
这里选择写到文件中就可以
![](https://img.kancloud.cn/3b/13/3b13087813cdbbbce3fbc799c295f738_460x647.png)
![](https://img.kancloud.cn/5d/53/5d538a19612d108f3d77cea17fd5a691_460x647.png)
执行完成后会生成2个文件,里面分别保存着json数据
![](https://img.kancloud.cn/37/11/371188b318055e094dced960c6bcbb58_931x478.png)
**六、Kettle 使用 WebService 查询组件请求WebService 接口获取天气信息**
拖入三个组件并设置连接
![](https://img.kancloud.cn/3f/2a/3f2a14571691d263463654ac04244ddb_1082x444.png)
生成记录
![](https://img.kancloud.cn/e5/97/e597635131794a4c87a3e9e3301df975_951x525.png)
Web 服务查询,天气接口地址:[http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl](http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl)
![](https://img.kancloud.cn/bf/dc/bfdc58dad64f25d5d237e948d7af8f6f_949x527.png)
![](https://img.kancloud.cn/80/d9/80d965fbfa9c334787bbe5716c9eb54b_949x527.png)
![](https://img.kancloud.cn/ad/f4/adf4854b56a3a482382b8760c57f0f84_949x527.png)
文本文件输出
![](https://img.kancloud.cn/25/d3/25d3f3da083ee39b2fbcc062dcb80275_941x516.png)
执行成功后查看文件内容
![](https://img.kancloud.cn/82/15/821531ad4ea0121db03e52e9fdd29763_1000x621.png)
**七、Kettle 使用HttpPost 组件请求WebService 接口获取天气信息案例**
先使用**SoapUI** 工具测试接口
![](https://img.kancloud.cn/3e/13/3e1378267cf31707226efb479414784f_1189x636.png)
拖入四个组件并连接
![](https://img.kancloud.cn/07/00/0700260c28ad03f9de2f23237f9ee1aa_979x536.png)
生成记录中设置请求头信息,SOAPAction。如果接口没有设置SOAPAction可以不设置
![](https://img.kancloud.cn/a5/fe/a5fe06f651d6f7bae9406a077d44dd5c_951x525.png)
JavaScript代码
将**SoapUI**工具中的请求复制过来
![](https://img.kancloud.cn/81/f3/81f39ced9c24daaceab0eb14a93317b2_881x641.png)
HttpPost
![](https://img.kancloud.cn/42/f8/42f8874999a6cbfaabecf95b12264838_730x724.png)
![](https://img.kancloud.cn/47/77/4777446ff1972a4f0b576ffcd7f753ff_730x724.png)
文本文件输出
![](https://img.kancloud.cn/55/27/5527bef05b52da51c7c9cfd4c10d1200_941x516.png)
![](https://img.kancloud.cn/80/83/8083880cee98d93627cd660aca76cdf5_941x516.png)
![](https://img.kancloud.cn/78/4e/784e086d199450856d92a2a132a8681d_941x516.png)
执行完成后查看文件内容
![](https://img.kancloud.cn/52/82/5282e249b7f60e1e6d4413cc1be3ec62_1508x653.png)
- 版本管理
- BS版本管理
- BS数据库版本号升级
- 升级功能说明
- 平台升级1
- 平台升级2
- 第一章.平台规则
- Java版本配置注意事项
- 浏览界面自定义排序规则
- 弹出框选择数据自定义排序
- BS固定参数说明
- 常用界面地址格式
- 第二章.环境搭建
- JDK环境搭建
- 免安装版JDK的配置方法
- Java版本BS搭建
- Linux系统搭建BS程序
- Linux安装JDK
- 第三章.业务功能
- 基础业务
- 快速建模
- 左侧菜单栏目
- BS表单详解(弹出选择、多页签)
- 主细表、三层表配置
- 弹出框配置
- 映射下拉配置
- 数据检查条件配置
- 流程图配置方法1
- Java版本BS嵌入APP页面
- BS文档中心配置
- 第二版流程图配置方法
- 第一版流程图配置方法
- 第三版流程图配置方法
- 特殊业务
- BS树页面配置
- BS用户组权限配置
- 业务查询条件
- 查询条件配置
- BS 查询条件 "单选框" 和 "复选框" 配置
- 常用高级功能
- 自动补全配置
- BS字段输入值检查
- 字段汇总配置
- 文件上传配置
- Java版本发送邮件配置
- 设置网格内容对齐方式
- 查询页面状态使用图标表示配置
- Java版本发送邮件并携带附件
- BS嵌入BI图表
- 计算字段
- 自动计算配置
- 修改网格颜色
- 值改变时修改刷新网格汇总
- 按钮功能
- 按钮功能设置
- 按钮背景颜色设置
- 自定义查询界面不检查是否勾选
- Excel导入数据配置
- sql导入表数据配置
- Excel导出子表数据配置
- 弹窗自定义业务配置
- 自动赋值主表数据
- 获取浏览状态下细表选中字段
- 获取自定义查询界面勾选数据
- 带出三层表明细
- 批量审核功能配置
- 打印配置
- Java版本中使用CS打印
- CS打印使用BS文档中心图片
- IReport打印配置
- IReport打印设置主细表关联显示
- IReport打印记录打印次数
- IReport打印不能打印黑体、宋体等自定义字体解决方案
- Ureport报表打印
- 第四章.特殊功能说明
- API数据交互规范
- Kettle同步工具使用指南
- 通过Token登录BS
- .Net版本BS免登陆跳转并打开业务
- BS帮助文档使用说明
- BS接口程序搭建
- 存储过程手动分页配置
- BS 负载均衡部署
- quickBi嵌入BS系统
- BS部署SSL证书(https访问)
- BS演示搭建同一端口转发到不同机器
- BS嵌入APP界面动态渲染按钮并记录点击日志
- 第五章.常见问题
- BS流程图或业务打开报错
- 常见问题及解决方案
- .Net版本BS登录页报错
- BS表单引用app表单常见问题
- 修改BS的网页Logo
- BS上传文件后无法下载
- Java程序CPU占用100%后排查定位
- Linux 安装Java 开发调试工具包
- Linux开机自启动sh 脚本