Oracle Warehouse Builder 自动化ETL处理过程

甲骨文公司有很多功能强大但受关注程度较低的产品,Warehouse Builder(简称OWB)就是其中之一。就像甲骨文旗下其他的几个非关系数据库管理系统产品一样,OWB刚开始的版本用起来都让人感觉很不顺手,例如用户界面不够友好,经常出现错误,不易于安装和使用等等。不过,在最近的几个版本,OWB已经逐渐完善,成为一款高性能多功能的应用软件,让用户能够获得超凡的体验。

  本文将和大家一起探讨如何用OWB构建一个自动化的ETL处理过程。在假设你已经安装了OWB的前提下,下面会图文并茂逐步为大家讲解构建的过程。

  背景知识

  Oracle Warehouse Builder,常简称为OWB,能够将无格式结构的平面文件(flat file)加载到数据库的过程自动化。许多数据库管理员对SQL*Loader工具和shell脚本的混合使用非常熟悉,再加上在各个不同的地方进行一些cron配置就可以完成数据加载的过程。OWB也能够完成这样的任务(而且还有更多的功能),通过提供一个向导驱动兼备大量断点和观查点提示及点击功能的图形用户界面来完成这一过程。通过其“设计中心”和“控制中心”界面,用户可以设计并部署ETL过程(本文重点关注其中的加载过程,也就是将分隔数值的平面文件内容加载到一个表,而且在加载的过程中数据不发生改变)。此外,ETL的部署不局限于你当前正在工作的服务器,OWB让你能够在一台服务器上设计ETL过程,然后将设计的步骤部署到另一台服务器上,如果你想要,还可以部署到更多的服务器上。

  这个操作背后的整个程序是怎样一个概念呢?我们来看看要完成整个操作需要进行的步骤,也许能够帮你理清大概的框架:

  1. 指定源文件,包括文件所在位置及其性质。

  2. 创建一个外部表,作为数据字典的存储器。

  3. 确认数据库中“真实”表,如有需要创建该表。

  4. 在有计划的基础上进行整个过程,或一次性完成整个处理过程。

  OWB对这个过程的处理方法是利用与这些对象相关的元数据(metadata),通过设计映射和进程流(也称为过程流)来绑定他们。事实上,可以将进程流作为一个可视化假象进行创建,也就是说,OWB实际所使用的工作流只是OWB生成的一个进程流模式图,不过这个模式图足以当作工作流来使用。

  把这个过程的每一部分都当作一个对象来考虑:文件、文件的位置、外部表、真实表、将flat文件映射到外部表的过程、最后运行的作业等等。所有的这些都是对象,而这些对象都可以通过层级和依赖性将这些对象绑定起来。每个对象类型都存在一个模块当中。由于这个工具是基于Java语言的,所以面向对象的设计是可行的。一般来说,每个对象都是一个实例或者是通过某种方法实例化的对象。

  过程

  一个典型的ETL过程模式包括在循环的基础上加载一个平面文件(你也可以只执行其中的映射部分)。如果你将该过程分解为涉及项目树不同部分的若干步骤,那么就很容易搞清楚整个任务了。一个项目的开始,首先需要在Oracle下创建一个一个模块。提示大家,要记住几乎每一个类别都涉及到相同的两个步骤:创建模块和导入元数据。而且抽样并不总是基于同一个表。
 下图显示了一个展开的项目树:

  图一

 

  按照我们想要构建ETL过程的步骤,在项目树里涉及到的项目领域是:

  文件(Files)
  外部表(External Tables)
  表(Tables)
  映射(Mappings)
  一旦完成映射的步骤,你就需要下拉到进程流(Process Flows)和调度(Schedules)

  在计划浏览器面板的“文件(Files)”项目下创建一个新模块,指定数据源文件的位置,如下图所示:

  图二

  完成“创建模块”步骤并进入到“导入元数据向导”。这里你如果告诉OWB需要加载的内容是平面文件时,就会启动“平面文件抽样向导”,完成平面文件结构的定义。记住要给日期字段添加日期格式。当指定平面文件并对其抽样后,就可以准备创建关于外部表的元数据了。“平面文件抽样向导”的第一个步骤如下图所示:

  图三

 

  当要确定字段分隔符时,你除了可以从下拉表中选择向导所提供的分隔符之外,还可以手动输入其他的分隔符。一旦完成了外部表定义,你就可以马上部署外部表,并在目标架构中创建该表。

 下一步,我们就要创建表了。如果要从头开始创建表,就打开“数据对象编辑器”进行表的设计。确保列定义和外部表相应的列定义相匹配。最好首先部署外部表,然后在SQL*Plus中通过CTAS从外部表(只是表定义,并非数据)创建表。

  接下来的步骤就是将外部表的内容映射到真实表。创建一个新映射,并如下图所示映射相关列。

  图四

 

  部署该映射,如果部署成功的话,这时候你就可以手动运行(开始)从外部表将数据加载到真实表。通过进入“控制中心”可以核实并查看该过程的运行,如下图所示。

  图五

 

  如果想要将这个进程流自动化进行,就需要创建一个新的“进程模块”。创建进程流模块、程序包和进程流,然后进入到“进程编辑器”。添加映射操作,执行结果如下图所示:

  图六

 

  一旦完成了进程流模式图,我们就可以创建一个新的调度,调度应当是通用的,也就是说不能与任何东西绑定。你必须要回到映射步骤,将映射与调度关联起来。一旦部署了调度,那么就可以将上述的平面文件加载过程自动化了。

  总结

  虽然本文只是对如何将一个加载过程自动化问题的概述,不过其中涵盖了完成这项任务所需要解决的每一个项目内容。对于一次性文件,甚至对于每天都要导入导出的相同文件或文件集,可能使用shell脚本来编辑这个工作流并通过cron作业来调度显得更加容易些。但从另一方面来讲,一旦设置好整个进程,我们就可以将其部署到开发环境、测试环境,甚至生产环境当中。另外,不要被这个工具名称中的“warehouse”所误导,认为这只适用于数据仓库。如果你需要在一个不同类型的数据库中映射、设计和调度ETL加载过程,OWB也可以相当漂亮地完成任务。

你可能感兴趣的:(Orcale)