kettle抽取——多平台汇总数据仓库

kettle版本:6.0
jdk:1.7(注意:经多次实验,6.0必须用jdk1.7,5.x的可以使用1.6jdk)
系统:64位 windows7 旗舰版
配置:内存(8G),处理器(i5-4590 CPU 3.30GHz)

一、需求简介

1.多个平台数据汇总到数据仓库,最后的所有表在数据仓库是完备的
注意点:
a.平台1和平台2各有1200和1100张表,其中1000张表在两个平台都有,另外平台1的200张表和平台2的100张表示各自拥有的,那么数据仓库就会有1300张表,其中1000张共有表抽取到数据仓库的时候由于有平台值主键不会发生冲突
b.汇总后数据仓库里的表名会有所改变,会有三种形式:依旧是原表名、原表名+后缀1、原表名+后缀2
2.汇总表的同时每条记录都要记录日志表,日志表有两个,一个为记录成功或失败记录,一个为分配已成功抽取的表进行数据清洗、对比、转换等数据处理
名词设定:需要抽取的表称为基础表,记录成功或失败记录的表称为历史表,分配任务的表称为清洗表,下文皆同

二、思路简介

正常思路:从数据仓库中拿出所有表并设置变量,然后获取变量值再从各个平台分别抽取这些表,抽取之前剔除不存在的表;抽取一条记录成功或失败都记录到历史表中,最后从历史表中拿出数据并转换、判断插入清洗表
但这里存在难点:由于kettle的限制,你不能一条数据一条数据的来,只能一堆数据一堆数据的来,所以抽取一条基本表就记录一条历史表这个是实现不了的
所以思路进行调整,抽取完基本表,如果抽取成功,就从基本表里全部拿出数据并记录到历史表且标记为“成功”;如果抽取失败,则跳出这个表的抽取程序,并记录一条失败的记录到历史表,这样的话就能实现需求的功能,只不过失败的表需要重新抽取整个表,而不是跳过失败的那条记录然后继续抽取其它的数据

三、流程概览

整个抽取流程包括2个job和7个transform
总作业
总作业
抽取数据作业
抽取数据
这两个作业大体显示了整个抽取的流程
从变量的设置、获取,到数据的剔除、清洗、抽取、记录日志等

四、细节整理

1.总作业

总作业的图我已经放在(三)中了,包裹一个transform和一个job,获取表名列表是从数据仓库中获取要抽取的表名列表,抽取数据作业是具体的数据转换、清洗、抽取过程

2.获取表名列表

获取表名列表
我是将需要抽取的表分成三部分:表名不变的,表名+后缀1,表名+后缀2,并分别存在TABLE_NAEE这个表中,因为这三种情况是分别配置的,所以配置哪个就使用TABLE_NAEE表的相关列就行了
表输入:
表输入
复制记录到结果,这一步的目的是将表名列表放入一个集合并可以传递到下一个流程,方便获取,同时还能实现循环输入

3.抽取数据

抽取数据的图已经放在(三)中了,这步就是这个抽取的核心了,也就是需要循环的地方,循环的设置看下图
循环设置

4.设置表名变量

设置表名变量
首先从上一步的结果中获取记录,注意它是从上面的一列表名中一个一个的获取,而不是所有的拿过来,所以才能实现循环,然后将拿到的表名设置为变量,方便下面表输入和表输出的使用

5.计算表中的记录数、表不存在或表中没有数据

记算表中的记录数
在原平台中查询出该表的总数,好比select count(*) from table ,如果count大于0就继续进行下一步,如果不是大于0(也就表示这个表不存在或者表中没有数据)就会指向“表不存或表中没有数据步骤”,跳过后面步骤,进行下一个循环。
这一步的目的就是过滤掉那些平台没有的表或表中没有数据的表,只进行有必要抽取的表

6.获取PRIMARY_VALUE,设置org

获取平台值
上面这两步,没有什么可借鉴的,因项目的不同而不同
获取PRIMARY_VALUE是获取每个表的主键值并放在一个字段里,这个是通过语句获取的
获取主键值
设置org也是通过语句获取的,就是每个平台对应的平台值,用于区分平台
获取平台值

7.抽取基本表

基本表抽取
抽取基本表主要就是三步,获取表名,表输入,表输出。
需要注意的是表名用的都是变量,而且表输出的表名是根据你选择的不同而不同
a.如果你选择的是平台表名和数据仓库表名一样的,那就是” tablenameb.+ {table_name}”后面加上后缀名,比如在表输出的目标表里直接填上“${table_name}_1”
而且如果这一步出现了错误,比如字段过大,唯一性错误,就会停止抽取这个表并指向“失败 新增history”

