1. 概述
本文档是ETL任务的入门示例,希望大家通过这个示例理解ETL任务的制作步骤以及设计思路。下文我们以个人周报数据抽取为例,讲述ETL任务的制作步骤。
具体需求如下:
1)【个人周报表IGRZB_B】中去掉“是否合计行”为1的数据,合计行为1代表是合计数据,我们需要保留明细数据,去掉合计行;去掉“参与任务”为空的垃圾数据,个人周报填写必须包含参与的任务。
2)完善个人周报信息,将【员工信息表FACT_YGXX】中的“所属部门”、“工作地点”等维度字段添加到个人周报信息中。
3)“参与任务”由任务编号+员工id组成,员工id位数固定为7位,例如01002.01060020007P000.1400003,01002.01060020007P000为任务编号,1400003为员工id。需要截掉后面的员工id,保留参与任务编号。
4)为不影响源表数据,需要把处理好的数据抽取到一张新数据表中。
附件:
图1个人周报表表结构IGRZB_B
图2 个人周报表部分数据
2. 制作步骤
2.1新建ETL任务
打开设计区的ETL任务列表,点击【新建】,选择任务类型,进入ETL任务设计器。
2.2添加表输入组件
根据需求,我们要对数据库中的表进行ETL,将IGRZB_B作为输入表。
【表输入】组件支持选择任意接入的连接池中的数据库表作为输入表。
将表输入组件拖入到右边编辑区,双击组件进行配置,选择连接池和表。我们选择个人周报表IGRZB_B。
2.3添加过滤组件,实现数据过滤
根据需求,我们需要去掉“是否合计行”为1和“参与任务”为空的脏数据。
【过滤组件】主要完成过滤功能,在输入数据中筛选出需要的结果集合,最后装载到目标中去,类似于数据库的where操作。
拖入过滤组件,鼠标悬浮到前置任务组件中间位置,会出现一个黄色箭头的圆点,并且鼠标会由指针变为手状,鼠标拖动这个圆点向右移动,这时黄色箭头也会跟着向右移动,然后将鼠标落在需要连接的组件中央松开鼠标即可完成两个任务组件的连接。
双击过滤组件,在过滤组件的公式编辑区域可以编辑过滤表达式,完成对输入结果的过滤。可以选择简单过滤或自定义过滤,这两种过滤方式产生的效果是一样的,这里我们选择简单过滤。点击【选择】按钮选择需要过滤的字段“ISHJ_(是否合计)”和“CYRW(参与任务)”,选择操作符、取值,以及条件之间的连接符,配置如下图所示:
如果使用自定义过滤,则如下图所示
2.4添加连接组件,完成两表连接
按照需求,我们需要将【员工信息表FACT_YGXX】中的“所属部门”、“工作地点”等维度字段添加到个人周报,此时需要将【员工信息表FACT_YGXX】也作为输入表,并与【个人周报表IGRZB_B】完成表连接。
【连接组件】用于完成将多个表进行连接,将连接后的结果输出。连接组件的连接方式主要有以下几种:内连接、左连接、右连接、全连接,与数据库里表连接的方式类似,通过确定关联字段和关联条件,最后得到匹配连接后的结果集。连接的输入是两个以上,输出只有一个。
拖入连接组件,过滤组件和【员工信息表FACT_YGXX】的表输入组件作为连接组件的输入,双击连接组件进行配置。根据需求员工信息表是作为补充,所以选择连接方式为左连接,并设置两表连接条件。
注意:如果连接组件的输入表中有相同字段,系统会自动创建连接表达式,如不需要可以自行删减连接条件。
2.5添加表达式组件,对字段进行处理
【表达式组件】可以通过表达式对前置组件中各字段的数据进行转换处理,得到新的结果集数据。
拖入表达式组件,作为连接组件的输出。双击表达式进行配置,在弹出框配置需要处理的字段,点击表达式框的三个点(见下图1),在弹出框中编辑处理逻辑。可以使用产品内置函数,也可以使用数据库内置的函数。
按照需求,我们需要截取掉“参与任务”字段中的员工id,保留参与任务编号,表达式应写为:
LEFT(Join1.CYRW,LENGTH(Join1.CYRW)-8)
其中:
LENGTH(Join1.CYRW)-8,是获取参与任务的数据长度,减去人员编码固定7位数和“.”的1位。
至此,数据处理部分已经全部完成,最后需要将处理好的结果集输出到一张新的数据库表中。
2.6添加表输出组件
以上我们数据就处理好了,现在需要将结果集输出到一张新的数据库表中。拖入【表输出】组件,作为表达式组件的输出,双击表输出组件,选择要输出的数据源和表,并配置“字段映射”。如果目标表在连接池中不存在,可以勾选“不存在则创建”,此选项也可以避免将来输出表被删除后,ETL无法正常执行。然后在目标设置中选择更新方式和批量大小。
表输出的几种更新方式 1)数据附加:将源数据追加到目标目的表中,若某条源数据记录在目标中已经存在,则忽略该条源数据。2)数据覆盖:先将目标表清空(delete),在将源数据插入目标表中。 3)数据更新:更新目标表中已有的数据,源数据在目标表中的不存在的话,将不作处理。 4)更新插入:源数据如果在目标表中不存在,则插入该条数据;源数据如果在目标表中存在,则更新该条数据。 |
至此,ETL任务就设计完成了,得到如下ETL任务。
2.7运行调试
ETL任务设计完成后,点击运行,可以执行ETL任务。这里我们需要注意的是:ETL任务最好不要全部设计完成后点击运行,要在设计过程中逐步对各个组件的运行结果进行检查调试。系统提供逐步调试的功能,在想要预览结果的组件上,单击鼠标右键,选择“运行到”并在弹出窗口点确认,ETL任务就会只执行到选择的组件。例如,选择执行到“过滤组件1”,如下图所示。
表示已经执行过的组件,
表示当前运行到的组件,
表示还未执行的组件。
继续执行剩余全部组件,
停止当前执行。
选择已经执行或当前运行到的组件,单击右键,点击“预览数据”可预览当前处理逻辑的执行结果。可查看当前生成的SQL是否符合需求。
2.8保存ETL任务
最后点击菜单栏中【保存】按钮,在弹出的保存对话框中设置ETL任务的名称和标题即可完成保存,如下图:
请先登录