kettle应用实践(转)
kettle 复杂转换示例

kettle 复杂转换示例"Kettle" 是一个开源的数据集成工具,也被称为 "Pentaho Data Integration" (PDI)。
它允许用户从多个源提取数据,进行转换和清洗,然后将数据加载到目标系统。
以下是一个简单的Kettle复杂转换示例,它涉及从一个CSV文件读取数据,进行一些转换,然后将结果写入另一个CSV文件。
1. 步骤1:从CSV文件读取数据假设我们有一个CSV文件,其内容如下:```pythonid,name,age1,John,252,Jane,303,Doe,40```首先,我们需要从CSV文件中读取数据。
为此,您需要创建一个“Table input”步骤,并指定CSV文件的路径。
2. 步骤2:转换数据接下来,我们可能希望添加一个新的列,该列是原始“age”列的两倍。
为此,您可以使用“Modified Java Script Value”步骤。
在脚本字段中,您可以编写以下代码:```javascriptvar age = age 2;```3. 步骤3:将数据写入CSV文件最后,我们将转换后的数据写入另一个CSV文件。
为此,您需要创建一个“Table output”步骤,并指定输出文件的路径。
确保在“Table output”步骤的配置中包含所有需要的列。
4. 连接步骤将“Table input”步骤连接到“Modified Java Script Value”步骤,然后将“Modified Java Script Value”步骤连接到“Table output”步骤。
这确保了数据从源传递到目标,同时经过所需的转换。
5. 运行作业完成所有步骤后,您可以在Kettle中运行作业以测试整个流程。
检查输出文件以确保数据已被正确读取、转换并写入。
请注意,这只是一个基本示例。
Kettle提供了许多其他功能和步骤,可以根据需要进行更复杂的转换和数据处理。
kettle实践经验总结

数据抽取工具Kettle实践经验小结杭州州力数据-陈力同步数据常见的应用场景包括以下4个种类型:1.只增加、无更新、无删除 (1)2.只更新、无增加、无删除 (3)3.增加+更新、无删除 (4)4.增加+更新+删除 (5)5.调用存储过程 (7)1无参数输入: (7)2、有参数输入 (8)1.只增加、无更新、无删除对于这种只增加数据的情况,可细分为以下2种类型:1) 基表存在更新字段。
通过获取目标表上最大的更新时间或最大ID,在“表输入”步骤中加入条件限制只读取新增的数据。
这里要注意的是,获取最大更新时间或最大ID时,如果目标表还没有数据,最大值会获取不了。
其中的一个解决方法是在“获取最大ID”步骤的SQL中,加入最小日期或ID的联合查询即可,如:SELECT MAX(ID) FROM(SELECT MAX(ID) AS ID FROM T1 UNION ALL SELECT 0 AS ID FROM DUAL)2) 基表不存在更新字段。
通过“插入/更新”步骤进行插入。
插入/更新步骤选项:2.只更新、无增加、无删除通过“更新”步骤进行更新。
更新选项:3.增加+更新、无删除通过“插入/更新”步骤进行插入。
区别是“插入/更新步骤”中的选项,去掉“不执行任何更新”的勾选:4.增加+更新+删除这种数据同步情况,可细分为以下2种情况:1) 源库有表保存删除、更新和新增的信息。
通过条件判断,分别进行“插入/更新”和“删除”即可,如下图所示。
2) 源库没有保存增删改信息Kettle提供了一种对比增量更新的机制处理这种情况,可通过“合并记录”步骤实现,该步骤的输入是新旧两个数据源,通过关键字进行数据值比对,对比结果分为以下4种类型:“Identical” : 关键字在新旧数据源中都存在,域值相同“changed” : 关键字在新旧数据源中都存在,但域值不同“new” :旧数据源中没有找到关键字“deleted”:新数据源中没有找到关键字两个数据源的数据都进入下一步骤,上述4种结果类型作为输出表的标志字段进行保存。
kettle的使用方法

