2018-12-09 01:42:54 hephec 阅读数 117
  • kettle精讲

    kettle精讲,本节课程主要包括kettle基础的表输入、增量更新、同步更新、定时任务,学完可以基本满足企业的日常开发需要

    1507 人正在学习 去看看 陈健

1.Kettle里的数据以数据行的形式,由转换里的步骤来处理。
2.作业项是作业的基本组成部分,每个作业项根据前一个作业项的结果顺序执行。
3.可以在转换或作业里定义数据库连接,可以在数据库等设置对话框里使用参数。
4.kettle有不同类型的资源库,每种资源库都有自己的使用场景。
5.kettle使用灵活的虚拟文件系统,可以访问各种不同位置的文件。
6.通过变量和命名参数可以使转换或者作业更加灵活和易于配置。
7.如何使用可视化编程,如何创建一个转换。

1.Spoon是集成的开发环境,用于创建和设计转换或作业
2.Kitchen和Pan命令行启动程序,分别以命令行方式执行作业和转换
3.Carte是HTTP服务,可以远程执行Kettle作业
4.如何使用Kettle脚本来启动Kettle的程序
5.Kettle的主要配置文件

2018-07-24 19:38:36 wd2014610 阅读数 329
  • kettle精讲

    kettle精讲,本节课程主要包括kettle基础的表输入、增量更新、同步更新、定时任务,学完可以基本满足企业的日常开发需要

    1507 人正在学习 去看看 陈健

为什么要用Kettle

在学习和工作中,经常要进行多数据库的数据处理工作,那么有没有一款工具,最好是图形化界面支持的工具能够非常方便的对多个不同数据库进行数据管理和操作,别说,这个还真的有。Kettle就是的。
“免费开源的基于java的企业级ETL工具,功能强大简单易用,无可抗拒”!

一、Kettle介绍

首先看一下中文官网:Kettle中文官网
开源的Java编写的ETL工具,可以在Window、Linux、Unix上运行。
不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。

GitHub地址:Kettle的Git地址

二、Kettle下载安装启动

官方下载地址:下载地址

  • 下载后解压
    这里写图片描述

打开方式一:

  • 双击启动图标
    这里写图片描述

注意:有时候双击没用打不开应用

  • 用命令行打开
    进入文件夹中。
    这里写图片描述

执行:

sh spoon.sh

这里写图片描述

启动成功后如下图:
这里写图片描述

三、Kettle使用

那么现在安装好了,怎么使用就是一个问题了。

  • 先点击左上角的+号,会发现Database Connection是灰色的,只有在选择一个Job工作流之后,才可以连接数据库。

这里写图片描述

  • 选择工作流,连接数据库
    在这里你可能会很好奇TransformationJob两者之间有什么区别?
    这个有个同学已经解答了这个问题了。
    这里写链接内容
    简单来说,Job就是一步一步执行,而Transformation的一些步骤都是并行执行的(更加高级一些)。

四、连接数据库

Kettle最强大的地方,在于他支持几十种数据库的连接。
这里写图片描述

下面以Mysql数据库为例。

  • 在连接的时候报了一个错
Driver class 'org.gjt.mm.mysql.Driver' could not be found, make sure the 'MySQL' driver (jar file) is installed.
org.gjt.mm.mysql.Driver

这里写图片描述

  • 解决方法
    需要去这个地方下载一个jar包
    mysql-connector-java-8.0.11.jar

这里写图片描述

下载后是这么一个东西
这里写图片描述

把这个jar包放在/data-integration/lib目录下。
重启:

sh spoon.sh

五、注意mysql驱动版本问题

在第四步可能放进去不管用。
下载5开头的驱动:地址
Kettle似乎只支持到5.1.XX的。
这里写图片描述

重复第四步,把下图红线框部分的Jar包

5.1.xx版本的jar包

放到/data-integration/lib目录下。
重启。
好了,连接好了,就可以完美使用了。

这里写图片描述

祝大家学习和工作顺利。

2018-12-05 10:07:26 shishi521 阅读数 112
  • kettle精讲

    kettle精讲,本节课程主要包括kettle基础的表输入、增量更新、同步更新、定时任务,学完可以基本满足企业的日常开发需要

    1507 人正在学习 去看看 陈健

