Kettle
1. 数据仓库与ETL
1.1 数据仓库
- 本质:专门针对于数据存储模型
- 实现:Mysql、Oracle、Hive
- 应用:专门用于实现将各种各样的数据进行统一化规范化的数据存储,为所有数据应用提供数据
- 数据分析
- 数据挖掘
- 用户画像
- 推荐系统
- 风控系统…
- 特点:
- 本身也不产生数据
- 本身也不使用数据
- 用于实现复杂数据的存储
- 与数据库的区别:
- 数据库:一般用于支撑业务数据的存储
- 网站后台:用户数据、商品数据、订单数据
- 数据仓库:专门为数据处理提供数据的
- 业务数据
- 用户行为
- 爬虫数据
- 第三方数据
- 日志数据…
- 数据库:一般用于支撑业务数据的存储
- 问题:
- 数据种类非常的多,每一种数据的内容或者格式都不一样
- 有结构化的,有非结构化的
- 有合法的,有非法的
- 有需要的,有不需要的
- mysql是一个专门用于存储结构化数据的数据存储工具
- 结构化
- 合法
- 需要的
- 如何将各种各样的数据存储在mysql中?
- 数据种类非常的多,每一种数据的内容或者格式都不一样
- 解决:
- 数据产生以后,不能直接放入数据仓库【mysql】中存储
- 对原始数据进行一步预处理,将需要的,合法的数据放入数据仓库中
- 这一步预处理:ETL【数据清洗】
1.2 ETL
- 功能:实现数据的预处理,数据清洗过程,将 原始数据 经过ETL处理变成 想要的数据,进行下一步的应用
- 实现:
- 抽取:读取需要处理的数据
- 转换:将原始数据转换为目标数据
- 过滤:将不需要的数据过滤掉
- 原始数据中有100列,实际需要30列 —> 过滤掉70列
- 补全:将需要用到的数据补全
- 每一个访问网站或者APP时,会有一个IP地址 —> 后台通过IP能获取到我们当前所在的国家、省份、城市
- 转换:原始数据的格式不是我们想要的格式,转换为想要的格式
- 原始数据:22/Aug/2021:15:20:35 ----> 目标格式:2021-08-22 15:20:35
- 过滤:将不需要的数据过滤掉
- 加载:将处理好的目标数据放入数据仓库中
1.3 Kettle
- 功能:实现可视化ETL
- 可视化:不用写复杂的代码程序,可以通过图形化的界面来实现数据的处理
- 特点:
- 学习以及使用的成本比较低
- 功能非常强大
2. Windows版本部署
2.1 JDK安装
2.2 Kettle安装
3. Kettle使用
3.1 转换
- 功能:实现一个转换的程序
- 输入:要读取什么数据进行转换
- 转换:对数据怎么进行处理
- 输出:要将处理好的数据保存到什么地方
3.2 作业
- 功能:将多个转换根据需要构建任务流
- 任务流:很多个任务【每一个转换程序】根据自动运行的条件来运行就是任务流
- 实际工作中,一次要执行很多个转换任务,如何实现这些任务的自动化执行
- 自动运行:
- 第一种:定时运行
- 每天的00:01分开始自动运行
- 第二种:依赖关系
- A先运行,A运行成功,B就自动运行
- 第一种:定时运行
- 举例:
- 转换1:实现对数据的过滤
- 转换2:实现对数据的补全
- 转换3:实现对数据的转换
- 作业:一个任务流
- 转换1:每天00:10分自动运行
- 转换2:转换1运行成功,转换2就开始运行
- 转换3:转换2运行成功,转换3就开始运行
4. 实战案例一
4.1 需求
-
将txt文件中的数据写入Excel表格中
id,name,age,gender,province,city,region,phone,birthday,hobby,register_date 392456197008193000,张三,20,0,北京市,昌平区,回龙观,18589407692,1970-8-19,美食;篮球;足球,2018-8-6 9:44 267456198006210000,李四,25,1,河南省,郑州市,郑东新区,18681109672,1980-6-21,音乐;阅读;旅游,2017-4-7 9:14 892456199007203000,王五,24,1,湖北省,武汉市,汉阳区,18798009102,1990-7-20,写代码;读代码;算法,2016-6-8 7:34 492456198712198000,赵六,26,2,陕西省,西安市,莲湖区,18189189195,1987-12-19,购物;旅游,2016-1-9 19:15 392456197008193000,张三,20,0,北京市,昌平区,回龙观,18589407692,1970-8-19,美食;篮球;足球,2018-8-6 9:44 392456197008193000,张三,20,0,北京市,昌平区,回龙观,18589407692,1970-8-19,美食;篮球;足球,2018-8-6 9:44
4.2 分析
- 任务:一个转换程序
- 抽取:读取txt文件中的内容
- 转换:不需要
- 加载:将内容加载到一个Excel文件中
4.3 实现
- step1:构建转换流程图
- 新建一个转换的任务
- 将输入【文本文件输入】和输出【Excel输出】拖入流程图的面板中
- 选中文本文件输入,按住shift+鼠标 左键,拖拽到Excel输出的图标上
- step2:配置输入
- 关联文件
- 文件
- 配置文件的格式
- 内容
- 选择输出到下一步的数据
- 字段
- 关联文件
- step3:配置输出
- 输出目标文件
- 文件
- 预览输出的信息
- 字段
- 输出目标文件
- step4:测试运行
5. 实战案例二
5.1 需求
- 读取Excel文件中的数据,存储到MySQL中
5.2 分析
- 任务:一个转换程序
- 抽取:读取Excel文件中的内容
- 转换:不需要
- 加载:将内容加载到MySQL的表中
- 数据库:kettle_demo
- 表:t_user
- 让kettle自行创建
- 在kettle中只需要输入表名,点击
SQL
,就会创建该表
5.3 实现
- step1:构建转换流程图
- 新建保存
- 定义输入【Excel输入】
- 定义输出【表输出】
- step2:配置输入
- step3:配置输出
- 将连接MySQL的工具放入到kettle的lib目录下
mysql-connector-java-8.0.13.jar
mysql-connector-java-5.1.46-bin.jar
- 构建MySQL连接
- 将连接MySQL的工具放入到kettle的lib目录下
- step4:测试运行
6. 常用组件
6.1 共享数据库连接
- 新建的数据库连接都只属于某一个转换程序
- 如果你想让所有的转换程序都能使用这个连接,需要开启共享
6.2 表输入组件
- 需求:将t_user中的数据,同步到t_user1这张表中
- 分析:
- 这是一个转换任务
- 输入:读取t_user表中的数据
- 转换:不需要
- 输出:将结果写入t_user1表中
6.3 插入更新组件
- 工作需求:将A表的数据同步到B表中,保证B表的数据与A表的数据一致,实现的是不断更新的操作
- A表发生了更新,更新的数据也会同步到B表中
- A表没有发生更新,即使程序运行,B表也不发生改变
- 数据同步的过程:
- 每次只同步更新的数据
- 已经同步过的数据,就不会再进行同步
- 工作中一般一天会同步一次,程序就每天执行一次
- 解决:插入更新的输出组件
- 功能:只会同步发生更新的数据,已经同步过的数据不会再次同步
- 实现:将t_user表的数据同步到t_user2表中
7. Kettle Job
7.1 Job的功能
- 转换:实现一种数据的转换处理,是一个转换任务
- 作业:实现多个转换任务按照一定的规则运行,就是一个任务流
- 时间规则:从00:10分开始,每5秒钟运行一次
- 依赖规则:A成功了,就执行B
- 功能:将多个转换根据彼此之间的 关系实现任务流运行
7.2 Job的开发
- 需求:每5s就运行一个Kettle的转换任务
- 实现:
- 构建一个作业
- 配置转换任务
- 双击转换
- 配置作业运行的规则
- 双击start
- 运行
- 扩展:多个转换任务,按照时间以及顺序运行