开源etl工具kettle系列之增量更新设计技巧

开源etl工具kettle系列之增量更新设计技巧

ID:13388641

大小:101.50 KB

页数:6页

时间:2018-07-22

开源etl工具kettle系列之增量更新设计技巧_第1页
开源etl工具kettle系列之增量更新设计技巧_第2页
开源etl工具kettle系列之增量更新设计技巧_第3页
开源etl工具kettle系列之增量更新设计技巧_第4页
开源etl工具kettle系列之增量更新设计技巧_第5页
资源描述:

《开源etl工具kettle系列之增量更新设计技巧》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、ETL中增量更新是一个比较依赖与工具和设计方法的过程,Kettle中主要提供Insert/Update步骤,Delete步骤和DatabaseLookup步骤来支持增量更新,增量更新的设计方法也是根据应用场景来选取的,虽然本文讨论的是Kettle的实现方式,但也许对其他工具也有一些帮助。本文不可能涵盖所有的情况,欢迎大家讨论。应用场景增量更新按照数据种类的不同大概可以分成:1. 只增加,不更新,2. 只更新,不增加3. 即增加也更新4. 有删除,有增加,有更新其中1,2,3种大概都是相同的思路,使用的步骤可能略有

2、不同,通用的方法是在原数据库增加一个时间戳,然后在转换之后的对应表保留这个时间戳,然后每次抽取数据的时候,先读取这个目标数据库表的时间戳的最大值,把这个值当作参数传给原数据库的相应表,根据这个时间戳来做限定条件来抽取数据,抽取之后同样要保留这个时间戳,并且原数据库的时间戳一定是指定默认值为sysdate当前时间(以原数据库的时间为标准),抽取之后的目标数据库的时间戳要保留原来的时间戳,而不是抽取时候的时间。  对于第一种情况,可以使用Kettle的Insert/Update步骤,只是可以勾选Don’tperfor

3、manyupdate选项,这个选项可以告诉Kettle你只会执行Insert步骤。对于第二种情况可能比较用在数据出现错误然后原数据库有一些更新,相应的目标数据库也要更新,这时可能不是更新所有的数据,而是有一些限定条件的数据,你可以使用Kettle的Update步骤来只执行更新。关于如何动态的执行限定条件,可以参考前一篇文章。第三种情况是最为常见的一种情况,使用的同样是Kettle的Insert/Update步骤,只是不要勾选Don’tperformanyupdate选项。第四种情况有些复杂,后面专门讨论。对于第1

4、,2,3种情况,可以参考下面的例子。这个例子假设原数据库表为customers,含有一个id,firstname,lastname,age字段,主键为id,然后还加上一个默认值为sysdate的时间戳字段。转换之后的结果类似:id,firstname,lastname,age,updatedate.整个设计流程大概如下:                                                                        图1其中第一个步骤的sql大概如下模式:Select

5、max(updatedate)fromtarget_customer;你会注意到第二个步骤和第一个步骤的连接是黄色的线,这是因为第二个tableinput步骤把前面一个步骤的输出当作一个参数来用,所有Kettle用黄色的线来表示,第二个tableinput的sql模式大概如下:Selectfield1,field2,field3fromcustomerswhereupdatedate>?后面的一个问号就是表示它需要接受一个参数,你在这个tableinput下面需要指定replacevariableinscript

6、选项和executeforeachrow为选中状态,这样,Kettle就会循环执行这个sql,执行的次数为前面参数步骤传入的数据集的大小。                                                                            图2关于第三个步骤执行insert/update步骤需要特别解释一下,                                                                               

7、     图3Kettle执行这个步骤是需要两个数据流对比,其中一个是目标数据库,你在Targettable里面指定的,它放在Thekeystolookupthevalues(s)左边的Tablefield里面的,另外一个数据流就是你在前一个步骤传进来的,它放在Thekeystolookupthevalue(s)的右边,Kettle首先用你传进来的key在数据库中查询这些记录,如果没有找到,它就插入一条记录,所有的值都跟你原来的值相同,如果根据这个key找到了这条记录,kettle会比较这两条记录,根据你指定up

8、datefield来比较,如果数据完全一样,kettle就什么都不做,如果记录不完全一样,kettle就执行一个update步骤。所以首先你要确保你指定的key字段能够唯一确定一条记录,这个时候会有两种情况:1.维表2.事实表维表大都是通过一个主键字段来判断两条记录是否匹配,可能我们的原数据库的主键记录不一定对应目标数据库中相应的表的主键,这个时候原数据库的主键就变成了业

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。