文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 专题 求职 读书
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» DB2 » 教你如何构建DB2 Cube View元数据桥 (1)       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: 教你如何构建DB2 Cube View元数据桥 (1)  ( 查看:540  回复:6 )   
 
pinglin
新新人类  点击可查看详细



帖子 18
精华 0
无忧币 56
积分 46
阅读权限 20
注册日期 2007-9-29
最后登录 2007-11-9 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-9-29 01:17   标题:教你如何构建DB2 Cube View元数据桥 (1)
上一帖 |
介绍
公司和用户需要有分析大量的数据集的能力,以及能够访问和报告更详细的数据。象DB2 UDB这样的高可升级性的数据库服务器扮演一个越来越重要的角色,传送企业OLAP解决方案。 使用DB2 Cube View,DB2 UDB提供一个更加强健的基础结构,能够在端对端的的数据仓库和业务智能配置中承担起大量数据的处理。

对于许多OLAP工具和应用程序,与DB2 Cube View整合需要构建一个元数据桥。 这个桥可以使用DB2 Cube View的基于XML的存储过程接口读取或者创建元数据。 我们在本文中将讲述如何使用这个接口去构建一个桥。

DB2 Cube View的概述

IBM DB2 Cube View是增强DB2 UDB作为开发和配置业务智能产品和应用程序的DB2通用数据库的一个附加特性。 尤其是,DB2 Cube View有助于加快基于DB2 UDB的OLAP解决方案和应用程序的开发和管理。

DB2 Cube View特性是如何做到这些的? 首先,它允许DB2 UDB是了解OLAP的。 不用Cube View,对于一个不熟悉数据库结构和内容的人来说,一个关系数据库看上去可能象一大堆有栏目的表。 DB2 Cube View元数据使你能在一个DB2数据库中更加完整的建立底层结构。

通常,一个数据仓库或者数据市场是设计来用于量纲分析。 在这种情况下,数据库通常由一个或多个星形(或者雪花型)图式组织成的表组成。 一个简单的星形图式由多个维量的表围绕的一个实际表组成。 比如,一个实际的表可以记录一个公司个别产品和存货位置的销售图表。 维度表(可以名为PRODUCTS和STORES)可以包含个别产品和存货位置的细节,可以连接到实际的表中。

元数据对象

DB2 Cube View元数据尤其擅长获得一个星形图式或者雪花图式(参见图1)所固有的结构。 元数据通过一套元数据对象提供相关数据的"维度视图"。 元数据对象被分层为从Attributes这样的简单对象到更复杂的对象,比如Joins、Hierarchies、Dimensions和Cube Models。 一个完全定义的Cube Model对象通常相当于一个星形(或者雪花)图式,并且使用一个通用的维数建模一套量度数。 那么毫无疑问,Cube Model封装其它DB2 Cube View元数据对象,比如Dimensions和Measures。



图1、引用一个关系星形图式的DB2 Cube View

总而言之,DB2 Cube View元数据使你能你的DB2数据库的多维管理结构和设计。除了使得DB2感知OLAP以外,DB2 Cube View元数据至少还以两种方法使用:

· DB2 Cube View特性利用元数据最优化在DB2数据库中的SQL查询。

· 基于DB2 UDB的Products和应用程序可以使用元数据。

让我们简要地讨论这两种用法。

使用DB2 Cube View元数据用于最优化

DB2 Cube View可以通过创建相应的保持前集合体数据的物化查询表或者MQT加速SQL查询。MQT也被称为摘要表。 DB2优化程序可以根据情况重写到MQT的SQL查询(参见图2)。MQT通常在数量级上比底层的基本表小。这样,查询可以被重写,能够比运行在基本表上的SQL查询要快很多。.

DB2 Cube View有一个最优化顾问,基于元数据和用户输入,建议一套相应的MQT。请参阅DB2 Cube Views Setup and User 's Guide关于最优化的章节,获取更详细的信息。


图2、DB2优化程序在适当的时候编写到MQT的查询

元数据使用者

Cube View元数据还有其它的优点。 业务智能工具可以从DB2 UDB中读取元数据,来了解DB2表的维度结构。基于元数据,这些工具然后可以提供针对DB2 UDB数据的查询和报告解决方案解决方案。

使用DB2 Cube View元数据的工具和应用程序通常分成两类:

· 第一类应用程序"直接固定"到DB2 Cube View上。它们读取元数据并直接使用它来分析DB2数据库,通常通过使用元数据构建SQL查询。最常见的情况是,这些工具查询和报告DB2 Cube View Cube模型和Cube对象。

· 第二类工具把Cube View元数据从DB2传到它们自己的工具,然后基于它们的元数据查询DB2。这些工具必须把DB2 Cube View元数据映射为它们自己的元数据。映射的复杂性取决于元数据的类似性。

元数据生产者

注意并非所有对DB2 Cube View元数据感兴趣的应用程序都要读取它。另一类工具和应用程序产生元数据并把它推进DB2。维度元数据常常在数据库设计、提取-转换-载入(ETL)及其他数据库管理工具中产生。 通过把维度元数据传送到DB2 UDB,这些工具可以利用早先提到的最优化和管理等优点。

显然,工具和应用程序需要一个与DB2中的Cube View元数据交互的方法,以便读取、创建、修改和删除元数据对象。DB2 Cube View提供一个API,用于进行这些操作。

应用程序接口概述-DB2info.md_message()

DB2 Cube View应用程序接口是一个用于访问维度元数据的接口。它作为一个DB2存储过程被实现,名为db2info.md_message(),传送XML文档进出它所有的参数。一个存储过程的优点就在于应用程序接口成为中性语言。任何能够与DB2会话的程序设计语言都可以调用这个存储过程。你可以通过ODBC或者JDBC等等使用嵌入式SQL、动态SQL。

在DB2 Cube View Setup and User ' s Guide一书的附录里有这个API的详尽的描述。在本文中,我们将介绍几个例子。

输入参数

存储过程有下面的语法:


DBINFO.MD_MESSAGE(operation IN, metadata IN/OUT, response OUT)


所有的参数是CLOB类型。

存储过程有两个输入参数。第一个是必需的,指定调用程序想执行什么操作。这个操作是:

DESCRIBE

CREATE

ALTER

RENAME

DROP

IMPORT

VALIDATE

某些操作(像CREATE和IMPORT)要求元数据通过第二个参数被传入存储过程。一个操作DESCRIBE通过第二个参数返回元数据。

输出参数

存储过程的第三个参数是一个输出参数。对于每个到这个存储过程的调用,都会通过第三个参数返回一个响应文档。然而,如果出现某些严重错误,那么没有输出响应文档被创建。

[ 本帖最后由 pinglin 于 2007-9-29 01:18 编辑 ]



网络虽虚拟,技术无边界,来看看大家“真面目”!
2007-9-29 01:171楼
[ 顶部 ]
 
pinglin
新新人类  点击可查看详细



帖子 18
精华 0
无忧币 56
积分 46
阅读权限 20
注册日期 2007-9-29
最后登录 2007-11-9 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-9-29 01:19 
分析XML

为了使用应用程序接口,你的程序必须构造传入存储过程的XML文档。你还将需要分析存储过程返回的XML。

DB2 Cube View应用程序接口使用的XML的语法由XSD模式文件指定,XSD模式文件在sqllib/cfg目录。你将使用的XSD模式文件如表1所示。

表⒈与输入和输出参数相联系的XSD文件


应用程序接口参数                模式文件
Operations and responses        db2md_parameter.xsd
(first and third arguments)
Metadata (second argument)      db2md_metadata.xsd anddb2md_types.xsd


使用应用程序接口

用于调用md_message()存储过程的例程C++代码在sqllib/samples/olap/client/DB2mdapiclient.cpp的DB2 Cube View产品中。

如果你是使用Java编写程序,那么这里给出使用JDBC调用存储过程的样例代码段:


/* Calls the DB2 stored procedure passing in the request string
* as the first parameter and the metadata string as the second
* parameter. If XMLRequestString contains a script or no output
* metadata is required the xmlMetadata parameter may be null.
* The outputMetadata boolean controls what is returned by the
* method. If it is true any output metadata is returned. If
* false the response output is returned. */
private String callDB2StoredProc(String xmlRequestString,
String xmlMetadataString,
boolean outputMetadata)
throws OCException,
OCApiException
{
/* Create an SQL command to call the Stored procedure in DB2
* to get the XML */
String sql = "CALL db2info.MD_MESSAGE (?, ?, ?)";
String response = null;
String xmlMetadataResponse = null;
CallableStatement callStmt = null;
try
{
callStmt = auroraCatalogConnection.prepareCall(sql);
/* Set input parameter to request and metadata strings. */
callStmt.setString (1, xmlRequestString);
callStmt.setString (2, xmlMetadataString);
/* ReGISter the output parameters. */
callStmt.registerOutParameter (2, Types.VARCHAR);
callStmt.registerOutParameter (3, Types.VARCHAR);
/* Call the stored procedure */
callStmt.execute();
/* Retrieve output parameters. If the procedure was called with
* a request that returns metadata in the middle parameter then
* xmlMetadataResponse will store the output XML. */
if (outputMetadata == true)
xmlMetadataResponse = callStmt.getString(2);
response = callStmt.getString(3);
/* See if there are any warnings. */
SQLWarning warning = callStmt.getWarnings();
/* If execute returns a warning with a non-zero SQL state
* then the API has had an error and returned some response
* info in the output XML document. */
if (warning != null)
{
OCLog.trace("Stored procedure execute returned a warning.");
OCLog.trace("SQL state: " + warning.getSQLState());
OCLog.trace("SQL state: " + warning.getErrorCode());
/* readResponseFromXML will throw an OCApiException containing
* the error info (which will then be thrown to our caller) or
* it will throw an OCException if a parsing error occurred. If
* for some strange reason the file does not contain error
* info it will just return and then we'll throw an OCException
* to notify the user. */
try { readResponseFromXML(response); }
/* If an API exception was thrown add the SQL state etc to
* it and then throw it again. */
catch (OCApiException apie)
{
apie.setSqlException(warning);
throw apie;
}
/* If we have had a warning we always want to rollback any changes.
* If we have a problem rolling back the exception will be caught
* below. */
finally
{
auroraCatalogConnection.rollback();
}
/* If we got here there must have been a warning with nothing
* in the output XML so throw an exception explaining this. */
throw new OCException("OC_ERR_API_DB2_STORED_PROC_FAIL_NO_INFO");
}
}
/* If we had an error executing the SQL, log the information and
* throw an exception. We also rollback any changes and catch
* the exception if the rollback has a problem. */
catch (SQLException e)
{
OCApiException newe = new OCApiException(e);
OCLog.trace( newe.getMessage() );
logExceptionInfo(e);
try { auroraCatalogConnection.rollback(); }
catch (SQLException e2)
{
OCLog.trace("An exception also occurred rolling back.");
logExceptionInfo(e2);
}
throw newe;
}



网络虽虚拟,技术无边界,来看看大家“真面目”!
2007-9-29 01:192楼
[ 顶部 ]
 
pinglin
新新人类  点击可查看详细



帖子 18
精华 0
无忧币 56
积分 46
阅读权限 20
注册日期 2007-9-29
最后登录 2007-11-9 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-9-29 01:22 
读取元数据

在你有一些成功地调用API的代码之后,你需要把注意力集中在传送正确的XML到应用程序接口中,并且能够分析输出的XML。

大部分的程序将需要使用DESCRIBE操作从DB2 Cube View中读取元数据。这里是一些例子:

例子⒈读取所有的元数据

这里是操作你将使用的XML:

<olap:request xmlns:olap="http://www.ibm.com/olap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="8.1.2.1.0">;
<describe objectType="all" recurse="no">;
</describe>;
</olap:request>;
注意:

· 调用程序和服务器上的DB2存储过程的版本号(比如8.1.2.1.0)必须一致。

· 注意请求标记应该是<olap:request>;。

第二个参数将返回包含元数据的一个CLOB。通常,许多对象被返回。如果DB2只有一个Attribute对象,那么输出元数据XML看起来象如下所示:

<olap:metadata xmlns:olap="http://www.ibm.com/olap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="8.1.2.1.0">;
<attribute name="FAMILY" schema="MDSAMPLE" businessName="FAMILY"
createTime="2003-04-11T21:28:22" creator="db2admin">;
<datatype schema="SYSIBM" name="VARCHAR" length="15" scale="0"/>;
<sqlExpression template="{$$1}">;
<column name="FAMILY" tableSchema="MDSAMPLE" tableName="FAMILY"/>;
</sqlExpression>;
</attribute>;
</olap:metadata>;
如果成功的话,响应文档就会看起来象这样:

<olap:response xmlns:olap="http://www.ibm.com/olap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="8.1.2.1.0">;
<describe>;
<status id="0" text="Operation completed successfully. No errors were encountered."
type="informational"/>;
</describe>;
</olap:response>;
例子⒉取得一个指定的Cube模型和关联对象。

下面是你想用来为db2admin.MyCubeModel取得cube模型和它的相关对象的操作XML:

<olap:request xmlns:olap="http://www.ibm.com/olap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="8.1.2.1.0">;
<describe objectType="cubeModel" recurse="yes">;
<restriction>;
<predicate property="name" operator="=" value="MyCubeModel"/>;
<predicate property="schema" operator="=" value="db2admin"/>;
</restriction>;
</describe>;
</olap:request>;
注意:

· Recurse="yes"让应用程序接口返回Cube模型和所有Cube模型递归调用的对象。

· 注意使用一个指定我们感兴趣的Cube模型的谓词。

创建元数据

有两个操作用于新建元数据:CREATE和IMPORT。当你新建元数据的时候使用CREATE。如果你想创建对象有可能和已有的对象冲突(因为名称相同),那么使用IMPORT。

例子:创建DB2 Cube View中的一些元数据对象

这里是你将使用的操作XML:

<olap:request xmlns:olap="http://www.ibm.com/olap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="8.1.2.1.0">;
<create/>;
</olap:request>;
你将通过第二个参数把XML中的一个或多个元数据对象传到储存过程中。

修改元数据

有两个操作,ALTER和RENAME,用于修改元数据对象。

例子⒈修改一个连接对象

ALTER操作与CREATE相似,除了要传入的元数据对象必须已经存在之外。那些对象将要被新的定义替代。这里是你将使用的操作XML:

<olap:request xmlns:olap="http://www.ibm.com/olap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="8.1.2.1.0">;
<alter/>;
</olap:request>;
对于元数据XML,当我们想要它变化的时候,传入Join对象:

<join name="ProductFamily" schema="db2admin" businessName="ProductFamily"
type="inner" cardinality="n:1">;
<attributeJoin operator="=">;
<leftAttributeRef name="FAMILYID" schema="db2admin"/>;
<rightAttributeRef name="FAMILYID (FAMILY)" schema="db2admin"/>;
</attributeJoin>;
</join>;
例子⒉为一个Cube模型对象改名

假设我们想把一个Cube模型对象从db2admin.SalesModel改名为db2admin.SalesModel(2003)。这里是实现这个操作的XML:

<olap:request xmlns:olap="http://www.ibm.com/olap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="8.1.2.1.0">;
<rename objectType="cubeModel">;
<currentRef name="SalesModel" schema="db2admin"/>;
<newRef name="SalesModel (2003)" schema="db2admin"/>;
</rename>;
</olap:request>;
对于改名,你不需要元数据XML.



网络虽虚拟,技术无边界,来看看大家“真面目”!
2007-9-29 01:223楼
[ 顶部 ]
 
pinglin
新新人类  点击可查看详细



帖子 18
精华 0
无忧币 56
积分 46
阅读权限 20
注册日期 2007-9-29
最后登录 2007-11-9 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-9-29 01:26 
删除元数据

使用DROP操作来删除元数据对象。

例子1:删除所有的元数据对象

要小心这个操作!下面是我们要使用的操作XML:

<olap:request xmlns:olap="http://www.ibm.com/olap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="8.1.2.1.0">;
<drop objectType="all"/>;
</olap:request>;
例子⒉删除一个cube对象和它的关联对象

这里是删除DB2admin.MyCube和它的关联对象的操作XML。

<olap:request xmlns:olap="http://www.ibm.com/olap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="8.1.2.1.0">;
<script>;
<drop objectType="cube">;
<restriction>;
<predicate property="name" operator="=" value="My Cube"/>;
<predicate property="schema" operator="=" value="db2admin"/>;
</restriction>;
</drop>;
<drop objectType="cubeFacts">;
<restriction>;
<predicate property="name" operator="=" value="Cube Facts (My Cube)"/>;
<predicate property="schema" operator="=" value="db2admin"/>;
</restriction>;
</drop>;
<drop objectType="cubeDimension">;<restriction>;
<predicate property="name" operator="=" value="Market (My Cube)"/>;
<predicate property="schema" operator="=" value="db2admin"/>;
</restriction>;</drop>;
<drop objectType="cubeHierarchy">;
<restriction>;<predicate property="name" operator="=" value="Region (My Cube)"/>;
<predicate property="schema" operator="=" value="db2admin"/>;
</restriction>;
</drop>;
</script>;
</olap:request>;
没有元数据XML需要被传入。

排除错误

存储过程中的大部分错误是非常不需加以说明的,虽然你必须习惯用于消息中引用的对象的命名约定。因此,你常常必须非常认真的读这个信息。

下面是一个报告错误的API响应。是当我们试图删除一个不存在的Cube对象(db2admin.My Cube)时返回的信息。(请注意:由于页面的限制,状态消息被分成两行显示。)

<olap:response xmlns:olap="http://www.ibm.com/olap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="8.1.2.1.0">;
<drop>;
<status id="6006" text="No objects were found matching search criteria:
"objectType=CUBE & name=My Cube & schema=db2admin"." type="warning">;
<tokens>;
<text value="objectType=CUBE & name=My Cube & schema=db2admin"/>;
</tokens>;
</status>;
</drop>;
</olap:response>;
跟踪
当一个错误出现的时候,你不清楚为什么应用程序接口会失败,那么常常需要启动应用程序接口跟踪。一般是开启高级跟踪,如果绝对必要的时候也可只开一个中级或者低级跟踪。

为了打开跟踪,象下面显示的这样修改你的配置文件DB2md_config.XML。每个DB2实例都有一个配置文件,你可以在实例目录中找到它。在Windows中,默认的DB2实例被命名为"DB2"并且配置文件可以在sqllib/db2/db2md_config.xml中找到。在下面的XML中,跟踪等级已经被设置为高级别。

<?xml version="1.0" encoding="UTF-8" ?>
<!-- <copyright> -->
<!-- Licensed Materials - Property of IBM -->
<!-- 5724-E15 -->
<!-- (c) Copyright IBM Corp. 2002, 2003 All Rights Reserved. -->
<!-- US Government Users Restricted Rights - Use, duplication or disclosure -->
<!-- restricted by GSA ADP Schedule Contract with IBM Corp. -->
<!-- </copyright> -->
<olap:config xmlns:olap="http://www.ibm.com/olap">
<log>
<trace level="high" logFile="db2mdtrace.log" bufferSize="0"/>
<error level="medium" logFile="db2mderror.log" bufferSize="0"/>
</log>
</olap:config>
注意:不要试图更改跟踪文件的名字。它必须被称作db2mdtrace.log。跟踪文件db2mdtrace.log可以在实例目录中找到。

创建元数据桥

一个元数据桥是一个软件组件或者公用程序,把元数据从一种格式映射到另一种格式。元数据桥被开发,以便在一个第三方业务智能工具或者OLAP工具与DB2 Cube View之间交换元数据。



图1 一个元数据桥

例如,IBM提供了一个DB2 Cube View和IBM DB2 OLAP Server产品之间的桥。更确切地说,这个桥在DB2 Cube View和DB2 OLAP Server上的OLAP Integration Server之间交换元数据。

当设计一个元数据桥的时候,有许多事项需要考虑。我们将更详细地讨论其中的一些问题。

· DB2 Cube View元数据对象模型与其它格式的兼容性/相似性?

· 桥是单向还是双向?

· 每次映射什么级别的元数据?通常,Cube模型或者Cube对象(连同所有被引用的对象一起)是一个桥的来源或者目标。

· 桥支持和管理逐渐增加的元数据变化吗?

· 使用哪种程序设计语言?

· 对于这种程序设计语言,哪些XML语法分析程序有效?

· 当使用DB2 Cube View元数据的时候,桥会调用应用程序接口来读取元数据或者读入一个输出元数据XML文件吗?

· 当产生DB2 Cube View元数据的时候,桥将调用应用程序接口来创建元数据,或者把元数据写入一个XML文件吗?

[ 本帖最后由 pinglin 于 2007-9-29 01:28 编辑 ]



网络虽虚拟,技术无边界,来看看大家“真面目”!
2007-9-29 01:264楼
[ 顶部 ]
 
pinglin
新新人类  点击可查看详细



帖子 18
精华 0
无忧币 56
积分 46
阅读权限 20
注册日期 2007-9-29
最后登录 2007-11-9 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-9-29 01:29 
映射演练

做一个映射演练是设计桥的重要的第一步。做这个演练的设计师或者开发者必须有关于DB2 Cube View元数据对象模型和另一种元数据对象模型的透彻的工作知识。

如表二所示,每个DB2 Cube View对象当做一个映射的时候,都有通用属性需要研究。

表1 DB2 Cube View对象的通用属性


属性      注意
模式      当映射到DB2 Cube View的时候,所有新的对象通常被放入一个模式中。但是Cube View
          对象被允许引用不同的模式中的其它Cube View对象。DB2 Cube View中的每个对象的完
          整名称是它的模式加上它的名称,比如MYSCHEMA.MYATTRIBUTE。模式可以不长于30字节。
名称      每个DB2 Cube View对象类型都有自己的名称空间,除了Attribute和Measures共享相同
          的名称空间。比如,可以有一个Attribute和Join有相同的完整名称。到DB2 Cube View
          的桥通常必须生成目标对象的名称。名称不长于128字节。
业务名称  最大128字节。
注释      最大254字节
构建器    当映射到DB2 Cube View的时候不需要。
构建期    当映射到DB2 Cube View的时候不需要。
修改器    当映射到DB2 Cube View的时候不需要。
修改期    当映射到DB2 Cube View的时候不需要。


DB2 Cube View对象模型必须被研究并且与将要映射的元数据相比较。注意元数据之间的差别可能导致元数据在被映射的时候丢失。如果元数据桥是双向的,那么判断元数据返回时被修改的程度。对于大部分的桥,不建议返回元数据。表3有一些对象类型的注意事项需要牢记。当映射到DB2 Cube View时,输出元数据XML必须有效。它必须在语法上是正确的。桥应该它们输出的DB2 Cube View元数据XML是否符合语法规则,通过验证XML和模式文件db2md_metadata.xsd。此外,输出元数据必须遵守DB2 Cube View指定的所有元数据有效性规则。在DB2 Cube View中,有三级的有效性检查。当映射到DB2 Cube View时,遵守"Base"规则就足够了。一个从DB2 Cube View读取数据的桥可能坚持让元数据服从"Cube Model completeness"元数据规则。请参看用户手册关于DB2 Cube View元数据验证等级的详细资料。

表2 映射不同的对象类型的注意事项


对象类型       映射注意事项
Attribute      SQL表达式模板是最难映射的属性,因为它常常需要分析表达式。此外,一个来自
               DB2 Cube View的桥需要处理引用其它Attributes的Attributes,并且递归遍历所
               有的Attributes以判断用于一个给定的Attribute的最终SQL表达式。当映射到一个
               Attribute的时候,数据类型属性不是必需的;当属性被创建的时候,由DB2 Cube
               View来决定。
Join           Join在映射到DB2 Cube View时被创建,因为它们可以获取构建维度模型和Cube模
               型所需要的结构信息。
Attribute 关系 层次的一部分。在更复杂的Cube模型中可找到。
Measure        和Attribute相同的问题(也就是说,其SQL表达式模板很难映射)。桥在支持很
               复杂的measure时,通常有一些限制。
Facts          带有相同维度的一套Measures。注意需要映射Attribute和Join。
Dimension      当创建Dimension时,确定你包含了所有的Attributes。注意Hierarchy和Join是可
               选项。
Hierarchy      注意Attribute列表是顺序的。注意并不是所有的类型和配置的整合都是被允许的。
               桥有时对可被映射的层次类型有限制。
Cube Model     一个桥可以映射的顶级对象。一个到DB2 Cube View的桥如果可能的话应该创建一个
               Cube Model对象。
Cube (和 Cube   映射为一个Cube Model的一部分。
Facts, Cube
Dimension,
Cube Hierarchy)


使用者或生产者

桥可以要么产生要么使用DB2 Cube View元数据。通常要求一个双向的桥,一个方向在另一个方向之前实现。在这一情况下,我们建议首先了解用于双向的映射,即使只有一个方向的映射被立即实现。通过定义双向的映射,你将保证映射合理且完整。



网络虽虚拟,技术无边界,来看看大家“真面目”!
2007-9-29 01:295楼
[ 顶部 ]
 
pinglin
新新人类  点击可查看详细



帖子 18
精华 0
无忧币 56
积分 46
阅读权限 20
注册日期 2007-9-29
最后登录 2007-11-9 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-9-29 01:30 
映射什么

Cube模型是DB2 Cube View中的高级元数据对象,一般是映射桥的对象。有时一个桥还可以产生或者使用与一个Cube模型相连的Cube对象。

把元数据推进DB2 UDB的桥并不总有足够的信息用来创建一个Cube模型。为了创建一个Cube模型,一个桥通常必须知道哪些表是实际表,哪些表是维度表。如果一个桥没有这些信息,它仍然可以创建象Attribute和Joins这样的简单对象。

渐变

支持递增的元数据变化是用于企业数据仓库环境的桥的一个重要的特性。

所有的Cube View元数据对象都有一个"修改时间",比如在这个对象的XML中的modifyTime ="2003-03-25T09:54:51"。使用这个修改时间来判断哪些元数据对象已经改变。这个应用程序接口不提供查询从某个时间起所有对象是否已经改变的方法,所以你必须读入一组对象,然后分别检查它们的修改时间。

使用ALTER或IMPORT操作应用程序接口,把元数据变化推入DB2中。使用IMPORT操作,你可以判断是否要覆盖已经变化的对象。你还可以在实际执行import之前发现哪些对象有冲突。

程序设计语言

如果映射是从XML到XML的话,那么可以考虑使用XSLT。但是要知道,有时候映射所需的复杂的程序逻辑很难使用XSLT实现。我们知道的大部分桥都是用Java或者C/C++实现的。

XML语法分析程序

一种选择是使用Xerces语法分析程序。 详细信息请参阅 http://xml.apache.org/xerces-c/index.html.

API or XML file

无论是产生还是使用DB2 Cube View XML,一个桥都需要决定是调用应用程序接口还是处理XML文件。两种方法都各有利弊。

使用XML文件的利弊

使用XML文件的优点就是桥可以不依赖DB2 Cube View运行,比如在另一个客户端或者服务器上。使用XML文件的不利之处在于:

· 当使用Cube View XML的时候,你不能保证元数据有效并且和DB2中的关系模式同步。

· 当产生DB2 Cube View XML的时候,你不能保证元数据在稍后能被成功地导入。

使用应用程序接口的利弊

使用应用程序接口的优点是:

· 桥可以使用VALIDATE操作来保证任何从DB2读入的元数据都有效。

· 桥可以通过查询DB2系统目录表读取被引用表的附加信息。

· 桥可以参看DB2中的所有元数据。

应用程序接口的不利之处是,它可能要花很长时间来实现桥,因为你需要添加代码来调用DB2 Cube View应用程序接口。程序需要产生操作XML并且分析响应XML。

实现步骤

下面的是如何成功设计和实现桥的基本步骤。

1. 产生一个设计文件,包含详细的映射。

2. 根据真实的测试情况测试映射,然后根据需要修正设计。

3. 实现桥。

4. 执行对这个桥的严格的质量保证。

经验表明,一个典型的元数据桥工程需要三月以上的时间。一个月用来设计,一个多月用来实现,还有一个月用来测试。建议让客户参与Beta测试。

结论

IBM鼓励业务智能工具和解决方案的开发者能和DB2 UDB的DB2 Cube View特性交互操作。对于许多OLAP工具和应用程序,与DB2 Cube View的整合需要使用基于XML存储过程接口读取或者创建元数据。本文中我们已经看到,在我们对存储过程使用的用于输入输出的XML语法融会贯通之后,这个接口就变得非常容易了。

在我们能够轻松自如的使用这个应用程序接口之后,我们可以进行把DB2 Cube View元数据映射到其它格式的工作。我们还提到了构建用于DB2 Cube View的元数据桥的注意事项。能够映射元数据的桥对于解决方案开发者非常重要,因为一个好的桥将给他们节省很多用于构建和配置解决方案的时间。



网络虽虚拟,技术无边界,来看看大家“真面目”!
2007-9-29 01:306楼
[ 顶部 ]
 
田园
新新人类  点击可查看详细



帖子 10
精华 0
无忧币 4393
积分 30
阅读权限 20
注册日期 2008-2-22
最后登录 2008-4-10 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-4-10 10:21 
good!



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-4-10 10:217楼
[ 顶部 ]
     
论坛跳转:  

| | |

| | |

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号