Kettle 学习笔记1
本地安装
-
安装JDK
-
配置环境变量
系统变量:JAVA_HOME
系统变量:KETTLE_HOME:data-integration
-
配置环境变量
path: %JAVA_HOME% ; %KETTLE_HOME%
核心概念
-
可视化编程
使用图形化的方式定义复杂的ETL程序和工作流
-
转换
- 转换处理抽取、转换、加载各种对数据行的操作
- 转换包含一个或多个步骤 (Step),如读取文件,过滤数据行,数据清洗
- 转换里的步骤通过跳(hop)来连接,hop定义一个单向通道,允许数据从一个步骤向另一个步骤流动
- 在Kettle中,数据的单位是行
-
Step 步骤
- 步骤需要一个名字,这个名字在转换范围内是唯一的
- 每个步骤都会读、写数据(唯一例外的是“生产记录”步骤,该步骤只写数据)
-
Hop 跳
- 跳就是步骤之间带箭头的连线,跳定义了步骤之间的数据通路
- 跳实际上是两个步骤之间的被称之为行集的数据行缓存
-
作业
- 对于Kettle的转换,所有步骤都以并发方式运行,当转换启动后,所有步骤都同时启动,因此想要一个任务沿着指定的顺序执行,那么就要使用作业
输入控件
输入就是用来抽取数据或生产数据,是ETL 操作中的 E
csv文件输入
CSV文件是一种带有固定格式的文本文件
文件编码:GBK
文本文件输入
EXCEL 输入
多文件合并( 多个EXCEL 文件合并)
Get data from XML
XML:可扩展标记语言,XML 被设计用来传输和存储数据
XPath:基于XML 树状结构,提供在数据结构树中寻找节点的能力
<AllRows testDescription="1 - simple functionality test"> - 根节点
<Rows rowID="1">first row chunk of data - 属性
<Row> - 节点
<v1>1.1.1</v1>
<v2>1.1.2</v2>
</Row>
<Row>
<v1>1.2.1</v1>
<v2>1.2.2</v2>
</Row>
</Rows>
<Rows rowID="2">second row chunk of data
<Row>
<v1>2.1.1</v1>
<v2>2.1.2</v2></Row>
<Row>
<v1>2.2.1</v1>
<v2>2.2.2</v2></Row>
</Rows>
<Rows rowID="3">third row chunk of data
<Row><v1>3.1.1</v1><v2>3.1.2</v2></Row>
<Row><v1>3.2.1</v1><v2>3.2.2</v2></Row>
</Rows>
</AllRows>
# 循环读取路径: /AllRows/Rows/Row 这样只能读到v1 和 v2
# 在字段中添加
testDescription ../../@testDescription 属性 Vaule of String
rowID ../@rowID 属性 Vaule of Integer
<?xml version="1.0" encoding="UTF-8"?>
<messages>
<note id ="501">
<to>Geroge</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting</body>
</note>
<note id ="502">
<to>John</to>
<from>Geroge</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>
# 循环读取路径: /messages/note 这样只能读到 to 、from、 heading、 body
# 在字段中添加
id @id 属性 Vaule of String
JSON Input
JSON 核心概念:数组、对象、属性
数组: [ ]
对象: { }
属性: key : value
生成记录
静态数据:静态维度数据是可以提前生成的; 数据仓库中绝大多数的数据都是业务系统生成的动态数据,但其中一部分维度数据不是动态的, 比如:日期维度。
在excel文件中插入1000条记录,id为1,name为Amanda,age为18
输出控件
输出是转换里面的第二个分类,是ETL 操作中的 L (Load)
- Excel 输出
xls:2007年之前
xlsx:2007年之后
-
Microsoft Excel 输出
如果数据量较大勾选:Stream XSLX data
-
文本文件输出
扩展名:txt 和 csv
-
SQL 文件输出
可以导出数据库表的结构和数据
-
表输出
把数据写入到指定的表
-
插入更新
把数据库已经存在的记录与数据流里面的记录进行比对,如果不同就进行更新,如果记录不存在就插入数据
-
删除
自定义常量数据就是生成key-value形式的常量数据
删除就是删除数据库表中指定条件的数据
转换控件
输出是转换里面的第三个分类,是ETL 操作中的T(Transform)
-
Concat fields
多个字段连接起来形成一个新的字段
Target Field Name: 新字段名
Separator:连接符号
-
值映射
值映射就是把字段得一个值映射成其他的值
使用的字段名:需要映射的字段
目标字段名:映射生成的字段
字段值: 映射规则
-
增加常量
在本身的数据流里面添加一列数据,该列的数据都是相同的值
-
增加序列
给数据流添加一个序列字段
只有Oracle 支持使用数据库来生成序列
-
字段选择
从数据流中选择字段、改变名称、修改数据类型
-
计算器
是一个函数集合来创建新的字段,还可以设置字段是否移除(临时字段):A*B、Quarter of date A、Day of week of date A
-
字符串-剪切-操作-替换
剪切字符串:指定输入流字段裁剪的位置剪切出新的字段
字符串替换:指定搜索内容和替换内容,如果输入流的字段匹配上搜索内容就进行替换生成新字段
字符串操作:去除字符串两端的空格喝大小写切换,并生成新的字段
-
去除重复记录 + 排序记录
必须先对数据流进行排序才能去除重复记录 [去除数据流里面相同的数据行]
-
唯一行 (哈希值)
唯一行(哈希值)就是删除数据流重复的行,与(排序+去除重复记录)效果一样的,但实现的原理不同。
唯一行(哈希值)执行的效率会高一些
-
拆分字段
拆分字段是把字段按照分隔符拆分成两个或多个字段。
拆分字段后,原字段就不存在于数据流中
-
列拆分为多行
指定分隔符的字段进行拆分为多行
-
列转行
列转行之前数据流必须进行排序
如果数据一列有相同的值,按照指定的字段,把多行数据转换为一行数据,去除一些原来的列名,把一列数据变为字段
-
行转列
行转列就是把数据字段名转换为一列,把数据行转换成数据列
-
行扁平化
数据流必须进行排序,只有数据流的同类数据数据行记录一致的情况才可以使用