使用kettle数据迁移添加主键和索引

没有评论 24 views 2012年1月5日

Kettle是一款国外开源的etl工具,纯java编写,绿色无需安装,主要用于数据抽取、转换、装载。kettle兼容了市面上几十种数据库,故用kettle来做数据库的迁移视乎是个不错的选择。

kettle的数据抽取主要在于抽取数据,而没有考虑数据库的函数、存储过程、视图、表结构以及索引、约束等等,而这些东西恰恰都是数据迁移需要考虑的事情。当然,如果在不考虑数据库中的函数、存储过程、视图的情况下,使用kettle进行数据的迁移还算是一个可行的方案。

这篇文章主要是讲述在使用kettle进行数据库的迁移的时候如何迁移主键和索引,为什么要迁移主键和索引?异构数据库之间的迁移很难无缝的实现自定义函数、存储过程、视图、表结构、索引、约束以及数据的迁移,所以多数情况下只需要异构数据库之间类型兼容、数据一致就可以了。但是在有些情况下需要对输出表进行查询以及数据比对的时候,需要有主键和索引方便对比和加快查询速度

先来看看kettle中的一些组件。下图是kettle中的一个表输出组件。
kettle中的表输出组件
在该组件里可以指定表名、字段等信息,并且还可以建表的sql语句。打开建表的sql语句,你可以看到该语句里只指定了字段名称和类型,没有指定主外键、约束、和索引。显然,该组件只是完成了数据的输出并没有将表的主键迁移过去。
继续阅读…

kettle进行数据迁移遇到的问题

没有评论 71 views 2012年1月4日

使用kettle进行oracle或db2数据导入到mysql或postgres数据库过程中遇到以下问题,以下只是一个简单描述,详细的说明以及所做的代码修改没有提及。下面所提到的最新的pdi程序是我修改kettle源码并编译之后的版本。

1. 同时运行两个pdi程序,例如:一个为oracle到mysql,另一个为oracle到postgres,其中一个停止运行
原因:从oracle迁移到mysql创建的作业和转换文件和oracle到postgres的作业和转换保存到一个路径,导致同名称的转换相互之间被覆盖,故在运行时候会出现混乱。
解决办法:将新建的作业和转换分别保存在两个不同的路径,最好是新建两个不同路径的仓库,关于如何新建仓库,请参考《kettle使用说明》文档。

2. 关键字的问题。Oracle初始化到mysql,关键字前面会加上前缀“MY_”。如果在建表的时候出现错误,则需要检查表的字段中是否有关键字。
解决办法:出差的表单独进行处理,新建一个转换,实现关键字段该名称然后初始化出错的表。具体操作参见文档。

oracle中的字段名从中可以有#号,但是到mysql会报错
解决办法:字段改名称,去掉#号

3. Db2初始化到mysql或是postgres出错
原因:1)db2数据库连接用户没有权限访问出错的表;2)出错的表名存在小写字母
解决办法:使用更新后的pdi程序,更新后的程序会将db2的表名使用双引号括起来。

4. Oracle到mysql和pg时日期类型数据值有偏差
原因:从oracle中读取日期类型的数据时候,读取结果与oracle数据库中的数据已经存在偏差。少数记录使用oracle10g的驱动读取数据少一个小时,用oracle11g的驱动会多一个小时,该问题尚待oracle工程师给出解决方案。

5. 主键从ORACLE导入不到MYSQL和POSTGRES
原因:pdi程序中没有对主键进行处理
解决办法:使用更新的pdi程序,执行Tools-Wizzard-Copy Tables Extension…功能添加主键;执行Tools-Wizzard-Copy Tables Data Only…功能可以只复制数据

6. Oracle中存在ascii字符导入到postgres时候报错:ERROR: invalid byte sequence for encoding “UTF8″: 0×00
原因:PostgreSQL内部采用C语言风格的字符串(以0×00)表示结尾,因而不允许字符串中包括0×00,建议在转换时先对字符串类型的数据进行清洗,也就是增加一个节点用于删除字符串数据中的特殊字符0×00。
解决办法:使用新的pdi程序。
在kettle的DataBase类中修改PreparedStatement.setString(int index,String value)方法传入的参数,将value的值trim之后在setString

7. 异构数据库之间的类型兼容问题。日期类型和时间类型的数据初始化到mysql或postgres中都为时间类型的数据,导致数据对比时候数据不一致。
原因:Pdi程序中的类型转换采用的是向上兼容的方式,故日期和时间类型都转换为时间类型数据。
解决办法:针对与db2数据初始化到mysql和postgres,该问题在最新的pdi程序中已经处理。因为oracle中的日期类型字段既可以存日期又可以存时间,故没针对oracle数据做出处理。

