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连接
  • 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
  • 运行
  • 扩展:多个转换任务,按照时间以及顺序运行