通知短信+运营短信,5秒速达,支持群发助手一键发送🚀高效触达和通知客户 广告
【文章大纲】 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)