登陆

极彩娱乐注册官方网站-Spring Boot 运用 ETL kettle

admin 2019-10-31 285人围观 ,发现0个评论

本号首要用于共享企业中常用的技能,愈加侧重于有用,欢迎重视,便于阅读其它更多有用的历史文章。

一:简介

ETL,是英文Extract-Transform-Load的缩写,用来描绘将数据从来历端经过萃取(extract)、转置(transform)、加载(load)至意图端的进程。ETL一词较常用在数据仓库(Data Warehouse简称DW),但其目标并不限于数据仓库。

ETL是将事务体系的数据经过抽取(Extract)、清洗转化(Cleaning、Transform)之后加载(Load)到数据仓库的进程,意图是将企业中的涣散、零乱、规范不一致的数据整合到一同,为企业的决议计划供给剖析根据。 ETL是商业智能(BI,Business Intelligence)项目重要的一个环节。

BI(Business Intelligence)即商务智能,它是一套完好的处理方案,用来将企业中现有的数据进行有用的整合,快速精确地供给报表并提出决议计划根据,协助企业做出正确的事务运营决议计划。

二:Data Integration装置

2.1 下载 Data Integration

下载地址:https://sourceforge.net/projects/pentaho/files/Data Integration/ 挑选最新的版别下载,这儿最新版别为7.1,下载并解压 pdi-ce-7.1.0.0-12.zip 。留意:Data Integration是用Java开发的,是不区别体系的,Windows、MacOSX都是下载这个装置文件,这个装置文件是绿色版的,只需解压即可。

2.2 将mysql驱动放入到lib目录中

将mysql驱动jar(我这儿运用的是5.1.40版别,mysql-connector-java-5.1.40.jar)放到pdi-ce-7.1.0.0-12/data-integration/lib目录下

三: 数据库预备

order库用于存储订单数据,user库用户存储用户信息数据,report库用于存储从order和user库相关的报表数据。

开发中咱们将数据库分为两种类型:

一种是事务库,专门供事务调用;像表报事务等是不允许查询该数极彩娱乐注册官方网站-Spring Boot 运用 ETL kettle据库的。

另一种是报表库,咱们要求报表中的数据不能查询事务库,咱们需求将事务库中的数据保存到报表库中,然后从报表库中查询。