kettle的使用方法Kettle是一种用于数据集成和转换的开源工具,也被称为Pentaho Data Integrator(PDI)。
它提供了一套功能强大的工具,可以帮助用户从不同的数据源中提取、转换和加载数据。
本文将介绍Kettle 的使用方法,帮助读者快速上手使用该工具。
一、安装Kettle您需要从Kettle官方网站下载最新版本的安装包。
安装包通常是一个压缩文件,您可以将其解压到您选择的目录中。
然后,通过运行解压后的文件夹中的启动脚本来启动Kettle。
二、连接数据源在使用Kettle之前,您需要先连接到您的数据源。
Kettle支持多种类型的数据源,包括关系型数据库、文件、Web服务等。
您可以使用Kettle提供的连接器来连接到您的数据源,或者根据需要自定义连接器。
连接成功后,您可以在Kettle中查看和操作您的数据。
三、创建转换在Kettle中,数据转换是通过创建转换作业来实现的。
转换作业是由一系列的转换步骤组成的,每个步骤都执行特定的数据操作。
您可以使用Kettle提供的各种转换步骤,如数据提取、数据过滤、数据转换、数据加载等,来构建您的转换作业。
四、配置转换步骤在创建转换作业后,您需要配置每个转换步骤的参数和选项。
例如,在数据提取步骤中,您需要指定要提取的数据源和查询条件。
在数据转换步骤中,您可以定义数据的转换逻辑,如数据清洗、数据合并、数据计算等。
在数据加载步骤中,您需要指定目标数据表和加载方式。
五、运行转换作业完成转换步骤的配置后,您可以运行整个转换作业,将数据从源数据源提取、转换和加载到目标数据源。
在运行转换作业之前,您可以选择性地预览转换结果,以确保数据操作的准确性和一致性。
Kettle还提供了调试功能,可以帮助您快速定位和解决转换作业中的问题。
六、调度转换作业除了手动运行转换作业之外,Kettle还支持将转换作业安排为定期执行的任务。
您可以使用Kettle提供的调度功能,根据您的需求设置转换作业的执行时间和频率。
ETL利器KETTLE实战应用解析之KETTLE应用场景和实战DEMO

1、应用场景这里简单概括一下几种具体的应用场景,按网络环境划分主要包括:∙表视图模式:这种情况我们经常遇到,就是在同一网络环境下,我们对各种数据源的表数据进行抽取、过滤、清洗等,例如历史数据同步、异构系统数据交互、数据对称发布或备份等都归属于这个模式;传统的实现方式一般都要进行研发(一小部分例如两个相同表结构的表之间的数据同步,如果sqlserver数据库可以通过发布/订阅实现),涉及到一些复杂的一些业务逻辑如果我们研发出来还容易出各种bug;∙∙前置机模式:这是一种典型的数据交换应用场景,数据交换的双方A和B网络不通,但是A和B都可以和前置机C连接,一般的情况是双方约定好前置机的数据结构,这个结构跟A和B的数据结构基本上是不一致的,这样我们就需要把应用上的数据按照数据标准推送到前置机上,这个研发工作量还是比较大的;∙∙文件模式: 数据交互的双方A和B是完全的物理隔离,这样就只能通过以文件的方式来进行数据交互了,例如XML格式,在应用A中我们开发一个接口用来生成标准格式的XML,然后用优盘或者别的介质在某一时间把XML数据拷贝之后,然后接入到应用B上,应用B 上在按照标准接口解析相应的文件把数据接收过来;∙综上3种模式如果我们都用传统的模式无疑工作量是巨大的,那么怎么做才能更高效更节省时间又不容易出错呢?答案是我们可以用一下Kettle-_-!2、DEMO实战2、1 实例1:数据库TestA中的UserA表到数据库TestB的UserB表1)为方便演示,我这边把Sql脚本贴出来,大家直接复制在sqlserver中运行即可,sql脚本如下:简单表之间交换2)Kettle实现方式功能简述:数据库TestA中的UserA表到数据库TestB的UserB表;实现流程:建立一个转换和一个作业Job;A:建立一个转换:打开Kettle.exe,选择没有资源库,进入主界面,新建一个转换,转换的后缀名为ktr,转换建立的步骤如下:步骤1:创建DB连接,选择新建DB连接,如下图,我们输入相应的Sqlserver配置信息之后点击Test按钮测试是否配置正确!我们需要建立两个DB连接,分别为TestA和TestB;步骤2:建立步骤和步骤关系,点击核心对象,我们从步骤树中选择【表输入】,如下图,这样拖拽一个表输入之后,我们双击表输入之后,我们自己可以随意写一个sql语句,这个语句表示可以在这个库中随意组合,只要sql语句没有错误即可,我这里只是最简单的把TestA中的所有数据查出来,语句为select * from usersA。
kettle 案例

