双子星座

 

2007年5月22日

商业智能需要站在全局角度考虑问题

首先看一下下面这个表样.这个表样是润乾的一个示例表样,接着介绍birt 是如何做的

5 join dataset

这个表样算是报表中最常见的一种需求了,把不同粒度的数据聚合到同一粒度上.

我们用automobile 表示汽车表, 用houseproperty 表示房产表, 用estate表示土地表,用others 表示其他表.他们都有customerid 来表示客户名称.customers 表有customerid 和customername

1. 用视图来拼数据

   对于  automobile 聚合使用一个autoview , sql 如下

   select sum(automobile price* quantity) autototal, customerid  from automobile group by customerid

  对于 houseproperty 使用如下view

   select sum( house price * quantity ) housetotal, customerid  from houseproperty group by customerid

  对于 土地和其他也是差不多类型的sql

 

  得到了上面这四个视图之后, 就把customers 表根据customerid 和其他四个视图join 起来.

  select customername ,  autototal  , housetotal , estatetotal , othertotal

   from  customers c , automobile a , houseproperty h , estate e , others o

   where 四个视图和customers的连接条件

 

  由于这个表样并不涉及到以 汽车,房产,土地, 其他表中的任何一个客户为主, 所以暂时也不考虑左右连接的问题.

 

2. 使用Birt 的Joined Data Set

   Birt 提供的Joined Data Set 跟数据库里面的视图是差不多的概念,使不过一个是在数据库内部join 数据,一个是使用Java 循环的方式join 数据.

   跟上面创建视图一样,创建四个DataSet , 输出两个字段: customerid 和 total.

   然后创建一个Joint Data Set , 把customers 表和 autototal DataSet 按照customerid join起来.这时得到四个字段 customers.customername , customers.customerid  ,  auto DataSet.customerid ,auto DataSet.autotal . 最后我们把这个Joint DataSet 命名为jdataSet1 (代表的是autoDataSet 和 customers 产生的Joint DataSet ).

  然后继续创建另一个Joint Data Set 把customers 的customerid 和前一步创建的jDataSet1 按照customerid join 起来得到一个第二个Joint DataSet1 ,我们命名为jDataSet2 .

  以此类推,最后我们输出5个字段: customers.name   ,   auto.total ,  house.total  , estate.total , others.total , 实际输出可能在customers.customerid 上重复了4次.

 

上面两种方式报表的做法主要有两点差别:

1. 性能

    如果本身数据库单独执行一个视图的sql 结果比较小,而本身的automobile 表数据量比较大(也就是说一个customer对非常多的automobile 记录) , 那么使用数据库视图就会比较慢. 因为数据库在尝试得到4个视图的结果进行了一些不必要的按照automobiel表的customerid和customers的customerid进 行的比较操作( 如果有索引肯定是对索引进行了多次不必要的读) ,这时候使用Java的这种循环方式会比较快一点 . 如果本身结构集比较大,那么还是用数据库本身的排序和join 比较快, 这个道理比较类似于数据库中如果结构集大于5% 就不要走索引,直接进行全表扫描.只不过这是一个java 版的.

2. 左右连接的问题

   如果这个表的数据不是以customers里面的数据为主,而是以四个视图其中的一个为主.这时候要情况可能会比较复杂一些.由于我不太清楚birt 里面joint data set 计算的方式是怎样的,所以也不太好评论.不过如果不使用joint data set , 就是使用一般的编程的方式.那么按照下面这个思路会比较好:

a , b , c , d ,e  为customers , automobiles view  (后面简写avlist 表示这个集), housetotal view , 里面的指针.  四个view 都已经排好了序.group by 是默认排序的. outlist 表示最后需要的输出 , row表示最后输出的一条数据

for ( 按照主数据循环)  {

    row.customerid = customers.customerid;

    if( customers.customerid == avlist[b].customerid) {

           outlist[x].autotaol = avlist[b].autotal ;

           b++

     }

    四个view 同一个判断方式, 但是每个view 的指针指的是不一样的.

    最后:   outlistSet . add (outlist[x])

}

 

如果数据源本身的数据量也很大,需要输出的数据也很多,则上面两种方式都会有性能问题,这时可以考虑商业智能里面的万金油方式: ETL

 

3. ETL

    从上面这个表样看来,可能会有两个隐含条件.一个是聚合的数据粒度在时间上是月,另一个在销售地点粒度上是:支行086001-301 , 所以用ETL一开始就聚合数据可能会更好的解决性能问题.另外一个是如果用户想要排序和过滤数据的话用一个单独的ETL聚合表也比拼数据的方式好的多.

 

这篇文章的目的并不只是想解释一个做表的问题,而是说明商业智能的一些问题不光需要站在一个独立的角度思考,有些问题本身可能随着环境的一些变化而 采取对应的措施,比如上面为了解决排序,过滤,左右连接,性能问题都需要从不同的角度来考虑问题.有时候可能一个做表的问题不光只是要限定在sql 或某个报表软件的本身,有时候某个ETL问题可能不关只是ETL就能解决的,随着情况的复杂可能需要从整个商业智能的全局来进行考虑,商业智能越来越倾向 与多个解决方法的融合.

本文原文在 http://www.gemini5201314.net

如果你对ETL中性能优化问题有兴趣的话,也可以查看另一篇关于在ETL中性能优化要站在全局的角度,而不是只在数据库角度的文章.

posted @ 2008-03-21 12:16 gemini 阅读(377) | 评论 (0)编辑 收藏

重新学习Birt 中......