一、postgis数据表输入

二、postgis数据表输出

1.填写目标数据库,连接方式,架构名称

2.填写目标表名,改一次表名,sql就会变一次create table的sql

3.点击sql。执行sql文件,create一张表。如果已经有表了,要勾上上面的裁剪表,翻译的有问题,tanscat是彻底删除的意思。意思是原来有的就彻底删除表。

4.如果需要更改表字段名称,就要选制定数据库字段,点击获取字段,把所有要输入数据的字段名称列下来。要修改的名称修改。

5.确定。运行程序即可。

三、坐标重投影

2019-07-30 21:03:14 qq_17623363 阅读数 856
  • kettle精讲

    kettle精讲,本节课程主要包括kettle基础的表输入、增量更新、同步更新、定时任务,学完可以基本满足企业的日常开发需要

    1507 人正在学习 去看看 陈健

需求

处理经纬度格式不正确的数据

经纬度格式如:
经度:a-b-c
纬度:d-e-f

a、b、c、d、e、f都可以为数字(也可以为浮点等,只要符合经纬度要求就OK)

把符合要求的数据存放到一个xlsx里
不符合要求的数据存放到一个xlsx里

建立的处理流程如下:
Kettle处理流程

结果:
处理的结果会得到两个文件,一个是符合要求的,一个是不符合要求的。
结果

一、建立DB连接

建立DB连接
连接要处理数据库的数据库
连接数据库

二、建立处理流程

1、拖入表输入功能模块

选择数据库连接、并按自己的需求写入相关的sql
配置表输入功能

2、拖入JavaScript代码功能模块

考虑到经纬度格式可能会出现存在空格的,而且经纬度不在一块。
现在可以利用JavaScript代码把从数据库中得到的经度和纬度合并到一起,然后对数据进行去掉所有的空格处理。

连接表输如---->JavaScript代码

连接表输如---->JavaScript代码

处理经纬度

处理数据

//Script here

 //去前后空格
//var LO = LONGITUDE.replace(/(^\s*)|(\s*$)/g, "");
//var LA = LATITUDE.replace(/(^\s*)|(\s*$)/g, "");

//拼接成一个要验证的字符串
//var LL = LO +"," +LA;

 //去前后空格
//var LL=L1.replace(/(^\s*)|(\s*$)/g, "");


//直接去除所有的空格
var LL = (LONGITUDE+","+LATITUDE).replace(/\s+/g,"");

对处理好的经纬度进行正则表达式匹配处理

在这里插入图片描述
配置正则表达式
在这里插入图片描述

正则表达式

([\d^(-?\d+)(\.\d+)?$]+)-([\d^(-?\d+)(\.\d+)?$]+)-([\d^(-?\d+)(\.\d+)?$]+)[,]([\d^(-?\d+)(\.\d+)?$]+)-([\d^(-?\d+)(\.\d+)?$]+)-([\d^(-?\d+)(\.\d+)?$]+)

过滤记录并分别输出到不同的文件里

在这里插入图片描述

过滤记录的配置
在这里插入图片描述

2019-06-28 10:18:51 qq_36688928 阅读数 284
  • kettle精讲

    kettle精讲,本节课程主要包括kettle基础的表输入、增量更新、同步更新、定时任务,学完可以基本满足企业的日常开发需要

    1507 人正在学习 去看看 陈健

转自:  https://www.cnblogs.com/greyzeng/p/5524614.html

Kettle进行数据迁移(ETL):  https://www.cnblogs.com/wlming/p/8080480.html

kettle详解(数据抽取、转换、装载): https://blog.csdn.net/u010735147/article/details/81905485

使用kettle进行增量抽取数据: https://blog.csdn.net/fangdengfu123/article/details/69229377

一种基于kettle的大数据平台数据抽取和统计方法与流程: http://www.xjishu.com/zhuanli/55/201610837148.html

kettle简单使用以及进行数据抽取同步: https://www.jianshu.com/p/d98d7d1179c7

ETL工具kettle怎么进行增量数据抽取:一、通过标志位: https://blog.51cto.com/13602563/2163559