kettle 案例【原创版】目录1.Kettle 简介2.Kettle 的功能与应用3.Kettle 的优势与局限性4.Kettle 案例分析5.Kettle 的未来发展前景正文1.Kettle 简介Kettle 是一款开源的数据集成工具,主要用于数据提取、转换和加载(ETL)过程。
它支持各种数据源和目标,包括数据库、Web 服务、文本文件等,并具有丰富的数据转换功能,如数据过滤、排序、聚合等。
Kettle 可以帮助用户简化复杂的数据集成任务,提高数据处理的效率和准确性。
2.Kettle 的功能与应用Kettle 的主要功能包括以下几个方面:(1)数据源连接:Kettle 支持多种数据源,如数据库、Web 服务、文本文件等,可以方便地连接到各种数据源进行数据处理。
(2)数据转换:Kettle 提供了丰富的数据转换功能,如数据过滤、排序、聚合等,可以满足各种复杂的数据处理需求。
(3)数据集成:Kettle 支持将多个数据源的数据集成到一起,便于进行数据分析和挖掘。
(4)任务调度:Kettle 可以根据业务需求,设置数据处理的时间、频率等,实现自动化的任务调度。
3.Kettle 的优势与局限性Kettle 的优势主要体现在以下几个方面:(1)开源免费:Kettle 是一款开源的数据集成工具,用户可以免费使用,降低了企业的成本。
(2)功能丰富:Kettle 支持多种数据源和目标,具有丰富的数据转换功能,可以满足各种复杂的数据处理需求。
(3)易用性强:Kettle 的界面友好,操作简单,用户可以快速上手。
然而,Kettle 也存在一些局限性,如性能较低、处理大数据量时效率不高等。
4.Kettle 案例分析以某企业为例,由于业务发展需要,需要将多个部门的数据进行整合,以便进行数据分析和决策。
采用 Kettle 后,可以方便地连接到各个部门的数据源,进行数据提取、转换和加载,最终实现数据的统一管理和分析。
5.Kettle 的未来发展前景随着大数据、云计算等技术的发展,数据集成需求越来越大。
kettle对不同类型文件数据进行转换的基本方法的实验总结

kettle对不同类型文件数据进行转换的基本方法的实验总结Kettle对不同类型文件数据进行转换的基本方法的实验总结导言在当今信息时代,数据的处理和转换是企业和个人不可或缺的重要任务。
而对于数据处理工具来说,Kettle(即Pentaho Data Integration)无疑是其中一员佼佼者。
它是一款开源的ETL (Extract-Transform-Load)工具,能够帮助用户快速、高效地处理各种类型的数据。
本文将着眼于Kettle在不同类型文件数据转换方面的基本方法进行实验总结,希望能够为读者提供一份有价值的参考。
一、CSV文件数据转换1.读取CSV文件CSV(Comma Separated Values)文件是一种常见的以逗号分隔的文本文件格式,常用于数据交换。
在Kettle中,我们可以通过添加"CSV输入"步骤来读取CSV文件数据。
在进行数据转换之前,我们有时需要将CSV文件中的数据格式进行调整。
将日期字段转换为日期类型、将数值字段转换为特定精度的数值类型等。
Kettle提供了"Select values"和"Modify"等步骤来满足这些需求。
3.数据清洗和过滤在实际的数据处理中,我们可能会遇到一些数据质量问题,比如缺失值、异常值等。
此时,我们可以使用Kettle提供的"Filter rows"和"Cleanse"等步骤来进行数据清洗和过滤,确保数据质量的可靠性和准确性。
二、Excel文件数据转换1.读取Excel文件与CSV文件不同,Excel文件是一种二进制文件格式,它包含了丰富的数据类型和复杂的表结构。
在Kettle中,我们可以通过添加"Excel 输入"步骤来读取Excel文件数据。
在进行读取时,我们需要注意选择适当的Sheet以及指定正确的列和行范围。
与CSV文件一样,我们通常需要对Excel文件中的数据进行格式转换。
kettle应用实践(转)

kettle应用实践(转)今天早上在网上看到了kettle发布了最新的版本,忽然想起最近其实做了不少工作应该是ETL工具的拿手好戏,赶紧下载下来看看,看是否能够在实际的工作中应用起来。
顺便讲一下,为啥看到kettle会两眼发光。
最近写了好几个小程序,用于从一个ftp去获取数据,然后转发至另一个ftp去,或者是从一个数据库获取数据然后保存至本地的数据库中,使用的是jdk中的Timer实现的定时调度,本来也没什么问题,连续运行几个月都不会出错。
可是最近网络不是太好,周期性抽风,ping包时,每5分钟大概会丢7-8个包,从而导致程序也会假死,过一段时间后就不正常干活了,估计是因为用了数据库连接池的问题,要是每次发起数据库连接可能就不会有问题了,偷懒也不想改了,因为网络最终肯定是会修好的 :-) 但是想试试ETL工具,因为后面还有一些类似的东西要处理,不想写代码了,用别人的轮子感觉比较好,呵呵首先下载了kettle的最新版,kettle3.1,解压后即可运行,一般的开发人员稍微摸索一下,看看例子简单的转换还是会做的,今天小试了一把,有几个注意点记下来。
1.使用资源库(repository)登录时,默认的用户名和密码是admin/admin2.当job是存放在资源库(一般资源库都使用数据库)中时,使用Kitchen.bat执行job时,需使用如下的命令行:Kitchen.bat /rep kettle /user admin /pass admin /job job名3.当job没有存放在资源库而存放在文件系统时,使用Kitchen.bat执行job时,需使用如下的命令行:Kitchen.bat /norep /file user-transfer-job.kjb4.可以使用命令行执行job后,就可以使用windows或linux的任务调度来定时执行任务了在一开始使用命令行方式执行job时,总是报如下的错误,琢磨了好长时间总算整明白正确的方式了。
kettle工具应用实例 -回复