重新学习Birt 中......
又重新回到birt的学习中,以前用的时候本身功能也不算太好,再加上自己是个比较浮躁的人,什么都想了解一点,所以学的 也不是很好,最近计划又重新系统的学习一下Birt ,网上搜了一下,除了eclipse 官方的资料外,几乎没有什么有用的资料,要么就是太旧了,要么根本就是没有用,你抄我的,我抄他的,最后大家都抄成了一样的了,
算了,还是自己动手,丰衣足食吧,决定还是好文章自己写, 先写下自己的计划吧 , 把roadmap 放出来,也算给自己一种鞭策吧.

第一篇 : 把birt  用 ecilpse 跑出来.最简单的Java 程序. (eclipse 官方的例子)
         把birt 放到 tomcat 跑起来.                   (eclipse 官方的例子)

第二篇 : 利用eclipse 的可视化报表设计器设计模板,主要介绍,参数,sorting ,  grouping  ,  mapping  ,  filtering , hightlighting ,
         (eclipse 官方flash演示的文字版)

第三篇 : 利用birt  的desing api 和 report api 来做java 编程,主要还是集成到servlet  环境.

第四篇 : 把 birt 和pentaho 集成起来 .  (其实pentaho 官方有一份这个文档,不过我的例子稍微会介绍的更加实用一点)

大约时间是一个月吧,如果超期了,我就请大家吃饭,呵呵,只要你能够找的到我 ,
要真到了那个时候, 我只能说:
地球是很危险的,我还是回火星去吧.

有很多朋友都说birt 让他们很失望,其实birt 有一点性能问题外,基本还算可以,如果你非要说有这些,那些不爽,我只能说一句话:
还记得大话西游里面,周星驰率领一群土匪围攻白晶晶她们, 她们在周星驰重要部位点了两次火,然后吴孟达说:都焦了,割了算了吧.
记得周星驰说什么吗?
不记得就再去重温一遍经典吧?



posted @ 2007-06-19 23:07 gemini 阅读(441) | 评论 (0)编辑 收藏

eclipse enropa 即将发布 birt 的新功能一览

                        eclipse enropa 即将发布 birt 的新功能一览
最新的eclipse enropa 即将在6月29号发布了.官方说会有21个项目同时发布.其中我只关心三个项目.一个是WTP , 一个是TPTP 最后一个是BIRT .
我看了一下BIRT 所增加的新功能,从2.2M4 开始
http://www.eclipse.org/birt/phoenix/project/notable2.2M4.php
http://www.eclipse.org/birt/phoenix/project/notable2.2M5.php
http://www.eclipse.org/birt/phoenix/project/notable2.2M6.php
http://www.eclipse.org/birt/phoenix/project/notable2.2RC0.php


2.2 M4
1 . 和WTP集成的BIRT Tag .
2 . Word Emitter                 支持WORD 的 emitter . (emitter 翻译是发射,我想应该是可以预览和打印的输出格式吧)
3 . XML Source Editor            支持xml 格式的编辑器
4 . Property Editor Changes
5 . Highlight Style              对于特定条件的Item 进行高亮显示.

2.2 M5
1 . BIRT Chart Improvements             
2 . Viewer Improvements
3 . Emitters                   增强了PDF 的emitters
4 . Advanced Properties        现在可以显示所有的属性了.

2.2 M6
1 . BIRT Chart Improvements    新增加了一种chart tag library 和chart view servlet
2 . XLS Emitter Prototype      新增加了一种XLS 输出的格式
3 . Linking Cascading Style Sheets      情理之中的事情
4 . BIRT Viewer Changes        
5 . Report Examples View        新提供了一些example,提供给初学者和想了解birt新功能的爱好者.
6 . Dynamic Connection Profiles 动态的数据源链接
7 . Report Parameter Changes    增加了一种组合框的parameter view.类似与选省份和城市的那种双选框.

2.2 RC0
1 . Web Service ODA             新增加的Web Service 的数据源.可以支持像ebay , amazon的那种Web Service 的数据了.
2 . Charting Improvements       新增加使用script 来处理chart的事件.好像是用的javascript.
3 . PPT Emitter                 新增加对Power Point  的emitter.
4 . Dynamic Crosstab Support    
    这是最让我激动的功能.完全就是OLAP的功能的一部分.Palo的demo中,是通过一个Excel 的Plug-in,是excel 支持olap的,不过它不能跨平台,甚至连excel 都跨不出去,
    而birt提供的这个功能更加的强大.而且很容易就能够实现,定制化也比较强(就是说它提供API ,让你自己编程实现这些功能).
    
一下子看到BIRT太多的功能了,希望能够正式发布的时候birt能够比较稳定吧.


没有找到WTP2.0 和 TPTP 4.3 的新功能列表.
其中我只关心在TPTP 4.2.2 Callisto 中的TPTP经常性的Block 的Issue 解决了没有.
同样希望TPTP也能够稳定吧。功能倒是其次. java 中profiler 工具倒是不少,可是大多好的都是商业的,难得有一个这么好的开源的版本,要是bug问题不解决就不好了.

听说eclipse 的SOA 建模工具第一次发布.我倒是不关心,目前还是把精力focus birt上了,觉得eclipse 本身可能已经没有太多新功能发展了,主要就是把plugin 做好,
然后想办法能够解决plugin 之间版本的兼容性问题就够了. 最近也试用了一下NetBean ,没有深入用,还是有点失望的,希望NetBean 的坚定拥护者不要扁我. 字体丑,界面丑
也就算了,但是跑出来吓人就是你的不对了嘛! 丑也就算了,速度也稍微慢一点(我说的是稍微).本来想看一下它的Porfiler 功能怎么样的,后来还是算了,毕竟自己没打算
用.就算是自己没有深入用过,不懂吧,乱说了话,希望不要引起Netbean 支持者的海扁.

最近在collab下载svn 的时候无意中看到了它的svn enterprise 版的.其中有一个是支持eclipse 的 Mylyn 插件的(21个项目其中一个),做项目管理的.不知道eclipse 搞
Mylyn 是不是有打算进入项目管理领域 . 它居然还是2.0版.不知道有哪位用过.