order数据库
# 产品表
DROP TABLE IF EXISTS `tbl_goods`;
CREATE TABLE `tbl_goods` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`price` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `tbl_goods` VALUES ('1', 'iPhone X', '10'), ('2', 'Apple Watch', '15'), ('3', 'Macbook Pro', '20'), ('4', 'AirPods', '30');
# 订单表
DROP TABLE IF EXISTS `tbl_order`;
CREATE TABLE `tbl_order` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`order_code` varchar(64) DEFAULT NULL,
`total_amount` bigint(20) DEFAULT NULL,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`user_id` bigint(20) DEFAULT NULL,
`address_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `tbl_order` VALUES ('1', '2019040314160001', '70', '2019-04-02 14:16:31', '1', '1'), ('2', '2019040314160002', '130', '2019-04-03 17:34:58', '1', '1'), ('3', '2019040314160003', '340', '2019-04-03 18:22:07', '1', '1');
# 订单项表
DROP TABLE IF EXISTS `tbl_order_item`;
CREATE TABLE `tbl_order_item` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`order_id` bigint(20) DEFAULT NULL,
`goods_id` bigint(20) DEFAULT NULL,
`quantity` bigint(20) DEFAULT NULL,
`price` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
INSERT INTO `tbl_order_item` VALUES ('1', '1', '1', '2', '10'), ('2', '1', '2', '4', '15'), ('3', '2', '1', '1', '10'), ('4', '2', '3', '6', '20'), ('5', '3', '3', '2', '20'), ('6', '3', '4', '10', '30');

user数据库

# 用户地址表
DROP TABLE IF EXISTS `tbl_address`;
CREATE TABLE `tbl_address` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`province` varchar(255) DEFAULT NULL,
`city` varchar(255) DEFAULT NULL,
`area` varchar(255) DEFAULT NULL,
`address` varchar(255) DEFAULT NULL,
`user_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
INSERT INTO `tbl_address` VALUES ('1', '上海', '上海市', '浦东新区', '张江镇xxx', '1');
# 用户表
DROP TABLE IF EXISTS `tbl_user`;
CREATE TABLE `tbl_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
INSERT INTO `tbl_user` VALUES ('1', '张三');

report数据库

# 报表表
DROP TABLE IF EXISTS `tbl_report_order_detail`;
CREATE TABLE `tbl_report_order_detail` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`order_id` bigint(20) DEFAULT NULL,
`order_code` varchar(255) DEFAULT NULL,
`total_amount` bigint(20) DEFAULT NULL,
`goods_name` varchar(255) DEFAULT NULL,
`price` decimal(10,0) DEFAULT NULL,
`quantity` varchar(255) DEFAULT NULL,
`user_name` varchar(255) DEFAULT NULL,
`address` varchar(255) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=39 DEF极彩娱乐注册官方网站-Spring Boot 运用 ETL kettleAULT CHARSET=水下古城utf8;

四:转化

0. etl在报表中的实践

etl一般在大数据、商务智能上运用较多,这儿介绍一下运用etl来制造报表:从多个数据极彩娱乐注册官方网站-Spring Boot 运用 ETL kettle库中查询数据汇总在一同刺进到一张独自的表中。

报表中的数据一般展现的比较全面,一般需求多个表相关查询才干拿到一切需求的数据。在开发中刚开始一般都是直接多表查询,跟着微服务的呈现,咱们会对数据库进行拆分,一个微服务对应着一个数据库,比方订单微服务对应着订单库,用户微服务对应着用户库,这样会将表拆分到多个库中,报表中再进行多表相关查询就行不通了,为了处理拆库而不能多表衔接查询的问题,咱们运用Java代码来补偿这个缺点,咱们先在自己微服务对应的数据库先查部分数据,然后经过调用其它微服务的接口获取其它部分数据,然后再将这些部分数据组装成完好的数据,这样也能拿到完好的数据。有些报表查看是不运用任何条件过滤,即会走全表扫描的,跟着订单数量的不断增多,跟着部分查询不走索引,跟着经过调用其它微服务接口来获取其它部分数据而耗费的时刻,这些状况都会使得查询变得越来越慢,耗时越来越长,直到Mysql不能查询出来成果而超时。为了处理查询慢的问题,咱们独自创立了一个报表,每个报表都在数据库中都对应着一张独自的表,当订单创立或许付出完结时会发送一个mq音讯,mq体系接收到音讯就将和该订单相关的数据查询出来然后刺进到这个报表中,这样PC端调用接口查询报表数据只需求从这一张单表中去查询就可以了,单表查询是非常快的。发送mq的处理思路可以处理Mysql查询过慢的问题,可是需求在mq体系中首要要写java代码去查询相关数据,然后再刺进单表中,假如报表数据改变了(增加了新的字段)还需求更新这部分逻辑,为了使当报表中有数据改变时不修正代码,咱们运用了etl技能。

1. 双击Data Integration发动程序

2. 点击 主目标树 中的 转化

3. 将 输入:表输入 拖到右边

4. 双击转化中的表输入

  • 输入过程称号
  • 数据库衔接 新建…
  • 输入SQL句子
  • 选中 替换SQL句子中的变量

SELECT
o.id AS order_id,
o.order_code,
o.create_time,
o.user_id,
o.total_amount,
tg.`name` AS goods_name,
toi.price,
toi.quantity
FROM tbl_order_item toi
LEFT JOIN tbl_goods tg ON toi.goods_id = tg.id
LEFT JOIN tbl_order o ON toi.order_id = o.id
WHERE o.create_time >= '${beginTime}' AND o.create_time <= '${endTime}'

5. 设置环境变量

菜单栏: 修改-> 设置环境变量

6. 再拖入一个输入:表输入

SELECT 
tu.id AS uid,
tu.`name` AS user_name,
concat(ta.province, ta.city, ta.area, ta.address) AS address
FROM tbl_user tu
LEFT JOIN tbl_address ta ON tu.id = ta.user_id

7. 拖入一个 记载相关(笛卡尔输出)

将鼠标悬浮到表输入,然后点击向右的箭头,然后在记载相关(笛卡尔输出)上单机一下,将表输入和记载相关衔接起来。同理将表输入(user)也和记载相关(笛卡尔输出)衔接起来。

这儿是模仿Left Join, 假如要是模仿Union Join 则运用 兼并记载。

8. 双击记载相关(笛卡尔输出)

挑选表相关的主表,挑选相关的字段

9. 拖入一个流程:过滤记载

将记载相关(笛卡尔输出)和过滤记载衔接起来,双击过滤记载。

过滤记载不是有必要的,这儿仅仅演示还可以对成果进行过滤挑选。

10. 拖入一个输出:刺进/更新

将过滤记载和 刺进/更新衔接在一同

数据库衔接 新建, 数据库称号为 report

点击获取字段,这儿的字段为联合主键字段,即可以仅有确认一条记载的字段,这儿经过order_id, user_name, goods_name 可以确认一条仅有的记载,假如联合主键存在这样的记载则更新数据,不然刺进数据。这儿查询的字段也极彩娱乐注册官方网站-Spring Boot 运用 ETL kettle可所以一切字段

点击获取和更新字段,删去user_id、uid

11. 履行转化

五:作业

运转这个转化只能履行一次,kettle还支撑守时调度作业的方式履行守时使命。

点击作业,将通用: START和通用: 转化 拖拽到右侧窗口,然后将START和转化衔接起来。然后装备一些START的守时履行时刻,装备一下转化的对应的.ktr文件,最终点击点击左上角的三角箭头Run履行即可。

本号首要用于共享企业中常用的技能,愈加侧重于有用,欢迎重视,便于阅读其它更多有用的历史文章。

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP