ETL之metadata (讲了pentato 的kettle 的元数据) - sunnywang - IT博客
-- 商业智能平台研究:ETL之metadata
元数据的定义就是:描述数据的数据,你非要问什么描述元数据,还是元数据本身,UML中也有这种概念,只不过是描述的对象不一样罢了。
让我们解释的更加通俗易懂一些吧,在javaSE中也有metadata的概念,最早的就算是JavaDoc了,在5.0之后,Annotation就是大量的使用metadata了,这是关于源代码的数据,具体来说就是关于Java的类、方法、字段等关联的附加数据。这些数据可以被Java的编译器或者其它工具(比如Java IDE 象eclipse+junit一样)来发现和使用。junit在4.0后也使用了Annotation也算是metadata的一种应用。可见metadata并不是什么高不可攀的技术,我们时刻都在使用。
再来看看metadata在BI系统上的定义吧,元数据(Metadata)是关于数据、操纵数据的进程,以及应用程序的结构、意义的描述信息,其主要目标是提供数据资源的全面指南。元数据是描述数据仓库内数据结构和建立方法的数据,可将其按用途分为两类:技术元数据(Technical Metadata)、业务元数据(Business Metadata)和内联映射元数据(Inter-Mapping Metadata)。
技术元数据是存储关于数据仓库系统技术细节的数据,是用于开发和管理数据仓库的数据,主要包括数据仓库结构的描述(各个主题的定义,星型模式或雪花型模式的描述定义等)、ODS层(操作数据存储ODS .Operation Data Storage)的企业数据模型描述(以描述关系表及其关联关系为形式)、对数据稽核规则的定义、数据集市定义描述与装载描述(包括Cube的维度、层次、度量以及相应事实表、概要表的抽取规则)。另外,安全认证数据也作为元数据的一个重要部分进行管理。
业务元数据从业务角度描述了数据仓库中的数据,它提供了介于使用者和实际系统之间的语义层,使得不懂计算机技术的业务人员也能够理解数据仓库中的数据。业务元数据包括以下信息:使用者的业务术语所表达的数据模型、对象名和属性名;访问数据的原则和数据来源;系统所提供的分析方法及公式、报表信息。
内联映射元数据(Inter-Mapping Metadata)实现技术元数据与业务元数据的层间映射,使得信息系统的概念模型与物理模型相互独立,使企业的概念、业务模型重组,以及物理模型的变化相互透明。
内联映射元数据从技术上为业务需求驱动、企业数据驱动的双驱动建设模型提供了重要保证,使信息系统的建设具有更高的灵活性与适应性。
元数据是跟特定的数据对象有关的,换句话说,talend和kettle的元数据就是不一样的。ETL的元数据就和pentaho report 的元数据不一样,因为他们要描述的东西不一样。这些元数据的存储格式可以有多种,可以储存成XML格式的也可以是放在数据库里面的。事实上这两种最通用的,也是可以互补的两种,没有谁比谁重要之说。
metadata储存在repository的地方,我不知道是不是所有的ETL工具都喜欢这么叫.每个repository都会选用数据库来储存,他们都是按照一定的格式,这些格式最后也是可以变成XML形式的.这是看每个工具的支持程度,kettle 就支持导出到XML格式,其他的工具我就不知道了.
具体解释到kettle来说,metadata就是你定义的每一个动作.kettle的repository里面有如下一些表,我没有列出全部,从表的结构看一下kettle的metadata有哪些
1. R_DATABASE R_DATABASE_ATIRIBUTE R_DATABASE_CONTYPE R_DATABASE_TYPE
2. R_JOB R_JOB_HOP R_JOBENTRY R_JOBENTRY_ATIRIBUTE R_JOBENTRY_TYPE
3. R_LOG R_LOGLEVEL
4. R_STEP R_STEP_DATABASE
5. R_TRANS_ATIRIBUTE R_TRANS_HOP R_TRANS_CONDITION
6. R_USER R_VALUE R_PERMISSION
7. R_CLUSTER R_CLUSTER_SLAVE R_SLAVE
8. R_PARTITION R_PARTITION_SCHEMA
1 . database的链接信息.在R_DATABASE_TYPE 表里面包含了所有支持的数据库链接信息,一共是25种,算是支持非常的多了.
2. 任务设计部分的表,R_JOB_HOP 是指两个数据之间的链接部分, R_JOBENTRY_TYPE 是目前支持的操作种类,一共有27种,包括Transformation , Job , Shell , Mail , SQL ,FTP ,Table exists ,File Exists , JavaScript , Secure FTP , HTTP , Create File , Delete File , Wait for File , Put a file with SFTP , File Compare , BulkLoad into Mysql , Display Msgbox Info , Wait for , Zip file , XSL Transformatio, BulkLoad from Mysql into File , Abort Job , Get mails from POP , Ping a host , Dummy Job Entry .
其中BulkLoad 只跟Mysql有关,我感觉很奇怪,BulkLoad 是数据库批量处理的方式,大型数据库都是支持的,比如oracle就有sqlloader来支持批量处理,其他的大型数据库应该也有吧,而且在transform里面kettle也有oracle的支持,在任务设计的时候就只有mysql的支持,不知道什么原因.
最后一个Dummy Job Entry 就是什么都不做.
3. Log记录,loglevel 一共有6种,Nothing at all , Minimal loggin , Basic loggin , Detailed loggin , Debugging , RowLevel(very detailed).根据你自己的需要来选择log的级别.
4. 每一步操作的表格与你使用的数据库
5. 转换的定义.一共有70种不同的转化,你不会想看到全部列出来的,其中有几种很有用的,比如DimensionLookup , 它的解释就是"在一个数据仓库里更新一个渐变维,或者在这个维里查询信息.
还有基于关键字删除记录,
cuebOutput, 把数据写入一个cube,
从一个excel文件读数据,执行一个sql脚本,调用数据库的储存过程,
OraBulkLoader ,调用oracle 的bulk loader to load data ,(应该是指Oracle的SQLLOADER吧).
ProSAPCONN, 从一个SAP系统取数据.
MergeRows,合并两个数据流, 并根据某个关键字排序. 这两个数据流被比较,以标识相等的、变更的、删除的和新建的记录.
插一句关于merge的概念,从网上copy下来的:
MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。
6. 用户与权限.一开始建立的用户有两种,admin和guest ,权限有5种,Read only access , Administrator , Use transformations , Use Jobs , Use schemas .
7. pentaho官方网站上面有一个新闻是关于在mysql的Kettle集群新记录:
最近Kettle集群基于 Amazon Elastic Computing Cloud做了一次测试,单台服务器输出4000 rows/sec ,数据库为MySQL. 如果你发送数据通过sockets从一个master到5个slave servers, 你将获得 5x4000 row inserts/sec。集群的效果非常好.
我个人也做过测试。数据库是oracle 10.2.0.1,内网连接,从一台机器的oracle到本地机器,没有集群,速度也大概是4000 多一点 ,数据量大概是16万。
8 . 数据库分区是数据库的高级特性之一,oracle的XE版和Enterprise版本的有一个差别就是XE版不支持分区。
kettle还支持metadata搜索,可搜索的选项包括步骤,数据库连接和注释 ,可见metadata对于ETL的重要性就是它能够更好的管理你的数据,而不只是让你的数据呆在数据库里面。kettle对与数据库的元数据管理并不是很好,所谓数据库的元数据就比如数据库中表的名字,每一个column的信息,column的长度,每一个表的constrain,index等,而只有提供这些信息的管理才能够将ETL过程做的更好。下一篇介绍ETL质量控制的时候会看到oracle warehouse builder 对于这些数据管理是多么的强大,目前kettle的能力还不能算是非常的强大的。
pentaho平台本身还有一种metadata , 在官方主页上是这么写的:
pentaho metadata的能力是让管理员定义一个抽象层来显示数据库信息和商业流程,管理员用关系型数据库的表来表现相互之间的关系,为了复杂和含义模糊的数据库表和列而创建商用术语,为特性用户而设定权限参数,指定默认的数据格式,为多种语言部署提供翻译,商业用户可以使用pentaho新的ad hoc query能力查询他们想要的报表,比如订单的数量和按地区排序的客户开销,SQL可以自动取得这些信息。
数据仓库的建模也需要用到metadata, oracle的数据仓库建模就是用的一种叫 Common Warehouse Metamodel 的metadata , CWM提供一个数据仓库的标准让不同的厂商集成和管理他们的数据,CWM建立在开发的标准XMI(XML for Metadata interchange) XML 和 UML2 作为建模语言。CWM 用UML2 定义一组核心类,这些类分作package(或者叫做子模型submodels),每一个提供一个特定的数据仓库的domain , 比如 Relational , OLAP ,Transformation , CWM 提供一个强大的数据模型来实现数据仓库的Extraction , transformation , loading , integration and analysis ,没有一个单独的模型能够满足各种应用程序和开发工具的需求,但是CWM 为这些工具提供特定的扩展,它被设计用来支持关于metadata的快速开发,使用户能够通过扩展来满足他们的需求。