最近使用firefox的时候 ,有时候打开一个网页莫名其妙的就firefox 挂掉了,也不是真的挂了,就是有时候等个2分钟它又好了,有时候firefox整个不见了,但是进程里面
它还在,你点开一个新的firefox  然后两个人就手拉手的都跑出来了. 不知道是不是大家也有遇到过相同情况的. 装了Opera , firefox 挂掉的时候就用Opera , 里面有一个
打电话的功能我觉得倒是非常的有意思,创意呀! 不希望firefox 独大 , 也不希望eclipse 独大 ,更不希望Microsoft 独大 , 同样不希望 Intel 独大(AMD hold on) .
有竞争才能推动发展嘛.

最近在msn 上认识了许多朋友. 有一位跟我聊起了JBoss , 我对JBoss 的认识还停留在JBoss 服务器上.后来听他说才知道JBoss 已经发展了一套完整的J2EE 框架了,包括很多
方面,才恍然大悟 原来现在中间件这么重要. Red Hat 跟exadel 结盟要推新的SOA 工具,好像SOA是很火的,不过还是认为如果公司不是做SOA 的,学SOA 没有什么用.
SOA 要在中国成熟还要很多年的.那时候都不知道是个什么样子了.不过将来一个公司面对使用多种操作系统,多种数据库,多种软件平台,多种编程语言,总会需要一个框架
来解决这些问题的,就算SOA 成功了也好,SOA 失败了也好,需求总是会有的.还是等SOA 成熟了再观望一下吧, 广告看看还可以,要真掏钱出来还是要谨慎的。
纯属个人认识,说的不对还请高手指点.

写的比较杂,就当是看八卦吧.

最近学习Birt ,主要是它的新功能.然后还是准备学会如何在pentaho里面集成 birt 吧.希望能够和birt 爱好者,尤其是高手一起交流.

 

posted @ 2007-06-17 16:33 gemini 阅读(454) | 评论 (0)编辑 收藏

商业智能研究(十七) Mondrian 如何使用 materialized view

     摘要:   阅读全文

posted @ 2007-06-10 19:02 gemini 阅读(535) | 评论 (0)编辑 收藏

商业智能研究(十六)materialized view+dimension提高mondrian性能(二)

     摘要:   阅读全文

posted @ 2007-06-10 18:58 gemini 阅读(464) | 评论 (0)编辑 收藏

商业智能研究(十五) materialized view+dimension提高mondrian性能

     摘要:   阅读全文

posted @ 2007-06-10 18:57 gemini 阅读(506) | 评论 (0)编辑 收藏

商业智能研究(十四) mondrian + oracle 部署foodmart demo

     摘要:   阅读全文

posted @ 2007-06-10 18:56 gemini 阅读(1162) | 评论 (0)编辑 收藏

商业智能研究 (十三) oracle warehouse 一些基本概念

     摘要:   阅读全文

posted @ 2007-06-09 21:54 gemini 阅读(600) | 评论 (0)编辑 收藏

在tomcat上部署pentaho 1.5.3

最近一直在做mondrian的foodmart的实验,有位朋友的公司要部署一个pentaho的demo来做演示,我跟他说直接运行demo就可以 了,但是他们公司非要自己从头配一个,所以我就自己做了一下实验基于最新的1.5.3的,其实步骤都差不多,其他版本也应该可以,希望能给喜欢 pentaho的朋友一点帮助。

1 . 首先需要下载pentaho-j2ee-deployment- , pentaho-data- 和 pentaho-solution- 三个包,分别解压到三个不同的地方
2 . 从命令行进入pentaho-j2ee-deployment 目录,运行ant -p 会列出所有的ant 任务,执行war-pentaho-tomcat-hypersonic任务,成功之后会生成4个war包,pentaho-portal- layout.war , pentaho-style.war 和 sw-style.war ,(sw-style.war 是steel-wheel-style ,是可选项,可能是pentaho的一个例子或者是pentaho的一种style风格),还有多出一个tomcat目录下的hsqldb目录下有一个 pentaho.war ,如果你执行的是war-pentaho-mysql就是在tomcat目录下有个mysql5目录,里面一样是pentaho.war.我选用的是 hsqldb .
3 . 在你的tomcat的安装目录下找到conf / server.xml 文件,在其中的host 元素下加上如下这一段,这一段是从pentaho的文档里面抄来的,manual-deployment-pentaho- ,其中它列出来的有些多余,这个文档应该使用confluence 用pdf 方式导出的,抄的时候注意检查一下xml 元素排版上的问题.它列出的resource 元素太多了,你查看pentaho-data- 包里面,应该只有四个数据库hibernate,sampledata,shark,quartz ,把不用的resource元素都删掉,(应该是最上面的四个).如果你的tomcat启动不了了,检查一下你添加的部分是不是有错。


 1 
 2 <Context path="/pentaho" docbase="webapps/pentaho/">
 3     <Resource name="jdbc/SampleData" auth="Container"
 4         type="javax.sql.DataSource" maxActive="20" maxIdle="5" maxWait="10000"
 5         username="pentaho_user" password="password"
 6         factory="org.apache.commons.dbcp.BasicDataSourceFactory"
 7         driverClassName="org.hsqldb.jdbcDriver"
 8         url="jdbc:hsqldb:hsql://localhost/sampledata" />
 9     <Resource name="jdbc/Hibernate" auth="Container"
