循环加载
笔记(二)中,构造并加载了dim_time和dim_date维度表。由于加载这些表只需要一次操作,因此不能算是真正的ETL过程。
下面,将记录如何抽取从最后一次加载后的变化数据,并对数据进行转换、然后加载到租凭星型模式的维度表和事实表。
- 作业Load_rentals
1. [ Start]
作业load_rentals的第一个作业项是START节点。每个有效的作业都只能有一个START节点,用来表明作业开始运行的位置。
2. [ 不同的转换作业项]
START作业项连接到后面的转换作业项。位于START作业项和第一个转换作业之间的连接线上有一个锁标记,这个符号表明这是一个无条件的连接,即使之前的作业项没有执行成功,也会执行下一个作业项。
START后面的各个转换作业项用来运行不同的转换,完成特定的功能。例如:load_dim_staff作业项加载dim_staff表,紧随其后的laod_dim_customer作业项加载dim_customer表,等等。
3. [ 转换作业项的配置对话框]
如下图:
在“作业项名称”文本框中设置作业项名称。这个名称就是作业中的转换项标题。在“转换文件名”文本框的文件名为: ${Internal.Job.Filename.Directory}/load_dim_actor.ktr
前半部分 ${Internal.Job.Filename.Directory} 是Kettle的内置变量,表示当前作业的路径。后半部分 /load_dim_actor.ktr 是转换文件的名称。
注意:变量非常重要,它可以使转换和作业中类似文件或服务器这样的资源更加独立。如上图,它替代了在作业项中对文件路径的硬编码,对当前的作业来说 ${Internal.Job.Filename.Directory} 这个内置变量的路径是一个特定的相对路径。
如果需要浏览当前转换文件的作业项,可以右键单击作业项从菜单中选择“Open transformation”选项,去了解作业项的其他信息。
4. [不同类型的作业项连接和流程异常]
在load_rentals作业中,每个转换作业项后面都有一个执行成功的作业项连接:执行成功的作业项连接是绿色的并且指向下一个作业项,每个转换作业项还有一个执行失败的作业项连接,执行失败的作业项是红色的(带一个停止图标)并且指向一个发送邮件作业项。
当运行这个作业时,作业项将按顺序执行:首先,启动load_dim_staff作业项并执行相关的转换,如果执行成功,作业将会在连接线上显示成功标志,然后继续执行作业项load_dim_cutomer,然后一次执行其他作业项,依次类推,知道最后一个转换被成功执行,最后执行发送邮件作业项Mail Success,作业执行成功。
当某个作业项执行失败,此时,作业将会显示是那个哪个作业项执行失败,然后继续执行Mail Failure作业项,最后整个作业停止执行。
5. [ 顺序执行]
注意作业里面的作业项是顺序执行的,这和转换不同:在转换中,所有的步骤同时启动运行。数据流从输入步骤顺序流入,然后从输出步骤流出。
作业项的顺序执行对于同步的工作来说很有必要,例如,在某个作业中,最先执行的START作业项后面有一系列用来加载维度表的作业项(从load_dim_staff到load_dim_file),最后才是加载事实表fact_rental的转换作业项(load_fact_rental)。这样可以确保在事实表加载之前维度表中新的维度行以及加载完毕,这样事实表才可以和维度关联。
6. [ 邮件作业项]
前面讨论不同类型的作业项连接时曾提到过发送邮件作业项。它可以及时给系统管理员报告作业的运行状态:可能是所有的作业项都运行成功,然后发送一个成功的信息,也可能是某个作业项运行失败,作业提前结束并发送一个失败的通知(仅当作业失败才发送通知不是一个很好的办法,没有收到邮件并不代表作业成功,也可能是发送作业运行失败的邮件服务器发送故障)。
在使用邮件作业项时,需要配置邮件服务器,双击作业项,然后在“服务器”标签页的位置填写合适的邮件服务器地址。如果你不能确定如何填写,可以暂时不用设置发送邮件作业项,这个加载星型模型的作业也可以不用配置发送邮件作业项。只是不能收到关于作业执行状态的E-mail通知。
7. [ 运行作业]
运行作业的方式同运行转换完全相同。运行作业项可能需要一点时间,但是应该会在一分钟内结束。不用担心再重新运行一遍作业或者某个单独的转换,如果租凭星型模型已经是最新的,作业就会发现没有要处理的数据。