一、问题
二、实现方案
2.1、思路
2.2、步骤
三、后记
一、问题
数据仓库的体系结构一般都有数据源层:从多个数据源增量或全量同步数据到数据仓库,表结构和数据源的结构基本一致。以后的ETL处理都是基于该层中的数据,不再直接从业务库中获取,这样业务层就和数据仓库实现了解耦。
随着业务的变化,表结构更改是很频繁的,导致同时需要更改数据仓库里的表结构,如果业务库更改的同时没有及时更改数据源层里的表结构,同步就会失败。这就要求我们能够自动同步表结构,避免同步失败的风险。
二、实现方案
2.1、思路
表结构是可以在数据库的元数据中查到的,通过比较两边的元数据,增加相应的字段。这里以mysql为例,表结构是在information_schema.COLUMNS表中。
2.2、步骤
表结构是可以在数据库的元数据中查到的,通过比较两边的元数据,增加相应的字段。这里以mysql为例,表结构是在information_schema.COLUMNS表中。
1、从配置表中读取需要同步表结构的信息
从配置表中好处是,当有新的表需要同步,不用修改JOB,提高系统灵活性;配置表结构:
CREATE TABLE `etl_ods_table` (
`tablename` varchar(100) DEFAULT NULL COMMENT '表名',
`dbname` varchar(100) DEFAULT NULL COMMENT '数据库名'
);
创建Transformation,从etl_ods_table读取数据,并用Copy rows to result组件,把查询的结果信息传递给下一个Transformation:
2、比较业务库表结构和DW中表结构,并执行修改表结构操作
创建trans_syn_table_structure Transformation,并在Parameters输入DB_NAME和TABLE_NAME两个参数:
新建两个表输入组件,命名为online和dw,分别查询业务库和DW数据库中的表结构,例如:
根据列字段进行排序,找到业务库有而DW库没有的字段,在dw数据库中根据找到的这些信息执行alter操作:
Transformcation的整体执行过程:
3、新建JOB
新建job_syn_table_structure,trans顺序执行,并失败时发送通知邮件:
加入KETTLE技术交流群,分享学习心得,一起共同进步。
QQ群:452881901,扫下方二维码快速加群:
点击下方阅读原文,下载JOB