10         type="javax.sql.DataSource"
11         factory="org.apache.commons.dbcp.BasicDataSourceFactory"
12         maxActive="20" maxIdle="5" maxWait="10000" username="hibuser"
13         password="password" driverClassName="org.hsqldb.jdbcDriver"
14         url="jdbc:hsqldb:hsql://localhost/hibernate" />
15     <Resource name="jdbc/Quartz" auth="Container"
16         type="javax.sql.DataSource"
17         factory="org.apache.commons.dbcp.BasicDataSourceFactory"
18         maxActive="20" maxIdle="5" maxWait="10000" username="pentaho_user"
19         password="password" driverClassName="org.hsqldb.jdbcDriver"
20         url="jdbc:hsqldb:hsql://localhost/quartz" />
21     <Resource name="jdbc/Shark" auth="Container"
22         type="javax.sql.DataSource"
23         factory="org.apache.commons.dbcp.BasicDataSourceFactory"
24         maxActive="20" maxIdle="5" maxWait="10000" username="sa" password=""
25         driverClassName="org.hsqldb.jdbcDriver"
26         url="jdbc:hsqldb:hsql://localhost/shark" />
27 </Context>
28 



4 . 把pentaho.war copy到tomcat 的webapps目录下,它会自动解压的,然后关闭tomcat , 找到pentaho/WEB-INF/web.xml 文件,找到solution-path元素,指向你解压后的pentaho-solution- 目录,注意java里面是用正斜杠 / ,如果你从windows的地址栏copy的话注意把反斜杠改一下.
5 . 修改pentaho/WEB-INF/classes 目录下的log4j.xml文件,把   里面的value改成INFO,或者更高,这一步是可选项,主要是启动的时候出现很多不必要的debug 信息.如果你启动的时候出错了,再改回来。(一般都是solution-path没有找对,我用7-zip解压的时候老是解压到一个新的目录,所以后来指 定 solution-path 的时候,目录地址高了一级.)
6 . 启动pentaho-data- 目录里面的hsqldb数据库.
7 . 这个时候启动tomcat ,应该是不报任何错误的.你把浏览器指向http://localhost:8080/pentaho ,会看到pentaho的界面的,只不过是没有什么颜色的那种.
8 . 把编译後的三个war文件copy到tomcat 的webapps目录下,等它们自动解压之后,再进去看,发现有了样式了。安装就完成了.

贴几张图:
pentaho成功启动后应该有 Pentaho BI 平台服务器就绪 这句话.


安装了style 和 portal 包之后的登录界面


在pentaho-data- 目录的lib 目录下执行java -cp hsqldb.jar org.hsqldb.util.DatabaseManager  出现的hsqldb 的manager 登录画面
用户名和密码都在相应目录的数据库文件里面,hsqldb的数据库文件是可以用
文本编辑器打开的,搜索password就可以找到用户名和密码了


sampledata 里面的数据




我在安装的时候也碰到了诸多的问题,
1 . 一开始编译的时候使用的ant war-pentaho-tomcat 任务,它直接报错,说找不到rdbms目录,后来猜想这个任务应该是留给其他数据库编译的时候扩展的.直接就换了war-pentaho-tomcat- hypersonic 任务重新编译了一次
2 . 后来从文档里copy出数据源的那句话出错了,导致tomcat启动不了,因为从pdf文件copy的那段话排版有问题,后来把它粘贴到eclipse (装了WTP插件的)里面,一格式化就看出来了,context 元素和后面的属性path中间的空格没了,还有多出来了几个resource元素.
3 . 指定solution-path的时候目录高了一级.
4 . 启动tomcat的时候出现了很多不必要的debug信息,修改log4j文件就可以了,它在tomcat/bin 目录下还会生成几个log文件,像是server.log 和ReportEngine_.log 文件。


写这篇文章的目的更多的是希望喜欢pentaho的朋友在用pentaho做实验的时候能够学会思考,出现了问题先在网上找资料,而不是无论遇到什么问题都求别人来回答你,知识是长期积累的过程,新技术总是不断的出现,比如最近火的不得了的JavaFX,
也许将来pentaho可能会用JavaFX 来做OLAP 和 DashBoard 也不一定的 。关键还是要掌握学习的方法,学会思考问题 . 我安装的时候也遇到了很多问题,但是只要你细细的分析问题的原因,总是可以找出解决的办法的.

posted @ 2007-06-02 18:07 gemini 阅读(533) | 评论 (0)编辑 收藏

商业智能平台研究 (十) ETL 选型

商业智能平台研究 (十) ETL 选型
ETL (Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程)作为BI/DW(Business Intelligence)的核心和灵魂,能够按照统一的规则集成并提高数据的价值,是负责完成数据从数据源向目标数据仓库转化的过程,是实施数据仓库的 重要步骤。如果说数据仓库的模型设计是一座大厦的设计蓝图,数据是砖瓦的话,那么ETL就是建设大厦的过程。在整个项目中最难部分是用户需求分析和模型设 计,而ETL规则设计和实施则是工作量最大的,约占整个项目的60%~80%,这是国内外从众多实践中得到的普遍共识。

ETL工具从厂商来分为两种,一种是数据库厂商自带的ETL工具,Oracle warehouse builder 就是这种,另外一种是第三方工具提供商.开源世界也有一大票的ETL工具,功能各异,强弱不一,你可以从一下地址找到开源ETL工具的列表 http://www.manageability.org/blog/stuff/open-source-etl/view  , 提醒一句,选用工具的时候要慎重,真的,千万要慎重,不管你是选用商业的ETL工具(一般比较贵),还是开源的工具,都要在你充分了解产品的特性才去选 择,千万不要听某某人说什么这个工具好,就购买了那个工具,一定要自己了解产品.

开源的ETL工具的列表 (排名是乱排的)
kettle  http://kettle.pentaho.org/  ,pentaho官方的ETL工具,是一个metadata-driven 的ETL工具,不需要自己写code .
talend  http://www.talend.com/    talend是talend自己公司的产品,宣传的是全功能的Data Integration 解决方案,基于eclipse 平台,包括很多的模块来实现商业流程建模,数据流程建模,最后输出的是perl 和 Java code
jasperETL  http://www.jaspersoft.com/   JasperETL是基于talend的平台,不太清楚有什么区别,jaspersoft开发的ETL产品.
Octopus   http://www.enhydra.org/tech/octopus/index.html    octopuc是enhydra 的一个ETL工具,enhydra是一个产品跨度非常大的开源站点,它有个开源的Workflow ,Shark ,pentaho就是使用的这个Workflow ,这个组织从workflow 到application server , 从ETL工具到application framework ,还有一些其他的中间件,octopus非常的原始,支持任何的JDBC数据源,用XML语言来定义的.也支持JDBC-DOBC ,和excel 和 access ,csv-files, XML files ,用Ant 和 JUnit 来创建表和测试.
CloverETL http://cloveretl.berlios.de/   CloverETL是提供给你一组API,用XML来定义ETL过程,同样支持JDBC数据源, CloverETL是开源的,但是它是没有图形界面的,它提供一个有图形界面的CloverGUI 来进行ETL的图形化开发过程,但是不是开源的,需要购买商业许可证.
KETL   http://www.ketl.org/    听说是几个前IBM员工做出来的ETL产品,
另外还有很多.不一一写介绍了,只列个表吧,
Joost        http://joost.sourceforge.net/    最近有个web2.0 网站也叫Joost,名字相同而已.
Xineo        http://software.xineo.net/xil.jspx
BabelDoc        http://sourceforge.net/projects/babeldoc
CB2XML        http://sourceforge.net/projects/cb2xml
mec-eagle        http://sourceforge.net/projects/mec-eagle/
Transmorpher        http://transmorpher.inrialpes.fr/
XPipe        http://xpipe.sourceforge.net/Articles/Miscellaneous/fog0000000018.html
DataSift        http://www.datasift.org/
Xephyrus Flume        http://www.xephyrus.com/flume/flume-intro.Prlx
Smallx        https://smallx.dev.java.net/
Nux        http://dsd.lbl.gov/nux/index.html
Netflux        http://www.netflux.org/
OpenDigger       https://opendigger.dev.java.net/
ServingXML        http://servingxml.sourceforge.net/
Scriptella        http://scriptella.javaforge.com/
ETL Integrator        http://www.glassfishwiki.org/jbiwiki/Wiki.jsp?page=ETLSE
Jitterbit        http://www.jitterbit.com/
Apatar        http://www.apatar.com/
Spring Batch       http://static.springframework.org/spring-batch/

大多数站点都是在sf.net上的.其中最后一个是Spring的,大名鼎鼎的Spring 也往ETL插一脚.实在是..........
根据talend官方介绍的数据,ETL工具的市场份额在2006好像是有160多亿美元.由于BI项目的成功,ETL的这一市场份额还会扩大,这也不难 理解,为什么这么多的公司都在做ETL工具了.开源世界也免不了想要分一杯羹.再次废话一句,开源的东西你可以免费得到和使用,但是当你想应用到企业级开 发的时候,省钱可不是唯一应该考虑的因素.还是那句话,慎重呀慎重.

下一篇介绍BI的基本概念.


posted @ 2007-05-22 21:41 gemini 阅读(1496) | 评论 (0)编辑 收藏

商业智能平台研究(九) ETL 中的数据质量控制

商业智能平台研究(九) ETL 中的数据质量控制
数据质量一直是ETL工具的一个高级特性,为了解释清楚这个问题,让我们看看oracle的商业ETL工具Oracle Warehouse Builder 在数据质量上是如何管理的

oracle在官方网站上有一篇专门介绍如何使用oracle warehouse builder的文章,地址为http://www.oracle.com/technology/pub/articles/rittman-owb.html?
rssid=rss_otn_articles?msgid=4931461 , 是mark rittman所写,rittman公司本身也是一个专业的oracle 数据仓库 和商业智能方面的顾问公司,在oracle 方面非常的有发言权,如果你对oracle和数据仓库,或者oracle商业智能有兴趣的话,可以看一下上面的这篇文章,本文所有图片引自上面的这篇文 章。


ETL难以成功有以下几个难点:
1 . 数据仓库的数据来自于多个数据源,所以数据的一致性很难得到保证,很多情况下需要一种硬性的标准来决定数据的取舍问题.
2 . 数据格式问题,例如数据缺失,超出数据范围,无效数据格式等等。
3 . 出现错误之后没有正确的处理问题,导致数据的质量不断的下降。
4 . 数据一致性问题,处于数据库性能考虑,有时候可能会有意的去掉一些外间或者检查约束。
5 . 业务逻辑问题.由于数据库在最初设计时就不够严格和谨慎。

我们怎么判断数据的质量好坏的呢,一般用户拿原有系统的显示方式查看某一查询条件的数据与用商业智能报表所产生出来的数据进行对比,看有多大的出入,这个 可能需要原先系统有足够的能力显示这些数据并且商业智能工具的报表有足够强大的查询和报表展示能力,或者是用商业智能的报表与OLAP运行出来的报表进行 对比,看有多大的出入,出入一般都是会存在的,因为数据不可能完全的准确,但是一定要搞清楚哪里数据出现了问题,并且尽量不要让这些误差扩大到用户无法接 受的地步,否则就认为BI失败了。(咋同是一个工具做出来的,数据的出入就这么大呢?)



oracle warehouse builder 提供三个特性来使ETL的过程简单
1 . Graphical Data Profiler 可以查看数据的结构,语义,内容,异常,和大纲,数据规则 , 这就是在前一篇说的,kettle的数据管理没有oracle warehouse builder 强大的特性.kettle也提供查看表结构,column的结构,但是它不会判断一个column是不是主键或外键,一个字符串的最小长度是多少,最大长 度是多少,一个整数的长度是多少,一个double的精度是多少。
2 . Correction Wizard 把数据规则应用到你的ETL过程中,自动映射并更正,清理,转化数据, 相当于oracle warehouse builder 提供一些默认的值来帮助你更快的创建映射规则,这个功能也比kettle强大。
3 . Data Auditor 获取数据规则并监控数据转换的过程。kettle也提供数据监控的机制,并把log记入下来,并告诉你重复的记录数,读写多少条记录,更新拒绝多少条记录,时间,速度,步骤是否成功等信息.