大量数据快速导出的解决方案-Kettle:  https://www.cnblogs.com/itechpark/archive/2016/11/07/yinzei_kettle_excel.html

Kettle抽取数据-循环遍历数据: https://blog.csdn.net/daocaoren92wq/article/details/83655589

Kettle-7.0增量抽取订单数据: https://blog.csdn.net/zisheng_wang_data/article/details/71632011

kettle抽取——多平台汇总数据仓库:  https://blog.csdn.net/qq_35318838/article/details/66974575

采用Kettle分页处理大数据量抽取任务:  https://www.cnblogs.com/lcword/p/9570719.html

企业级增量抽取数据模型(Kettle版): https://www.javazhiyin.com/12405.html

Kettle使用时间戳抽取数据总结: http://www.manongjc.com/article/58382.html

 

Practitioner

需要不断努力,才能毫不费力

采用Kettle分页处理大数据量抽取任务

       

作者:Grey

原文地址: http://www.cnblogs.com/greyzeng/p/5524614.html

       

         

需求:

将Oracle数据库中某张表历史数据导入MySQL的一张表里面。

源表(Oracle):table1

目标表(MySQL):table2

数据量:20,000,000

       

思路:

由于服务器内存资源有限,所以,无法使用Kettle一次性从源表导入目标表千万级别的数据,考虑采用分页导入的方式来进行数据传输,即:

根据实际情况设置一个每次处理的数据量,比如:5,000条,然后根据总的数据条数和每次处理的数据量计算出一共分几页,

假设总数据量有:20,000,000,所以页数为:20,000,000/5,000=4,000页

注: 若存在小数,小数部分算一页,比如:20.3算21页

       

步骤:

根据需求的条件,首先对数据进行分页:

数据量:20,000,000

每页数据量:5,000

页数:4,000

源表(Oracle):table1

目标表(MySQL):table2

       

主流程:transfer_table1_to_table2.kjb

       

流程说明:
transfer_table1_to_table2.kjb: 主流程

build_query_page.ktr: 构造页数游标

loop_execute.kjb: 根据页数来执行数据导入操作

       

我们分别来看各个部分的构成:

       

build_query_page.ktr: 构造页数游标

这一步中,我们需要构造一个类似这样的数据结构:

其中P_PAGE是表头,其余为页码数,

注: 在这里取页码数我通过这个表的rownum来构造

SQL:

select rownum as P_PAGE from mds.mds_balances_hist where rownum<=4000

具体实现如下图:

       

loop_execute.kjb: 根据页数来执行数据导入操作

在上一步中,我们构造了页数,在这步中,我们遍历上一步中的页码数,通过页码数找出相应的数据集进行操作,

其中包括set_values.ktr和execute_by_page.ktr两个转换

loop_execute.kjb具体实现如下:

       

set_values.ktr:表示获取从上一步中获得的页数

       

execute_by_page.ktr:表示根据页数进行数据导入操作

其中query_by_page采用Oracle经典三层嵌套分页算法:

SELECT b.rn,b.* FROM

(

SELECT A.*, ROWNUM RN

FROM (SELECT * FROM table1) A

WHERE ROWNUM <= (${VAR_P_PAGE}*5000)

) b

WHERE RN >= ((${VAR_P_PAGE}-1)*5000+1)

注: ${VAR_P_PAGE}为每次获取的页码数。

select_field为设置需要导入的列名:

output_target目的是输出到目标表table2:

因为要遍历上一次执行的结果,那么需要在transfer_table1_to_table2.kjb的loop_execute.kjb中做如下设置:

       

最后,执行transfer_table1_to_table2.kjb即可。

       

总结:

通过上述方法,我们可以很好的解决内存不足的情况下,大数据量在不同的数据库之间的导入工作。

   

FAQ:

  • 在Kettle导入大量数据的过程中,可能会出现连接断开的现象:

http://forums.pentaho.com/showthread.php?74102-MySQL-connection-settings-at-java-level

(Idle connection timeout if we keep kettle idle for 8hours).

解决办法:

kettle 数据处理

博文 来自: weixin_36114298
没有更多推荐了,返回首页