kettle工具应用实例-回复什么是kettle工具?Kettle工具是一款开源的数据集成和ETL(Extract, Transform, Load)工具,也可以叫做Pentaho Data Integration。
它提供了一组强大的数据操作功能,可以将数据从不同的数据源中提取、转换和加载到目标系统中。
它支持多种类型的数据源和目标系统,并且具有强大的数据转换和清洗能力。
接下来,我们通过一个实例来了解kettle工具的应用。
假设我们是一个电子商务公司,我们有来自不同渠道的销售数据,包括线上平台、线下门店以及第三方分销渠道。
我们希望将这些数据集成到我们的数据仓库中,以便进行深入的分析和决策支持。
首先,我们需要连接到不同的数据源。
假设我们的在线平台使用MySQL 数据库,线下门店使用Oracle数据库,而第三方分销渠道使用API接口提供数据。
我们可以使用Kettle的“Database Connection”和“HTTP Client”组件来与这些数据源进行连接。
接下来,我们需要从不同的数据源中提取数据。
我们可以使用Kettle的“Table Input”和“HTTP Client”组件来执行SQL查询和发送HTTP请求,从而获取相关数据。
我们可以指定查询条件和字段映射,确保只获取我们需要的数据。
然后,我们需要对数据进行转换和清洗,以适应目标系统的要求。
例如,我们可能需要将日期格式进行转换,将字符串进行拼接或分割,将数据进行聚合等。
Kettle提供了一系列的数据转换和清洗组件,如“Select Values”,“Regex”,”Merge Join”等,以满足不同的需求。
在转换和清洗数据之后,我们可以使用Kettle的“Insert/Update”或“Bulk Load”组件将数据加载到我们的目标系统中。
这可以是一个数据仓库、数据湖或其他任何存储系统。
除了数据集成和转换之外,Kettle还提供了许多其他的功能,如数据校验、数据重复删除、数据合并、数据分割等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
kettle应用实践(转)
今天早上在网上看到了kettle发布了最新的版本,忽然想起最近其实做了不少工作应该是ETL工具的拿手好戏,赶紧下载下来看看,看是否能够在实际的工作中应用起来。
顺便讲一下,为啥看到kettle会两眼发光。
最近写了好几个小程序,用于从一个ftp去获取数据,然后转发至另一个ftp去,或者是从一个数据库获取数据然后保存至本地的数据库中,使用的是jdk中的Timer实现的定时调度,本来也没什么问题,连续运行几个月都不会出错。
可是最近网络不是太好,周期性抽风,ping包时,每5分钟大概
会丢7-8个包,从而导致程序也会假死,过一段时间后就不正常干活了,估计是因为用了数据库连接池的问题,要是每次发起数据库连接可能就不会有问题了,偷懒也不想改了,因为网络最终肯定是会修好的 :-) 但是想试试ETL工具,因为后面还有一些类似的东西要处理,不想写代码了,用别人的轮子感觉比较好,呵呵
首先下载了kettle的最新版,kettle3.1,解压后即可运行,一般的开发人员稍微摸索一下,看看例子简单的转换还是会做的,今天小试了一把,有几个注意点记下来。
1.使用资源库(repository)登录时,默认的用户名和密码是admin/admin
2.当job是存放在资源库(一般资源库都使用数据库)中时,使用
Kitchen.bat执行job时,需使用如下的命令行:
Kitchen.bat /rep kettle /user admin /pass admin /job job名
3.当job没有存放在资源库而存放在文件系统时,使用Kitchen.bat执行
job时,需使用如下的命令行:
Kitchen.bat /norep /file user-transfer-job.kjb
4.可以使用命令行执行job后,就可以使用windows或linux的任务调度来
定时执行任务了
在一开始使用命令行方式执行job时,总是报如下的错误,琢磨了好长时间总算整明白正确的方式了。
Unexpected error during transformation metadata load
No repository defined!
下一步准备按照实际情况定制Job,做好了再写小结。
问答:Unexpected error during transformation metadata load
No repository defined!
这个问题你最后怎么解决的?
@吴悔
一开始我是将Job和Transfomation都是存放在资源库中的,然后使用Kitchen.bar执行时会报上述错误,后来登录kettle时,选择“不使用资源库”,直接将Job和Transfomation保存在本地文件中,再使用Kitchen.bat执行就没有问题了。
Kettle的第一个实践--从FTP上取文件,再放至另一个FTP上
这个实践其实不难,主要是有一个地方要注意,就是文件名通配符的写法,如果文件名格式为“TRANS_yyyymmdd.txt”,如TRANS_20081101.txt。
如果想匹配所有以TRANS开头的文本文件,在kettle中要写成这样:
TRANS_.*[0-9].txt。
最后在windows操作系统中配置定时任务就可以定期执行该Job了。
Job的图:
FTP配置信息:
Kettle的第二个实践--数据获取并转换
需求:
kettletest1数据库中有table_source数据表,结构如下:
1.Id 主键
2.t_id 数据时间
3.part_id 实例ID
4.yg 数据字段1
5.wg 数据字段2
该表中的数据对于不同的实例ID,一分钟一条数据,t_id字段表示数据的时间,精确到分钟。
kettletest2数据库中有table_target数据表,结构如下:
1.Id 主键
2.marketdate 数据日期,格式为 yyyy-MM-dd
3.pointtime 时间,格式为 HH:mm
4.pointnumber 时间的数字表示,00:01表示为1,00:00表示为1440
5.plantcode 实例Code
6.yg 数据字段1
7.wg 数据字段2
需定期将table_source表中的数据获取至table_target表中,并进行如下处理:
1、将t_id数据时间字段拆分为三个字段,分别为marketdate、pointtime、pointnumber。
a、marketdate取t_id的日期部分。
b、pointtime取t_id的时间部分。
c、pointnumber为时间的数字表示,等于hour*60+minute。
d、但当t_id的时间为某日的00:00时,需将其转化为24:00,并且marketdate需取日期的前一天。
如t_id为2008-12-04 00:00,则marketdate 为2008-12-03,pointtime为24:00,pointnumber为1440。
2、将part_id字段映射为plantcode字段,并根据如下规则进行转换:
part_id plantcode
3206 P01
3207 P02
3208 P03
测试中使用的数据库均为mysql数据库。
实战:
整个转换工作共分为三个步骤,如下图:
1、定义需获取的数据的日期
2、删除table_target表中已有数据,注意一定要将“执行SQl语句”面板中的“变量替换”要选上,否则SQL语句中的变量不会被替换,我刚开始没注意到这个地方,找问题找了半天。
3、获取table_source中的数据,并将其插入table_target表
3-1、获取table_source表的数据
3-2、值映射
3-3、字段选择
3-4、对t_id字段进行处理,增加了pointnumber字段。
在这一步骤中发现kettle的一个bug,就是不能在JavaScript中使用str2date函数,错误的具体信息参见:/browse/PDI-1827。
这个问题也折腾了好长时间,刚开始怎么也想不通这个函数使用时怎么会报错呢,后来只好从字符串中截取年、月、日信息。
该步骤中还存在另外一个使人困惑的问题,就是点击“测试脚本”按钮,会报错,但是执行job和transformation时则不会报错。
3-5、增加pointnumber字段至输出结果中
3-6、插入数据至table_target表
3-4步骤中的JavaScript代码如下:
var pointTimeStr = pointtime.getString(); var pointnumber = 1;
if (pointTimeStr == "00:00") {
var marketDateStr = marketdate.getString();
var marketDateYear = substr(marketDateStr, 0, 4);
var marketDateMonth = str2num(substr(marketDateStr, 5, 2))-1; var marketDateDay = substr(marketDateStr, 8, 2);
var date = new Date();
date.setYear(marketDateYear);
date.setMonth(marketDateMonth);
date.setDate(marketDateDay);
var temp1 = dateAdd(date, "d", -1);
marketdate.setValue(date2str(temp1, "yyyy-MM-dd"));
pointtime.setValue("24:00");
pointnumber = 1440;
} else {
var hourStr = pointTimeStr.substr(0, 2);
var hour = str2num(hourStr);
var minuteStr = pointTimeStr.substr(3, 5);
var minute = str2num(minuteStr);
pointnumber = hour * 60 + minute;
}
至此,整个转换工作完成,小结一下:
如果对kettle等etl工具比较熟悉的话,使用etl工具进行数据转换、抽取等事情还是比较方便的,比起写程序还是有优势的。
但是这个转换过程中遇到的kettle的两个bug比较让人头疼,觉得kettle好像还不是很稳定。