oracle warehouse builder 提供查看选中表的结构信息和数据信息




数据归档编辑器有很多面板。这些面板显示已归档的对象和归档的结果。为了方便解释,可以将整个面板分成6个部分,分别是左上角的面板(有两个tab)叫做 1号面板,左边中间的property面板,叫做2号面板,左下角的monitor面板,叫做3号面板,右上角的Profile Results Canvas 面板(有10个tab),叫4号面板,右边中间的Data Grid Panal ,叫5号面板,右下角的Data Rule Panal ,叫6号面板。
1号面板显示已归档的表、视图、物化视图(oracle 10g新加的特性)、外部表、维度和事实等对象以及已经创建的任何更正模块的详细信息。
2号面板显示与数据归档关联的属性的列表。使用该属性列表,您可以优化数据归档的参数;启用或禁用某些数据归档组件并启用选定表的数据规则归档。
3号面板是监视器面板。该面板显示已提交的所有归档作业的进度。数据归档需要时间,所以可以在后台完成的作业,同时执行其他 Oracle Warehouse Builder 任务;当作业完成时,Oracle Warehouse Builder 会发出通知,kettle 在执行监控上提供的信息比oracle warehouse builder 多一些,包括速度和时间,还可以看到你启动多少线程组和线程,线程进行到那一步都显示的出来。
4号面板提供最多的信息,所以分成了10格tab,包含大量归档结果汇总的tab,
5号面板显示数据的统计信息,某一个column出现的值,出现的次数,占的百分比,有了这个功能,如果出现了错误的数据,将可以更容易的看到和清除.
6号面板显示数据规则.










其中4号面板有10个tab,其中有几个tab非常有用.(看上面的图)
Data Type tab详细说明表中每列的列名,数据格式,主要的数据类型,主要的数据类型所占的百分比,数据的长度,最大值和最小值,主要的长度,主要的长度所占的百分 比,类型的精度。其中所谓的主要长度类型在Date那一列为40%,可见有些值为空,它不光列出最小值和最大值,而且还有主要值的长度和它所占百分比,统 计方面功能比较强大,这种初步的数据统计不知道算不算接近于OLAP分析,功能上比kettle强大些.

Unique Key tab显示检测到唯一键或主键的所有列。该选项卡还显示唯一值的数量多得足以建议删除或更正非唯一行时可以定义唯一键的列。你可以看到图中有Six Sigma 列。这是一个 1 到 7 之间的数字,它指明“每千个的缺陷”数量,即对象中未能通过唯一约束的行。

Profile Object tab 相当于kettle中的 sql 编辑器 ,显示所有的数据并加上查询条件。

Domain tab 为归档对象的每列显示建议的域,以及数据与该域的一致程度。域就是列的一组允许的值,Oracle Warehouse Builder 认为出现两次或以上值的列就叫域。从图上看到,PACK_COUNT , PROD_ID , PROD_NAME 都是唯一性比较高的列,所以没有domain,这个面板同样也有 Six Sigma 值。



创建数据转化规则
在它给出的例子中,MANUF_COUNTRY的国家列包含Not Known , Canada ,USA , UK 和 Mexico ,它想把所有的England转化为 UK , 在Product 表中,把所有REORDER_YN为 'N' 的记录删掉,并使MARKET_SEGMENT 表的所有值为 ' Economy ' 或 ' Executive ' .

当你完成了数据规则的建立后,在实际转换的过程中,有可能出现你没有考虑到的情况,oracle warehouse builder 提出了三种操作,
Igore 这个不用解释吧.
Report 在一个新建的ERR$$$表中记录下这条记录。数据继续转化。
Cleanse 应用转化规则来清理数据.


如果没有什么特殊的原因,一般最好不要使用第一种策略,你即不知道有没有数据处错了,也不知道有多少数据出错了,这样很容易让你的数据误差越来越大,第二 种Report策略能让我们知道那些数据出错了,并记录下来,当我们需要找到数据误差原因的时候,或者我们需要更正这些数据误差的时候有依据。当然如果我 们真正的清楚数据转换规则的话,第三种策略是最好的,把这种误差消失在ETL的过程之中.

其中对于应用了数据转化规则的列,oracle warehouse builder 又提供四种策略来使数据达到我们想要的程度,

1 . Remove ,把我们认为满足特定数据条件的数据删除,例子中就是要把REORDER_YN = Y 的数据删掉。
2 . Similarity Match 把不在我们规定的域内的数据自动更改为最接近的值,这个值是oracle 用特定算法算出来的,我不清楚到底是怎么样的规则。不过我猜是不是按照字典的顺序来排序,谁接近就转化成谁,比如有applet,book ,orange ,如果要转化book的话,就把book转化为applet,因为b 开头的单词比o 开头的单词离的近一些,中文的话可能不会支持吧。当然,这只是我猜的.具体是怎么样只有问那些高手了.
3 . Soundex Match oracle有一个函数叫做SOUNDEX , 它是应用以下规则,保留首字母,把所有的元音 a , e , i , o , u 和 w , y 删掉。把剩下的字符串按如下数字相加
b , f , p ,v =1
c, g, j, k, q, s, x, z = 2
d, t = 3
l = 4
m, n = 5
r = 6
如果两个或两个以上有相同的数字接近原来的值(在第一步之前),或者接近除去h 和 w 的值 , 忽略掉除第一个字母以外的数字. 返回4个字节。格式大概如下:
SELECT name, SOUNDEX(namecol) FROM test;
SELECT * FROM test WHERE SOUNDEX(namecol) = SOUNDEX('SMITH');
以上例子摘自http://www.psoug.org/reference/string_func.html,如果你对算法有疑问可以自己去看看。

