横表与竖表
上面两张图是同样数据的两种存储方法,1为横表,2为竖表
容易看出,竖表中的 subject 字段非常重要,这一列的数据去重后为 chinese, math, english ,即横表中的三个字段名,在kettle的行列互转中,这个 subject 字段被称为 Key字段(关键字段)
行转列
将横表转为竖表即为kettle的行转列,其核心为横表的chinese, math, english字段转为了竖表的subject的值,将横表chinese, math, english的数据转为了竖表的grade的值
整体转换
- 两个对象
表输入
- 读取student表,下方视图中可看到当前的数据
- 行转列操作无需排序
行转列
- Key字段(起个名即可):即Key字段(关键字段)subject,行转列操作后,chinese, math, english三个字段会变成一个新的字段的值,Key字段就是为这个新字段起个名称
- 字段名称:填写横表需要行转列的字段,在这写的字段会从原来的字段名转变为一列数据,这列数据的列名为上面设置的Key字段名。
- Key值(不重要,一般与字段名称一致即可):转为列之后更改字段名称
- Value字段(不重要,起个名即可):行转列的那些字段之前是有很多数据的,给这些数据起个名字,名字都一致即可,多了也没用
- 另外,kettle的行转列对象有个bug,在对象窗口的左上角写的可能是列转行,无视就好
列转行
将竖表转为横表即为kettle的列转行,其核心为竖表的Key字段(关键字段)的数据聚合后成为横表的字段名,即subject的chinese, math, english,本例中聚合字段为subject, studentID
表输入
- 读取student表
- 所有聚合字段必须先排序
列转行
- 关键字段:即关键字段subject,列转行的核心字段,此字段会进行聚合操作,聚合结果作为之后横表的新字段名
- 分组字段:关键字段的数据(chinese, math, english)有重复,它的重复是有规律的,即每增加一个学生(studentID),其数据一般就会重复一次,其中决定它重复的字段studentID就是分组字段。此项可以为空,如果为空,那么转换前有多少行数据,转换后就有多少个字段(差不多)。
- 目标字段:关键字段的数据去重后(chinese, math, english)变成字段名,给这些字段名起个别名,一般与关键字值一致即可
- 数据字段:在竖表中,有一个与关键字段一一对应的数据字段,它的字段名填在这,本例中为grade
- 关键字值:关键字段的数据去重后(chinese, math, english)即为关键字值
- 聚合:列转行核心是对关键字段的聚合操作,除关键字段与分组字段之外,其他字段的聚合方式在这里选择,比如本例选择的最大值,id和name就会在聚合后取最大的一个值