第5章Kettle数据清洗 本章学习目标  了解Kettle数据清洗的概念  掌握Kettle数据清洗的方法  能使用Kettle进行数据清洗 本章先介绍Kettle数据清洗的概念和基本步骤,再介绍Kettle数据清洗的常用方法,最后介绍Kettle数据清洗的实例。 视频讲解 5.1Kettle数据清洗概述 1. Kettle数据清洗介绍 使用Kettle可以完成数据仓库中的数据清洗与数据转换工作,常见的操作有数据值的修改与映射、数据排序、重复数据的清洗、超出范围的数据清洗、日志的写入、JavaScript代码数据清洗、正则表达式数据清洗、数据值的过滤以及随机值的运算等。 在Kettle中进行数据清洗的时候基本上没有单一的清洗步骤,很多时候数据清洗工作需要结合多个步骤来完成。例如,数据清洗可以从数据抽取时就开始执行,并在多个步骤中通过设定清洗内容完成操作。 图51Kettle中的清洗步骤 2. Kettle数据清洗基本步骤 如图51所示,Kettle在“转换”列表中提供了多种数据清洗步骤,在这里对其中使用频率较高的步骤进行简单的介绍。 (1) 计算器: 对一个或多个字段进行计算,该步骤提供了很多预定义的函数用于处理输入字段,并且随着版本的更新还在不断增多。 (2) 字符串替换: 可以理解为对字符串进行查找和替换,该步骤看上去很简单,不过它支持正则表达式,从而可以实现很多复杂的功能。 (3) 字符串操作: 提供了很多常规的字符串操作,如大小写转换、字符填充、移除空白字符等。 (4) 值映射: 使用一个标准的值替换字段中的其他值。 (5) 字段选择: 对字段进行选择、删除、重命名等操作,还可以更改字段的数据类型以及长度等元数据。 (6) 去除重复记录: 主要通过指定字段去除重复记录,但是一般需要结合其他步骤共同实现其功能。 (7) 增加常量: 用于增加x个字段,每个字段的值都是常量(这里的x是一个大于或等于0的自然数)。 (8) 排序记录: 对指定的字段进行排序(升序或降序)。 (9) 拆分字段: 把字段按照分隔符拆成两个或多个字段。 (10) 列拆分为多行: 把包含指定的分隔符的字段拆分为多行。 (11) 将字段值设置为常量: 用常量值代替原值,此时无论原值有多少行,该行的所有值都会被一个值所替换。 (12) 增加序列: 一个序列是在某个起始值和增量的基础之上,经常改变的整数值。可以使用数据库定义好的序列,也可以使用Kettle决定的序列。 (13) 剪切字符串: 对字符串进行剪切。 此外,“应用”列表中的“写日志”步骤、“流程”列表中的“过滤记录”和“识别流的最后一行”步骤、“脚本”列表中的“正则表达式”“公式”和“Java代码”步骤、“查询”列表中的“检查文件是否存在”和“模糊匹配”步骤、“检验”列表中的“数据检验”步骤、“统计”列表中的“分析查询”“分组”和“单变量统计”步骤也可以进行数据清洗,如图52~图57所示。 图52“应用”列表中的数据清洗步骤 图53“流程”列表中的数据清洗步骤 图54“脚本”列表中的数据清洗步骤 图55“查询”列表中的数据清洗步骤 图56“检验”列表中的数据清洗步骤 图57“统计”列表中的数据清洗步骤 5.2Kettle数据清洗实现 5.2.1清洗简单数据 1. Kettle数据清洗介绍 【例51】值映射。 视频讲解 (1) 启动Kettle后,新建转换,在“输入”列表中选择“生成记录”步骤,在“转换”列表中选择“值映射”步骤,拖动到右侧工作区中,其中“值映射”步骤拖动两次,并建立彼此之间的节点连接关系,如图58所示。 图58Kettle值映射工作流程 (2) 双击“生成记录”图标,在“限制”输入框中输入值为1000,并设置字段内容,生成需要的内容,如图59所示。 图59设置生成记录 (3) 单击“预览”按钮,可查看生成记录,如图510所示。 (4) 双击“值映射”图标,在“使用的字段名”下拉列表中选择name,并设置字段值内容,从而生成需要的内容,如图511所示。 (5) 双击“值映射2”图标,在“使用的字段名”下拉列表中选择value,并设置字段值内容,从而生成需要的内容,如图512所示。 图510预览生成记录 图511设置值映射 图512设置值映射2 (6) 保存该转换并运行,在执行结果区域的Metrics选项卡中可查看数据清洗的过程,在Preview data选项卡中查看已经清洗好的数据,如图513和图514所示。 图513查看数据清洗过程 图514查看清洗好的数据 视频讲解 图515Kettle数据排序工作流程 【例52】使用Kettle实现数据排序。 (1) 启动Kettle后,新建转换,在“输入”列表中选择“Excel输入”步骤,在“转换”中选择“排序记录”步骤,拖动到右侧工作区中,并建立彼此之间的节点连接关系,如图515所示。 (2) 双击“Excel输入”图标,导入Excel数据表,如图516所示,数据表内容如图517所示。切换至“字段”选项卡,单击“获取来自头部数据的字段”按钮,如图518所示。 图516导入Excel数据表 (3) 双击“排序记录”图标,对字段中的“成绩”按照降序排序,如图519所示。 (4) 保存该文件,运行转换,在执行结果区域的Preview data选项卡预览生成的数据,如图520所示。 图517Excel数据表内容 图518获取字段 图519对字段排序 图520查看排序结果 视频讲解 【例53】使用Kettle去除重复数据。 (1) 在例52的基础上完成此操作,在“转换”列表中选择“去除重复记录”步骤,拖动到右侧工作区中,并建立彼此之间的节点连接关系,如图521所示。 图521去除重复数据工作流程 (2) 双击“去除重复记录”图标,将“字段名称”设置为“姓名”,如图522所示。 图522设置去除重复记录 (3) 保存该文件,运行转换,在执行结果区域中的Preview data选项卡预览生成的数据,如图523所示。 图523查看去重结果 需要注意的是,在Kettle中使用“去除重复记录”步骤时,首先要对数据进行排序。 5.2.2清洗复杂数据 【例54】使用Kettle清洗超出范围的数据。 (1) 启动Kettle后,新建转换,在“输入”列表中选择“自定义常量数据”步骤,在“检验”列表中选择“数据检验”步骤,在“输出”列表中选择“文本文件输出”步骤,分别拖动到右侧工作区中,其中“文本文件输出”步骤拖动两次,并建立彼此之间的节点连接关系,如图524所示。值得注意的是,在“数据检验”与“文本文件输出2”节点的连接中,需要右击“数据检验”,选择“定义错误处理”,并在“步骤错误处理设置”对话框中设置错误处理步骤,如图525和图526所示。 图524清洗超出范围数据工作流程 图525定义错误处理 图526设置错误处理步骤 (2) 双击“自定义常量数据”图标,在“元数据”和“数据”选项卡中设置内容,如图527和图528所示。 图527设置元数据(1) 图528设置数据(1) (3) 双击“数据检验”图标,单击“增加检验”按钮,将新增的检验命名为sco。选中sco,将“检验描述”设置为sco,选择“要检验的字段名”为score,并将score类型中的取值范围设置为0~100,如图529所示。 图529设置清洗规则 (4) 分别双击“文本文件输出”和“文本文件输出2”图标,设置清洗后将要保存的文件路径和文件名,保留数据为file6,抛弃数据为file7。保存该文件,运行转换,并在最终保存的文本文件中查看清洗结果,如图530所示。 图530查看清洗结果 在Kettle中使用数据检验可以检查数据是否遵循了预定义的业务规则,从而找出不符合业务规则的数据。在第1次编辑“数据检验”步骤时,这个步骤是空的,必须要选择“增加检验”创建一个新检验。除此之外,还可以进行信用卡检验、电子邮箱地址检验以及XML检验。例如,“检验邮件地址”步骤,它不仅可以用于验证字符串是否满足电子邮箱的规则,还可以检验电子邮箱的有效性,有兴趣的读者可以自行尝试。 【例55】使用Kettle过滤记录。 视频讲解 (1) 启动Kettle后,新建转换,在“输入”列表中选择“自定义常量数据”步骤,在“流程”列表中选择“过滤记录”步骤,在“流程”列表中选择“空操作”步骤,分别拖动到右侧工作区中,其中“空操作”步骤拖动两次,分别重命名为“可以开车”和“不可以开车”,并建立彼此之间的节点连接关系,如图531所示。值得注意的是,该流程中需要双击“过滤记录”图标,在“发送true数据给步骤”下拉列表中选择“可以开车”,在“发送false数据给步骤”下拉列表中选择“不可以开车”,如图532所示。 图531过滤记录工作流程 图532设置过滤记录 (2) 双击“自定义常量数据”图标,在“元数据”和“数据”选项卡中分别设置内容,如图533和图534所示。 图533设置元数据(2) 图534设置数据(2) (3) 双击“过滤记录”图标,将条件设置为age<=60,如图535所示。 图535设置过滤记录条件 (4) 保存该文件,运行转换,单击“可以开车”图标,在执行结果区域中的Preview data选项卡查看运行结果; 单击“不可以开车”图标,在执行结果区域中的Preview data选项卡查看运行结果,如图536和图537所示。本例通过过滤记录将年龄大于60岁的人设置为“不可以开车”。 图536查看结果(可以开车) 图537查看结果(不可以开车) 在Kettle中,“过滤记录”步骤通过条件和比较运算符过滤记录,通常有以下两个步骤。 (1) 发送true数据给步骤: 指定条件返回true的数据将发送到此步骤。 (2) 发送false数据给步骤: 指定条件返回false的数据将发送到此步骤。 注意: true和false步骤必须指定。 视频讲解 【例56】使用Kettle生成多个随机数并相加。 (1) 启动Kettle后,新建转换,在“输入”列表中选择“生成随机数”步骤,在“转换”列表中选择“计算器”步骤,分别拖动到右侧工作区中,并建立彼此之间的节点连接关系,如图538所示。 图538生成多个随机数并相加工作流程 (2) 双击“生成随机数”图标,在弹出的对话框中设置字段,如图539所示。 (3) 单击“确定”按钮,右击“生成随机数”图标,在弹出的快捷菜单中选择“开始改变复制的数量”,在文本框中输入10,如图540所示。 图539设置随机数 图540设置复制的数量 (4) 双击“计算器”图标,在弹出的对话框中设置字段内容,如图541所示。 图541设置计算器字段内容 (5) 保存该文件,运行转换,结果如图542所示。 图542保存并运行转换 视频讲解 【例57】使用Kettle对数据进行统计分析。 (1) 启动Kettle后,新建转换,在“输入”列表中选择“Excel输入”步骤,在“统计”列表中选择“单变量统计”步骤,分别拖动到右侧工作区中,并建立彼此之间的节点连接关系,如图543所示。 图543统计分析工作流程 (2) 双击“Excel输入”图标,在“文件”选项卡中添加外部XLS文件,数据表内容见例52,如图544所示; 并在“字段”选项卡中进行相关设置,如图545所示。 图544添加外部数据表 图545设置字段 (3) 单击“单变量统计”图标,设置统计内容,如图546所示。 图546设置统计内容 (4) 保存该文件,运行转换,结果如图547所示。 图547统计分析结果 在本例中,成绩(N)表示数据个数; 成绩(mean)表示平均成绩; 成绩(stdDev)表示成绩的标准差; 成绩(min)表示成绩的最小值; 成绩(max)表示成绩的最大值; 成绩(median)表示成绩的中位数。 视频讲解 图548书写日志工作流程 【例58】使用Kettle书写日志。 (1) 启动Kettle后,新建转换,在“输入”列表中选择“生成记录”步骤,在“应用”列表中选择“写日志”步骤,分别拖动到右侧工作区中,并建立彼此之间的节点连接关系,如图548所示。 (2) 双击“生成记录”图标,在“限制”文本框中输入40,并分别设置“字段”中的名称、类型和值,如图549所示。 图549设置生成记录 (3) 双击“写日志”图标,单击“获取字段”按钮,自动获取字段名称,并在“写日志”文本框中输入自定义内容,如图550所示。 图550写日志(1) (4) 保存该文件,运行转换,在执行结果区域中的“日志”选项卡中查看日志状态,在Preview data选项卡中预览生成的数据,如图551和图552所示。 图551查看日志状态(1) 图552预览生成的数据(1) 日志是针对运行过程的信息反馈,在程序监控和调用中十分有用。此外,在Kettle执行结果中通过查看日志可以更好地进行数据仓库的开发与测试。 【例59】使用Kettle自定义常量并输入日志。 图553自定义常量并输入 日志工作流程 (1) 启动Kettle后,新建转换,在“输入”列表中选择“自定义常量数据”步骤,在“应用”列表中选择“写日志”步骤,分别拖动到右侧工作区中,并建立彼此之间的节点连接关系,如图553所示。 (2) 双击“自定义常量数据”图标,在“元数据”选项卡中设置名称和类型,并将“设为空串?”的值设为否,如图554所示。 图554设置元数据(3) (3) 在“数据”选项卡中输入数据内容,如图555所示。 图555设置数据(3) (4) 双击“写日志”图标,单击“获取字段”按钮,自动获取字段名称,并在“写日志”文本框中输入自定义内容,如图556所示。 图556写日志(2) (5) 保存该文件,运行转换,在执行结果区域的“日志”选项卡中查看日志状态,在Preview data选项卡中预览生成的数据,如图557和图558所示。 图557查看日志状态(2) 图558预览生成的数据(2) 【例510】使用Kettle正则表达式清洗数据。 图559正则表达式清洗数据工作流程 (1) 启动Kettle后,新建转换,在“输入”列表中选择“自定义常量数据”步骤,在“检验”列表中选择“数据检验”步骤,在“输出”列表中选择“文本文件输出”步骤,分别拖动到右侧工作区中,其中“文本文件输出”步骤拖动两次,并建立彼此之间的节点连接关系,如图559所示。值得注意的是,在“数据检验”与“文本文件输出2”节点的连接中,需要在“数据检验”中设置错误处理步骤。 (2) 双击“自定义常量数据”图标,在“元数据”和“数据”选项卡中设置内容,如图560和图561所示。 图560设置元数据(4) 图561设置数据(4) (3) 双击“数据检验”图标,在“检验描述”文本框中输入day,选择“要检验的字段名”为num,并在“合法数据的正则表达式”文本框中填写\d{3,6},该表达式含义为输出长度为3~6位的数据,如图562所示。 图562设置正则表达式 (4) 保存该文件,运行转换,分别单击“文本文件输出”和“文本文件输出2”图标,在执行结果区域的Preview data选项卡中查看运行结果,如图563和图564所示。 图563查看结果(文本文件输出) 图564查看结果(文本文件输出2) 本例使用了正则表达式,正则表达式又称为规则表达式,是对字符串操作的一种逻辑公式。其特点是用事先定义好的一些特定字符以及这些特定字符的组合,组成一个“规则字符串”,这个规则字符串用来表达对字符串的一种过滤逻辑,通常被用来检索、替换那些符合某个模式(规则)的文本。构造正则表达式的方法和创建数学表达式的方法一样,也就是用多种元字符与运算符可以将小的表达式结合在一起,创建更大的表达式。正则表达式的组件可以是单个字符、字符集合、字符范围、字符间的选择或所有这些组件的任意组合。表51给出了常见的正则表达式规则说明。 表51常见的正则表达式规则说明 正则表达式说明正则表达式说明 \d代表一个数字+表示前一个字符至少出现一次 *代表任意的字符—表示一个范围 [][]内的字符只能取其一?表示前一个字符可出现0次或一次 {}指定字符的个数 例如,声明电话号码。该数据类型由***********组成,如02367670011,可使用正则表达式表示为"\d{3}d{8}"。 再比如,声明密码。该数据类型由*********组成,前3位是字母,后6位是数字,如abc123456,可使用正则表达式表示为"[az]{3}[09]{6}"。 正则表达式有以下常见应用: (1) 替换指定内容; (2) 数字替换; (3) 删除指定字符; (4) 删除空行。 视频讲解 图565拆分字段工作流程 【例511】使用Kettle对字段进行拆分。 (1) 启动Kettle后,新建转换,在“输入”列表中选择“自定义常量数据”步骤,在“转换”列表中选择“列拆分为多行”步骤,分别拖动到右侧工作区中,并建立彼此之间的节点连接关系,如图565所示。 (2) 双击“自定义常量数据”图标,在“元数据”和“数据”选项卡中设置内容,如图566和图567所示。 图566设置元数据(5) 图567设置数据(5) (3) 双击“列拆分为多行”图标,在“要拆分的字段”下拉列表中选择“区县”,在“分隔符”文本框中输入[,],勾选“分隔符是一个正则表达”,并将“新字段名”设置为“区”,如图568所示。 图568设置列拆分为多行 (4) 保存该文件,运行转换,在执行结果区域的Preview data选项卡中查看运行结果,这时可以看到数据增加了一个“区”字段,即将最初的区县字段的内容进行了拆分,如图569所示。 图569查看拆分结果 【例512】使用哈希值清洗重复数据。 (1) 启动Kettle后,新建转换,在“输入”列表中选择“自定义常量数据”步骤,在“转换”列表中选择“唯一行(哈希值)”步骤, 图570使用哈希值清洗重复 数据工作流程 分别拖动到右侧工作区中,并建立彼此之间的节点连接关系,如图570所示。 (2) 双击“自定义常量数据”图标,在“元数据”和“数据”选项卡中设置内容,如图571和图572所示。 图571设置元数据(6) 图572设置数据(6) (3) 双击“唯一行(哈希值)”图标,在“字段名称”中选择“姓名”,即对“姓名”字段进行比较,如图573所示。 图573设置用于比较的字段 (4) 保存该文件,运行转换,在执行结果区域的Preview data选项卡中查看运行结果,这时可以看到数据中已经去除了重复数据“张鑫”,如图574所示。 图574查看去重结果 可以看出,使用“唯一行(哈希值)”步骤可以不事先对数据进行排序,它是在内存中对数据进行去重操作。“唯一行(哈希值)”步骤是根据哈希值进行比较的,而“去除重复记录”步骤是根据相邻两行数据是否一致进行比较的。 视频讲解 【例513】使用Kettle对数据进行模糊匹配。 (1) 启动Kettle后,新建转换,在“输入”列表中选择“自定义常量数据”步骤,在“查询”列表中选择“模糊匹配”步骤,在“应用”列表中选择“写日志”步骤,分别拖动到右侧工作区中,其中“自定义常量数据”步骤拖动两次,并重命名为tab_a和tab_b,建立彼此之间的节点连接关系,如图575所示。 图575模糊匹配工作流程 (2) 双击tab_b图标,在“元数据”和“数据”选项卡中分别设置内容,如图576和图577所示。 图576设置tab_b元数据 图577设置tab_b数据 (3) 双击tab_a图标,在“元数据”和“数据”选项卡中分别设置内容,如图578和图579所示。 图578设置tab_a元数据 图579设置tab_a数据 (4) 双击“模糊匹配”图标,在“一般”选项卡和“字段”选项卡中分别设置内容,如图580和图581所示。其中,在“一般”选项卡中将“匹配步骤”设置为tab_b,将“匹配字段”设置为name,将“主要流字段”设置为name,将“算法”设置为Jaro Winkler,将“最小值”设置为0,“最大值”设置为1; 并在“字段”选项卡中将“匹配字段”设置为match,将“值字段”设置为measure value。 图580设置“一般”选项卡 图581设置“字段”选项卡 本例采用Jaro Winkler算法进行字符串之间的模糊匹配,这是计算两个字符串之间相似度的一种算法。算法得分越高,说明相似度越大,如得0分,表示没有任何相似度,1分则代表完全匹配。Jaro Winkler算法得分公式为 d_j=\frac{1}{3}\left(\frac{m}{|s1|}+\frac{m}{|s2|}+\frac{m-t}{m}\right) 其中,s1和s2表示要比对的两个字符; d_j表示最后得分; m表示要匹配的字符数。 此外,还可以根据需要选择其他算法,如Needleman Wunsch(文本比较算法)、Levenshtein(编辑字符串距离算法)、Damerau Levenshtein(最佳字符串匹配算法)、SoundEx(语音算法)等。 (5) 双击“写日志”图标,设置写入的日志字段内容,如图582所示。 图582写日志 (6) 保存该文件,运行转换。单击“写日志”图标,在执行结果区域的Preview data选项卡中查看结果,如图583所示。 图583查看模糊匹配结果 从图583可以看出,字符串“上海(王府井)”和字符串“北京(王府井)”的匹配度为0.8095238095,字符串c与字符串c的匹配度为1.0(表示完全匹配),字符串da与字符串dd的匹配度为0.7。 5.3本章小结 使用Kettle可以完成数据仓库中的数据清洗与数据转换工作,常见的有: 数据值的修改与映射、数据排序、重复数据的清洗、超出范围数据的清洗、日志的写入、JavaScript代码数据清洗、正则表达式数据清洗、数据值的过滤以及随机值的运算等。 在Kettle中进行数据清洗的时候基本上没有单一的清洗步骤,通常数据清洗工作需要结合多个步骤完成。例如,数据清洗可以从数据抽取时就开始执行,并在多个步骤中通过设定清洗内容完成操作。 5.4实训 1. 实训目的 通过本章实训了解数据清洗的特点,能进行简单的与数据清洗有关的操作。 2. 实训内容 1) 使用Kettle查看数据中的空值 (1) 启动Kettle后,新建转换,在“输入”列表中选择“自定义常量数据”步骤,在“检验”列表中选择“数据检验”步骤, 图584查看空值工作流程 在“输出”列表中选择“文本文件输出”步骤,分别拖动到右侧工作区中,其中“文本文件输出”步骤拖动两次,并建立彼此之间的节点连接关系,如图584所示。值得注意的是,在“数据检验”与“文本文件输出2”步骤的节点连接中,需要在“数据检验”步骤中设置错误处理步骤。 (2) 双击“自定义常量数据”图标,在“元数据”和“数据”选项卡中设置内容,如图585和图586所示。 图585设置元数据(7) 图586设置数据(7) (3) 设置完成后,单击“预览”按钮,预览数据,如图587所示。 图587预览数据 (4) 双击“数据检验”图标,在“检验描述”文本框中输入na,选择“要检验的字段名”为name,在“合法数据的正则表达式”文本框中填写null,如图588所示。 (5) 保存该文件,运行转换,分别单击“文本文件输出”和“文本文件输出2”图标,在执行结果区域的Preview data选项卡中查看运行结果,如图589和图590所示。 视频讲解 2) 使用Kettle采样数据并输出结果 (1) 启动Kettle后,新建转换,在“输入”列表中选择“Excel输入”步骤,在“转换”列表中选择“排序记录”步骤,在“统计”列表中选择“数据采样”步骤,在“流程”列表中选择“识别流的最后一行”步骤,分别拖动到右侧工作区中,并建立彼此之间的节点连接关系,如图591所示。 (2) 双击“Excel输入”图标,添加需要的数据表,并获取表中字段。 (3) 双击“排序记录”图标,设置字段名称为“成绩”,如图592所示。 图588设置数据检验 图589查看空值结果(文本文件输出) 图590查看空值结果(文本文件输出2) 图591采样数据并输出工作流程 图592设置排序记录 (4) 双击“数据采样”图标,设置Sample size(样本容量)为5,Random seed(随机种子数)为1,如图593所示。 (5) 双击“识别流的最后一行”图标,设置“结果字段名”为Last,该字段用于获得最后一行的数据,如图594所示。 图593设置采样参数 图594设置识别流的最后一行 (6) 保存该文件,运行转换,依次单击“Excel输入”“排序记录”“数据采样”“识别流的最后一行”图标,在执行结果区域的Preview data选项卡中查看最终的结果,如图595~图598所示。 图595Excel输入结果 图596排序结果 图597采样结果 图598最终输出结果 本例导入的Excel表格内容如图599所示。 图599本例导入的Excel表格内容 3) 使用Kettle实现字符串替换 图5100字符串替换工作流程 (1) 启动Kettle后,新建转换,在“输入”列表中选择“自定义常量数据”步骤,在“转换”列表中选择“字符串替换”步骤,分别拖动到右侧工作区中,并建立彼此之间的节点连接关系,如图5100所示。 (2) 双击“自定义常量数据”图标,在“元数据”和“数据”选项卡中分别设置内容,如图5101和图5102所示。 图5101设置元数据(8) 图5102设置数据(8) (3) 双击“字符串替换”图标,设置如图5103所示。 图5103设置字符串替换内容 在本例中,将输入流字段name改为输出流字段new_name,并使用正则表达式将a~z的字母用数字5进行替换。 (4) 保存该文件,运行转换,单击“字符串替换”图标,在执行结果区域的Preview data选项卡中查看运行结果,如图5104所示。 图5104查看字符串替换结果 从图5104可以看出,本例输入的字符串jj#kljl和jj##kljl分别被替换成了输出字符串55#5555和55##5555。 视频讲解 4) 使用Kettle拆分字段并保存为日志 (1) 启动Kettle后,新建转换,在“输入”列表中选择“自定义常量数据”步骤,在“转换”列表中选择“拆分字段”步骤,在“应用”列表中选择“写日志”步骤,分别拖动到右侧工作区中,并建立彼此之间的节点连接关系,如图5105所示。 图5105拆分字段并写日志工作流程 (2) 双击“自定义常量数据”图标,在“元数据”和“数据”选项卡中分别设置内容,如图5106和图5107所示。 图5106设置元数据(9) 图5107设置数据(9) (3) 双击“拆分字段”图标,在“需要拆分的字段”下拉列表中选择name,在“分隔符”文本框中输入“,”,并设置新的字段,如图5108所示。 图5108设置拆分字段 (4) 双击“写日志”图标,在弹出的对话框中设置字段内容,如图5109所示。 图5109设置写日志 (5) 保存该文件,运行转换,依次单击“自定义常量数据”和“写日志”图标,在执行结果区域的Preview data选项卡中分别查看结果,如图5110和图5111所示。 图5110初始设置 图5111拆分后的结果 从该例可以看出,在Kettle中可以使用“拆分字段”步骤将初始字段(如“a,b,c”)拆分为多个字段(如“a”“b”和“c”)。 习题5 (1) 请阐述Kettle数据清洗的常见步骤。 (2) 在Kettle中什么是值映射? (3) 在Kettle中什么是采样? (4) 在Kettle中什么是计算器?如何使用计算器? (5) 在Kettle中如何对重复数据进行清洗?