4 . Custom 使用自定义的转化规则来清理数据,大多数时候都是使用这种方式。例子中的把MANUF_COUNTRY 的 England 转化为 UK 就是这种情况。


在你进行数据转化之后,你对数据的质量满意了,你可以设置Data Auditor 来监控以后传入的数据的质量



Data Auditor 使用定义的数据规则,生成关于数据的一致程度的统计报告,然后将其存储在错误记录表中。还可以对 Data Auditor 进行编程,指定 Data Auditor 在分数低于一定的阈值后向您发出通知,然后在特定情况运行清理映射来清理数据。运行该清理映射后,可以对 Data Auditor 进行编程,使其仅在设计分数高于特定级别或 Six Sigma 值时才继续进行余下的 ETL 过程,避免将错误数据载入数据仓库,使数据仓库的质量能够得到保证。

ETL是非常重要的一步,往往一个项目的成败就是看ETL过程的成功与否.选用一个好的ETL工具会让项目更加的有信心.

下一篇介绍ETL的各种工具.


posted @ 2007-05-22 21:40 gemini 阅读(623) | 评论 (0)编辑 收藏

商业智能平台研究(八) ETL 之metadata

商业智能平台研究(八)  ETL 之metadata
metadata
网上有很多写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的快速开发,使用户能够通过扩展来满足他们的需求。(上面这段话翻译自http: //www.corba.org/vendors/pages/oracleCWM.html , 翻译的不是很好,如果各位有兴趣可以自己去看看)

下一篇介绍ETL的数据质量控制。


posted @ 2007-05-22 21:39 gemini 阅读(595) | 评论 (0)编辑 收藏

商业智能平台研究(七) ETL 的选型

商业智能平台研究(七)   ETL 的选型
看了一段关于魔兽世界的视频,讲的是4个小孩子被一个人PK,那四个小孩子拼命练级最后打败那个人的故事,其中有一句话翻译的很好,
gentleman ,we are dealing with the guy have absolutely no life .
先生们,我们正在对付一个彻头彻尾的宅男。

总是有很多事情觉得应该去做,总是说等有了时间去做。可真的有了时间又没有去做。想到了eygle (oracle一个很厉害的DBA) 的一篇文章,天道酬勤。
http://www.eygle.com/archives/2006/02/the_sun_repays_industriously.html
一年有四个计划,然后又加了一个计划,如以上目标不能实现,则顺延至下一年.
希望自己的计划列表上也不要有这一条吧,加油加油。
引用steve jobs 在stanford上的最后一句话
Stay Hungry. Stay Foolish
求知若飢,虛心若愚。

openI : openI 并没有指定的ETL 工具
spagoBI : spagoBI 官方是支持多种ETL工具的,但他们的合作伙伴是 talend . talend 最近刚刚发布了2.0版本 , 自己声称是业绩第一个开源的ETL工具.基于eclipse平台。1.1版最后处理数据的方式是用perl,2.0版刚刚加了用java处理的方式,不过 支持的数据源比较少.
jaspersoft : jasperETL ,一个基于talend的工具,不知道有什么不一样,大概是购买了talend的二次开发许可证。
pentaho : kettle ,现在已经改名叫pentaho data integration 了,不过一样可以叫kettle ,是pentaho独立的一个子项目,最近刚刚发布了2.5版本,非常容易安装和使用,跟pentaho一样,人气很旺。


让我们先看看ETL过程的设计是如何的定义的:
1 .数据抽取、   转换和加载,是数据仓库实现过程中,数据由数据源系统向数据仓库加载的主要方法,整个数据处理过程如下:
2 .数据抽取  : 从数据源系统抽取数据仓库系统所需的数据,数据抽取采用统一的接口,可以从数据库抽取数据,也可以从文件抽取。对于不同数据平台、源数据形式、性能要求的 业务系统,以及不同数据量的源数据,可能采用的接口方式不同,为保证抽取效率,减少对生产运营的影响,对于大数据量的抽取,采取“数据分割、缩短抽取周 期”的原则,对于直接的数据库抽取,采取协商接口表的方式,保障生产系统数据库的安全。
3 . 数据转换  :  数据转换是指对抽取的源数据根据数据仓库系统模型的要求,进行数据的转换、清洗、拆分、汇总等,保证来自不同系统、不同格式的数据和信息模型具有一致性和完整性,并按要求装入数据仓库。
4 . 数据加载  :  数据加载是将转换后的数据加载到数据仓库中,可以采用数据加载工具,也可以采用API编程进行数据加载。数据加载策略包括加载周期和数据追加策略,对于电 信企业级应用,采用对ETL工具进行功能封装,向上提供监控与调度接口的方式。数据加载周期要综合考虑经营分析需求和系统加载的代价,对不同业务系统的数 据采用不同的加载周期,但必须保持同一时间业务数据的完整性和一致性。


ETL的功能。

ETL 功能的强弱很难用一个指标来评价,大概从以下几个方面可以粗略的考虑

支持的平台,支持数据源,流程设计,Metadata管理,可扩展性 , API , 数据验证,数据质量管理 ,

*支持的平台
很多的服务器不是运行在Windows系统上,所以平台的支持非常的重要,Windows,Linux, Solaris,HP-UX , IBM AIX ,都是服务器常用的操作系统,至于Applet OSX我就不敢说了,如果哪个ETL工具只绑定在Windows平台上,恐怕支持的程度会很低,所以用java做的东西会占一点点的上风,企业用的东西还 是要有一点跨平台的能力滴。

*支持的数据源
这里把数据源分为三种,数据库,文件,第三方应用程序
主流的数据库如 Mysql , Oracle , MS SQL Server , IBM DB2 , Sybase 还包括各种各样的数据库比如MS Access , PostgreSQL , Informix , Firebird SQL , Hypersonic , SAP DB , CA Ingres , SAP R/3 System 和任何支持ODBC的数据库,有人会对MS Access 和 Hypersonic 数据库上榜有疑问,我承认他们不是商业型数据库,可是我们不能否认他们的存在。这里要提一下JDBC 的好处了,JDBC的标准使数据库的通用性提高了很多。
支持的文件格式也算是ETL数据源一种很重要的输入,其中有两种是必须支持的,普通文本格式文件和CSV文件,另外还包括zip文件,XML文件,当然是 按照一定格式输出的,有的是数据库本身输出的比如oracle的,有的是第三方工具输出的,也有是自身的ETL工具输出的格式,对文件格式支持又分为 Read和Write,Read就是输入,要求支持的格式尽可能的多,而Write则因工具而不同,可能有的特性包括:按照field分隔数据,多种文件 格式输出,追加的方式输出,按照文件大小或指定的行数自动分割文件等等。
支持的第三方应用程序也是ETL的附加特性,比如支持SAP 或者一些流行的ERP 数据格式的处理,但是并不是每个ETL工具都会有的特性,这个因工具而异。


*流程设计
ETL数据处理是非常复杂的,一个好的ETL流程设计工具不是凭一两个功能就算是成功的工具,流程设计也不可能因为一两个步骤就完成,我只是尽量挑些我知道的说吧,如果大家有补充的话,也欢迎留言或给我发email:  jj12tt@yahoo.com.cn
由于ETL过程的复杂性,为了方便的管理,高性能,可扩展性,大多采用象多线程,分布式架构,来提高管理和性能,所以GUI设计工具也要有相应的支持才能更好的完成工作.

输入和输出的时候要能够备份和恢复,你也可以认为这是数据流向临时表.
要能够方便的更改数据的结构,最好还有版本控制支持,不一定要非常的强大,至少要记录下每次更改的过程.
字段的转化功能要尽可能的强大,talend的转化设置还可以支持正则表达式.最好很多转换都有默认值,能够支持公式.
可以自定义函数,当然函数本身不能大复杂,跟公式转化能够搭配.
支持复杂的过滤,分组,查询.能够按照行或列进行聚合.
能够有基于时间的调度方式,事实上这也是必须的.
要有好的性能,能够批量的处理请求,并且这些性能是可视化的,也就是要有一个度量.每次转化多少数据用了多少秒或分钟,kettle官方上写的性能指标是 4000/s,如果一条数据算1k 的话,一秒钟就是4M 的数据量,1GB就是256秒,大约4分钟多,应该算是非常可以接受的值了,不然别人也不会写在官方网站上了.
所有的任务都是能够集中管理的.也就是说,多个不同的客户端ETL工具有一个共用的服务器来设计任务,每个人可以设计自己的部分,但是执行的时候是一个整体在执行.
要有好的异常处理方式.出错是在所难免的,问题是出错了之后你怎么处理的问题.
是否支持集群,大型的数据库可能都会避免不了使用集群,如果转化的时候支持集群速度可能会提高非常之多,而且集群的特点就是只读服务器比较多,而ETL本身就是只读的,所以和集群也是非常和的来的.



流程是分步骤的,一个步骤又有可能是由多个任务来组成的,所以一个好的GUI是必不可少的,所以我们也说说GUI的特性:
1 . drag and drop 特性是必不可少的。而且有的时候需要一些对话框和向导来收集用户的行为。
2 . 任务是可以复制和剪切的。
3 . 每一个动作都是可以描述的。也是可以取消和重做的。取消和重做的次数不说是无限次数,也要尽可能的大。
4 . 每一个任务都是必须要有起点和终点的,起点只有一个,但是终点就不一定了。
5 . 要有图形化建立数据库链接的方式。能用图形化建立每一步,每个任务的方式。
6 . 界面的可定制性要好,颜色要选鲜艳一点的,字体可以调的,图形化界面要可以放大和缩小的,(不是吧,这也算)。当你要面对数十个任务的时候,数据错综复杂,颜色鲜艳一点不至于让你睡着了,你就知道为什么需要了。
7 . 支持多条路线,也就是一个数据点可以把数据分散到多个不同的下一级数据点,多个下一级数据点又可以把数据汇集到同一个数据点。
8 . 可以预览,所谓的预览就是把指定数量的数据而不是全部数据进行处理,查看结果是否满意。
9 . 可以在数据运行的时候动态的pause , cancel , redo .尤其是在进行耗时很长的动作的时候,或者你发现前一个步骤出错的时候。
10 . 显示数据处理时的状态要清楚。你正在链接到一个database ,你正在读8000条记录,你正在更新这些记录而不是新建记录,每一步操作所处的状态要明确。
11 . 要支持缓存 .这应该算是提高性能的好方法,但是缓存不能丢失。
12 . 所有的操作可以存储。不论你是存储成XML格式的,还是用元数据储存在database里面。
13 . 存储的操作可以读取。并且是不丢失任何数据的读取。
14 . 识别不同的数据库数据类型。long , String , data , text ,还包括table , index, sequence 等等。
15 . 对数据库要有编辑器的支持。要有可视化图形的建立 query 的方式。旁边应该有group , order by , sum , avg 等标准函数的支持。


下一篇介绍ETL 的metadata .


posted @ 2007-05-22 21:39 gemini 阅读(685) | 评论 (0)编辑 收藏

导航

统计

常用链接

留言簿(3)

随笔档案

相册

搜索

最新评论

阅读排行榜

评论排行榜