8. Db2中没有主键的数据初始化到mysql和postgres需要添加索引
解决办法:使用最新的pdi程序,最新的pdi程序会添加主键和索引。

9. Db2中decimal(n,m)类型的数据初始化到postgres数据库被四舍五入
原因:Db2中decimal(n,m)类型的数据初始化到postgres中的类型不对。
解决办法:使用最新的pdi程序。

10. 导数据中途时没有报错,直接软件退出
原因:1)jvm内存溢出,需要修改jvm参数;2)pdi程序报swt错误
解决办法:修改jvm参数

11.初次使用kettle做db2的初始化会报错
原因:kettle中的db2的jdbc驱动与使用的db2版本不对应。
解决办法:从db2的安装目录下拷贝jdbc驱动到kettle目录(libext/JDBC)下

Mondrian and OLAP

没有评论 49 views 2011年12月7日

Mondrian是一个用Java编写的OLAP引擎。他执行用MDX语言编写的查询,从关系数据库(RDBMS)中读取数据并且通过Java API以多维度的格式展示查询结果。

Online Analytical Processing
联机分析处理(OLAP)指在线实时的分析大量数据。与联机事务处理系统(On-Line Transaction Processing,简称OLTP)不同,OLTP中典型的操作如读和修改单个的少量的记录,而OLAP批量处理数据并且所有操作都是只读的。“online”意味着即使是处理大量的数据—-百万条数据记录,占有几个GB内存—-系统必须足够快的反回查询结果以允许数据的交互式响应。正如我们将看到,数据展示面临相当大的技术挑战。

OLAP引入了一种多维度查询的技术。鉴于一个关系数据库以行和列的形式存储所有数据,一个多维数据集包括轴和列。考虑下面的数据集:

olap多维视图

行轴包括”All products”, “Books”,”Fiction”等等,并且列轴包括生产年份”2000″”和”2001″、”Growth”的计算值以及”Unit sales”和”Dollar sales”的测量值。每个单元代表在某一年的一个产品类别的销售额,例如2001年Magazines的$销售额是2426美元。

这是一个比关系型数据库展现出来的更加丰富的视图。多维数据集的只不是永远都来自于一个关系数据库的列。 ‘Total’, ‘Books’ and ‘Fiction’ 是一个具有层次结构连续的成员,每一个成员都包括其下一层的成员。即使是在”2000″和”2001″一行,”Growth”是一个计算出来的值,它引入一个公式从其他列计算当前列的值。

该例中使用的维度有:产品、生产线和测量值,仅仅是这个数据集可以分类和过滤的许多维度中的三个。维度,层次结构和测量值的集合被称为一个立方体。

结论
我希望我已经证明垛位是一个首选的数据显示方式。虽然一些多维数据库以多维度的格式存储数据库,我仍然认为这比以关系的格式存储数据要简单。
现在,你可以看看OLAP系统的架构。查看Mondrian architecture。http://mondrian.pentaho.com/documentation/architecture.php

说明

这是一篇翻译,原文来自http://mondrian.pentaho.com/documentation/olap.php。翻译水平有限,难免翻译不当,请见谅。

XUL 用户界面语言介绍

没有评论 78 views 2011年11月25日

XUL[1]是英文“XML User Interface Language”的首字母缩写。它是为了支持Mozilla系列的应用程序(如Mozilla Firefox和Mozilla Thunderbird)而开发的用户界面标示语言。顾名思义,它是一种应用XML来描述用户界面的标示语言。
XUL是开放标准,重用了许多现有的标准和技术[2],包括CSS、JavaScript、DTD和RDF等。所以对于有网络编程和设计经验的人士来说,学习XUL比学习其他用户界面标示语言相对简单。
使用XUL的主要好处在于它提供了一套简易和跨平台的widget定义。这节省了编程人员在开发软件时所付出的努力。

XUL元素
XUL定义了一套丰富的元素。它们大致上可分为以下几种:
基层元素:例如视窗、page、对话框、向导
Widget:例如标签、按钮、文字方块、条列式菜单、组合方块、选择钮、复选框、树、菜单、工具栏、分组框、标签页、色彩选择器、spacer、splitter
排版:例如方框、网格、堆栈、叠
事件和脚本:例如脚本、命令、key、broadcaster、observer
数据源:例如template、rule
其他:例如overlay(类似SSI,但在客户端运作,而且更为强大)、iframe、浏览器、编辑器
一个XUL文件中也可以包含其他XML命名空间的元素,例如XHTML、SVG和MathML。
现时的XUL还未在提供一些普遍的widget,例如spinbox、slider和canvas。XUL 2.0[3]计划中将会包括这些缺乏的控件。