8.新增历史表

新增历史表
由于是细节问题,我就不方便展示了,大体的流程就是获取变量(包括表名变量,主键值),表输入(查询基本表并且通过判断字段、拼接字段、获取系统时间等得到历史表需要的字段),增加序列(这一步是提出序列号作为每条记录的主键),输出到历史表(由于有多变量传入,并且只是使用变量的转换值,所以需要勾上指定数据库字段并且将各个字段对应上,见下图)
指定数据库字段
如果是基本表抽取失败后新增历史表,跟上面这个历史表的流程是一样的,只不过在表输入的时候只需要将表名,出入即可,其它的字段可以设为默认值比如空值,而且只需要插入一条记录就可以了(你只需要一条记录就可以知道这个表抽取失败了,而不是像成功抽取一样几下每条抽取成功的信息)

9.新增清洗表

输出到清洗表
到这一步就比较简单了,获取变量、表输入、表输出就可以。核心就在表输入,从历史表中获取数据并加入条件判断将数据合理分配给某个清洗服务器就可以了,可以使用平均表数量的分配方法,也可以使用固定平台对应固定清洗服务器的方法(推荐),还可以使用随机抽取的方法(当然不推荐这个)
以上就是抽取的整个流程和细节,因为涉及到项目的一些信息,所以后面只是给出了流程和思路,并没有将每个转换里的内容都呈现出来,如果有朋友遇到类似的问题需要像我上面那样去解决,可以留言给我,大家一起讨论讨论,而不是想我这样连续通宵搞

五、项目总结

由于这个需求来得很快很急,所以是通宵搞的,而需要通宵搞得原因有几个,整理如下,希望大家可以借鉴避免入坑:

1.明确需求,最好有份比较清晰详细的需求分析说明书(针对这次需求的)

我接到这个需求的时候是项目经理直接来找我,让我“试试看”,然后就大体的介绍了数据的抽取情况,大体到什么程度呢,就是文章开头的需求简介,不过没有这么精简罢了。然后遇到什么问题我看出来了,我就去问需求和经理,但是没有看出来的问题就操蛋了,直接报错到我的流程里,调试了半天才发现是需求没有说清楚,漏了一些问题产生bug,最后的最后,即使到了现场,需求也没有把所有的细节都告诉我,到了现场我还要调整流程。为了这些“不清楚”我花费了太多的时间和经历,所以首先是要明确需求,最好有份文档(因为人总有遗漏的地方,有忘问的,有忘答的,只要有一方没有说清楚或问清楚,出了问题还得你来解决,耽误真个流程的编写和测试)

2.测试

测试,测试,测试,重要的事情说三遍。我们公司的人天天抱怨测试,但是测试是必须的而且很重要。自测和测试人员测试都有必要,这次因为没有时间所以没有走测试人员测试,有些问题到了现场才发现,又是一笔时间,而且现场数据不可以乱动,你也不好调试

3.了解每个组件

了解每个组件的使用功能和使用环境,不要到了做的时候再一个一个试,伤不起。

感谢大家的阅读,如果有什么关于交流的方式或途径、文档、群体,可以在下方留言,人多好办事,一个人解决不了的就让一百个人来解决,总能解决的。同时欢迎大家提出文章的错处和可优化处!

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
kettle是一款强大的ETL工具,可以用于据的抽取、转换和加载。如果要使用kettle抽取据库内所有表的据,可以按照以下步骤进行操作: 1. 首先,通过kettle据库连接功能连接到目标据库。你需要提供据库的连接信息,包括据库类型、主机名、端口号、据库名称、用户名和密码等。 2. 在kettle的工作区中创建一个新的Transformation(转换)任务。在Transformation中,你可以添加多个步骤来完成抽取的过程。 3. 在Transformation中添加一个"Table Input"(表输入)步骤。在该步骤的设置中,选择目标据库,并选择要抽取据的表。 4. 添加一个输出步骤,例如"Text File Output"(文本文件输出)。在该步骤的设置中,选择输出的文件路径和格式,以及要包含的字段。 5. 可以根据需要添加其他步骤,例如据转换、据过滤等,以满足据处理的要求。 6. 运行Transformation,kettle将按照设定的步骤顺序依次执行,并将据库内所有表的抽取到指定的输出文件中。 7. 完成抽取后,你可以根据需要对输出的文件进行进一步处理,例如导入到其他系统或据库中。 总结起来,使用kettle抽取据库内所有表据的过程包括连接据库、创建Transformation任务、设置抽取步骤、运行任务并输出结果。这样就可以方便地将据库内的据提取到指定的输出文件中,为后续的据处理和分析提供方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值