XUL是如何处理的[4]
Mozilla浏览器内部使用跟HTML的处理非常相似的方法来处理XUL:当你在浏览器的地址栏里面输入HTML页面的URL以后,浏览器就定位这个网址并下载页面内容,然后Mozilla将页面内容转换成树的数据结构,最后再将树转换成对象集合,集合中的对象最终被展现在屏幕上就成了我们所见的网页。CSS, 图片以及其他技术被用来控制页面的展现。XUL的处理过程与此非常类似。

XUL应用
虽然XUL的设计原意是为了创作Mozilla程序及其扩展,但事实上人们也能利用它来编写基于HTTP的网络应用程序和基于swt/swing/gwt的客户端程序。一些开源的架构使用了XUL,例如Pentaho XUL Framework[5]。Pentaho XUL使用XUl跨多种技术(Swing, SWT, GWT)渲染用户界面,来实现业务逻辑的可重用性。shandor-xul[6]项目也是基于XUl开发的,项目地址见参考资料[6]。
Firefox里内置的一些XUL 地址见:http://www.cnblogs.com/jxsoft/archive/2011/04/07/2008202.html

运行XUL应用程序
可以选择 3 种方式来运行 XUL 应用程序:
1.使用基于 Mozilla 的浏览器进行简单测试
2.使用XULRunner
3.使用Firefox 3.0作为XUL运行时,它的功能和 XULRunner很相似

总结
XUL用户界面语言是一种可用于开发Mozilla独立应用程序和浏览器扩展的通用语言,还可以用来实现跨多种UI技术的用户接口,提高业务逻辑代码的重用性,第二点视乎是更值得推荐使用的。关于XUl的教程见参考资料。

参考资料
1.XUL Wiki :http://zh.wikipedia.org/wiki/XUL
2.XML 用户界面语言(XUL)开发简介:http://www.ibm.com/developerworks/cn/education/xml/x-xulintro/section2.html
3.XUL 2.0: https://wiki.mozilla.org/XUL:Home_Page
4.XUL结构: https://developer.mozilla.org/cn/
5.Pentaho XUL ramework: http://wiki.pentaho.com/display/ServerDoc2x/The+Pentaho+XUL+Framework+Developer’s+Guide
6.shandor-xul:http://code.google.com/p/shandor-xul/
7.Mozilla XUL教程: https://developer.mozilla.org/index.php

在eclipse中构建Pentaho BI Server工程

没有评论 363 views 2011年9月28日

首先需要说明的是,Pentaho BI Server源代码在svn://source.pentaho.org/svnroot/bi-platform-v2/trunk/,并且用ivy构建。ivy没有用过也不熟悉,故不打算从这里使用ivy构建源码。
当然,您可以参考官方文档构建源码。

Pentaho BI Server打包后的文件存于这里,其中包括(本文使用的是3.9.0版本):biserver-ce-3.9.0-stable.zip,bi-platform-3.9.0-stable-sources.zip,biserver-ce-3.9.0-stable-javadoc.zip。
继续阅读…

Pentaho现场支持遇到问题及解决办法

没有评论 99 views 2011年9月26日

很久没写文章了,最近在关注Pentaho。
以下是9月16日现场提出的问题解决办法:
1、PDF预览中文没显示,txt预览中文乱码:
1)、设置File->Configuration ->output-pageable-pdf的encoding 为Identity-H
2)、将需要输出中文的报表项目的字体设置为中文字体,例如宋体
3)、如要发布到服务器,需要修改如下的配置:
pentaho/server/biserver-ee/tomcat/webapps/pentaho/WEB-INF/classes/classic-engine.properties:
org.pentaho.reporting.engine.classic.core.modules.output.pageable.pdf.Encoding=Identity-H
2、实现文件拷贝方式发布报表
可以通过文件方式发布,只要将报表的prpt文件拷贝到Solution的目录(Pentaho安装路径的server\biserver-ee\pentaho-solutions)下就可以了
3、报表链接参数传递问题
由于参数带中文造成的,可以对参数的值URLENCODE(“value”; “utf-8″)来解决
4、查询参数缺省值问题
关于日期的默认值。可以使用报表系统提供的日期变量设置,如TODAY,DATE,YEAR。。。
5、实现在pie chart上显示文字
以把label默认显示的百分比改为文字:label-formate = {0}, 但是label显示百分比,同时在pie图的划分区域显示文字是不能的。
6、报表集成时候垂直滚动条是否可以去掉
改变报表的高度:报表设计器 file-page setup
7、报表中的chart不能导出到Excel2007
目前为系统bug,excel2003能够正常导出
8、实现隔行换色
选中Details中的field再attribute面板上设置name的名称(如“row-band”),然后通过Format–>Row-Banding,可以设置Visible Color 、Inisible Color,再Element中输入”row-band”
9、显示top N :托一个message field,在里面输入表达式,如,$(topn),topn为传入的参数