av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

如何為 DB2 Cube Views 構(gòu)建元數(shù)據(jù)橋

瀏覽:2日期:2023-11-10 14:00:13
DB2 的 DB2 Cube Views 功能通過(guò)共享關(guān)系數(shù)據(jù)庫(kù)和商業(yè)智能應(yīng)用程序之間的多維元數(shù)據(jù),使商業(yè)智能應(yīng)用程序與數(shù)據(jù)倉(cāng)庫(kù)的集成變得更加輕易。了解如何使商業(yè)智能應(yīng)用程序或工具能夠利用這一強(qiáng)大的新功能。本文適用對(duì)象本文的適用對(duì)象是那些希望通過(guò)使用 DB2 Cube Views 應(yīng)用程序編程接口(API)以便在 IBM® DB2® Universal Database™ V8(UDB)上開(kāi)發(fā)或集成 OLAP 應(yīng)用程序的技術(shù)經(jīng)理和技術(shù)人員。該信息尤其適用于那些構(gòu)建組件以在 DB2 Cube Views 和其它工具或元數(shù)據(jù)資源庫(kù)之間交換元數(shù)據(jù)的開(kāi)發(fā)人員。為簡(jiǎn)單起見(jiàn),我們將交換元數(shù)據(jù)的軟件稱為“元數(shù)據(jù)橋或者就是“橋。具備關(guān)系數(shù)據(jù)庫(kù)、倉(cāng)庫(kù)和 OLAP 概念方面的背景知識(shí)將有助于對(duì)本文的理解。簡(jiǎn)介公司和用戶目前日益需要具有分析大型數(shù)據(jù)集以及能夠深入訪問(wèn)和報(bào)告更具體數(shù)據(jù)的能力。象 DB2 UDB 之類高可伸縮性的數(shù)據(jù)庫(kù)服務(wù)器在向企業(yè)交付 OLAP 解決方案中起著日益重要的作用。通過(guò) DB2 Cube Views,DB2 UDB 提供了一個(gè)甚至更健壯的基礎(chǔ)結(jié)構(gòu),這種基礎(chǔ)結(jié)構(gòu)可以在端對(duì)端倉(cāng)庫(kù)和商業(yè)智能部署中起到“重大支撐作用。對(duì)于許多 OLAP 工具和應(yīng)用程序而言,與 DB2 Cube Views 的集成需要構(gòu)建元數(shù)據(jù)橋。這些橋可以通過(guò)使用 DB2 Cube Views 的基于 XML 的存儲(chǔ)過(guò)程接口來(lái)讀取或創(chuàng)建元數(shù)據(jù)。我們將在本文中討論如何使用這個(gè)接口來(lái)構(gòu)建橋。DB2 Cube Views 的概述IBM DB2 Cube Views 是 DB2 通用數(shù)據(jù)庫(kù)的附加功能部件,它增強(qiáng)了 DB2 UDB,使 DB2 UDB 作為開(kāi)發(fā)和部署商業(yè)智能產(chǎn)品和應(yīng)用程序的平臺(tái)。非凡地,DB2 Cube Views 有助于加速位于 DB2 UDB 上的 OLAP 解決方案和應(yīng)用程序的開(kāi)發(fā)和治理。DB2 Cube Views 功能部件是如何做到這一點(diǎn)呢?首先,它答應(yīng) DB2 UDB 支持 OLAP。假如沒(méi)有多維數(shù)據(jù)視圖,關(guān)系數(shù)據(jù)庫(kù)對(duì)于不熟悉數(shù)據(jù)庫(kù)結(jié)構(gòu)和內(nèi)容的人來(lái)說(shuō)似乎是一組令人生畏的帶有一些列的表。DB2 Cube Views 元數(shù)據(jù)使您能夠更完整地記錄 DB2 數(shù)據(jù)庫(kù)中的底層結(jié)構(gòu)。通常,倉(cāng)庫(kù)或數(shù)據(jù)集市是非凡為維分析設(shè)計(jì)的。在這種情況下,數(shù)據(jù)庫(kù)通常由被組織為一個(gè)或多個(gè)星型(或雪花型)模式的表組成。簡(jiǎn)單的星型模式包含一個(gè)事實(shí)表,事實(shí)表四周有一些維表。例如,事實(shí)表可以記錄公司各個(gè)產(chǎn)品和分店每日銷售數(shù)據(jù)。維表(或許是 PRODUCTS 和 STORES 表)可能包含有關(guān)各個(gè)產(chǎn)品和分店的具體信息,并且與事實(shí)表相連接。元數(shù)據(jù)對(duì)象DB2 Cube Views 元數(shù)據(jù)尤其擅長(zhǎng)捕捉星型或雪花型模式中固有的結(jié)構(gòu)(請(qǐng)參閱 圖 1)。該元數(shù)據(jù)通過(guò)一組元數(shù)據(jù)對(duì)象提供關(guān)系數(shù)據(jù)的“空間視圖。元數(shù)據(jù)對(duì)象被劃分為多層,從簡(jiǎn)單對(duì)象(如 Attribute,簡(jiǎn)單的 Attribute 對(duì)表列建模)到更復(fù)雜的對(duì)象(如 Join、Hierarchy、Dimension 和 Cube Model)。完整定義的多維數(shù)據(jù)模型對(duì)象通常符合星型(或雪花型)模式,并對(duì)一組具有公共維數(shù)的度量建模。然后,多維數(shù)據(jù)模型就封裝其它 DB2 Cube Views 元數(shù)據(jù)對(duì)象(如 Dimension 和 Measure),這一點(diǎn)都不希奇。圖 1. 引用關(guān)系星型模式的 DB2 Cube Views 多維數(shù)據(jù)模型如何為 DB2 Cube Views 構(gòu)建元數(shù)據(jù)橋簡(jiǎn)而言之,DB2 Cube Views 元數(shù)據(jù)使您能夠捕捉 DB2 數(shù)據(jù)庫(kù)的多維結(jié)構(gòu)和設(shè)計(jì)。在 IBM DB2 Cube Views Setup and User's Guide 的第 2 章中具體描述了元數(shù)據(jù)對(duì)象。DB2 Cube Views 元數(shù)據(jù)除了使 DB2 支持 OLAP 外,至少還有兩種使用方法:DB2 Cube Views 功能部件利用元數(shù)據(jù)來(lái)優(yōu)化命中 DB2 數(shù)據(jù)庫(kù)的 SQL 查詢。位于 DB2 UDB 之上的產(chǎn)品和應(yīng)用程序可以使用元數(shù)據(jù)。讓我們簡(jiǎn)要地討論一下這兩種用法。將 DB2 Cube Views 元數(shù)據(jù)用于優(yōu)化DB2 Cube Views 通過(guò)創(chuàng)建合適的實(shí)例化的查詢表(materialized query table,MQT)來(lái)加速 SQL 查詢,這些 MQT 中保存了預(yù)先聚集的數(shù)據(jù)。MQT 也稱為(自動(dòng))匯總表。假如可以,DB2 優(yōu)化器會(huì)將 SQL 查詢重新路由給 MQT(請(qǐng)參閱 圖 2)。MQT 通常比底層的基本表(MQT 構(gòu)建于這些基本表之上)小好幾個(gè)數(shù)量級(jí)。因而,對(duì)于同一個(gè) SQL 查詢,將該查詢重新路由給 MQT 這種查詢方法通常比用查詢基本表的方法快得多。DB2 Cube Views 有一個(gè)基于元數(shù)據(jù)和用戶輸入的優(yōu)化顧問(wèn)程序,它推薦一組合適的 MQT。有關(guān)更多信息,請(qǐng)參閱 DB2 Cube Views Setup and User's Guide中有關(guān)優(yōu)化的章節(jié)。圖 2. DB2 優(yōu)化器在適當(dāng)時(shí)將查詢路由到 MQT元數(shù)據(jù)使用者多維數(shù)據(jù)視圖元數(shù)據(jù)還有其它好處。商業(yè)智能工具可以從 DB2 UDB 讀取元數(shù)據(jù)來(lái)了解 DB2 表的維結(jié)構(gòu)。然后,根據(jù)元數(shù)據(jù),這些工具提供處理 DB2 UDB 數(shù)據(jù)的查詢和報(bào)告解決方案。使用 DB2 Cube Views 元數(shù)據(jù)的工具和應(yīng)用程序一般分為兩類:第一類應(yīng)用程序“咬住DB2 Cube Views 。它們通常通過(guò)使用元數(shù)據(jù)來(lái)構(gòu)造 SQL 查詢,以讀取元數(shù)據(jù)并直接用它對(duì) DB2 數(shù)據(jù)庫(kù)進(jìn)行分析。大多數(shù)情況下,這些工具對(duì) DB2 Cube Views 多維數(shù)據(jù)模型和多維數(shù)據(jù)對(duì)象進(jìn)行查詢和報(bào)告。第二類工具使多維數(shù)據(jù)視圖元數(shù)據(jù)從 DB2 流入自己的工具,然后根據(jù)自己的元數(shù)據(jù)查詢 DB2。這些工具必須能夠?qū)?DB2 Cube Views 元數(shù)據(jù)映射到自己的元數(shù)據(jù)。這一映射的復(fù)雜程度取決于元數(shù)據(jù)的相似程度(或相異程度)。元數(shù)據(jù)生產(chǎn)者請(qǐng)注重:并非所有對(duì) DB2 Cube Views 元數(shù)據(jù)感愛(ài)好的應(yīng)用程序都讀取元數(shù)據(jù),這一點(diǎn)也很重要。還有一類工具和應(yīng)用程序產(chǎn)生元數(shù)據(jù)并將它 推入 DB2。維元數(shù)據(jù)通常來(lái)自數(shù)據(jù)庫(kù)設(shè)計(jì)、抽取-轉(zhuǎn)換-裝入(extract-transform-load,ETL)和其它數(shù)據(jù)庫(kù)治理工具。通過(guò)使維元數(shù)據(jù)流入 DB2 UDB,這些工具可以利用先前提到的這些優(yōu)化和治理好處。顯然,為了讀取、創(chuàng)建、修改和刪除元數(shù)據(jù)對(duì)象,工具和應(yīng)用程序需要一種與 DB2 中多維數(shù)據(jù)視圖元數(shù)據(jù)交互的方法。DB2 Cube Views 為此提供了一個(gè) API,我們接下來(lái)將研究它。API — db2info.md_message() 的概述DB2 Cube Views API 是用于訪問(wèn)維元數(shù)據(jù)的接口。它以名為 db2info.md_message() 的 DB2 存儲(chǔ)過(guò)程的方式實(shí)現(xiàn),該存儲(chǔ)過(guò)程為其所有參數(shù)傳入(出)XML 文檔。存儲(chǔ)過(guò)程的優(yōu)點(diǎn)是使該 API 變成與語(yǔ)言無(wú)關(guān)。任何可以與 DB2 交流的編程語(yǔ)言都可以調(diào)用這個(gè)存儲(chǔ)過(guò)程。可以使用嵌入式 SQL 和通過(guò) ODBC 或 JDBC™ 的動(dòng)態(tài) SQL 等。您可以從 DB2 Cube View Setup and User's Guide 的附錄中獲得有關(guān)這個(gè) API 的詳盡描述。在本文中,我們將向您演示幾個(gè)示例:向這個(gè)存儲(chǔ)過(guò)程傳入什么,以及期望從它那兒返回什么,通過(guò)這幾個(gè)示例來(lái)設(shè)法讓您更快地理解該存儲(chǔ)過(guò)程。輸入?yún)?shù)這個(gè)存儲(chǔ)過(guò)程的語(yǔ)法如下:DBINFO.MD_MESSAGE(operation IN, metadata IN/OUT, response OUT)所有參數(shù)都屬于 CLOB 類型。該存儲(chǔ)過(guò)程有兩個(gè)輸入?yún)?shù)。第一參數(shù)是必需的,它指定調(diào)用程序希望執(zhí)行什么操作。這些操作有:DESCRIBECREATEALTERRENAMEDROPIMPORTVALIDATE某些操作(象 CREATE 和 IMPORT)需要通過(guò)第二個(gè)參數(shù)將元數(shù)據(jù)傳入這個(gè)存儲(chǔ)過(guò)程。操作 DESCRIBE 通過(guò)第二個(gè)參數(shù)返回元數(shù)據(jù)。輸出參數(shù)該存儲(chǔ)過(guò)程的第三個(gè)參數(shù)是輸出參數(shù)。對(duì)于對(duì)該存儲(chǔ)過(guò)程的每個(gè)調(diào)用,都會(huì)通過(guò)第三個(gè)參數(shù)返回響應(yīng)文檔。然而,假如發(fā)生某些嚴(yán)重錯(cuò)誤,則不會(huì)創(chuàng)建任何輸出響應(yīng)文檔。解析 XML要使用 API,程序必須構(gòu)造要傳入該存儲(chǔ)過(guò)程的 XML 文檔。還需要解析該存儲(chǔ)過(guò)程所返回的 XML。DB2 Cube Views API 使用的 XML 的語(yǔ)法由隨該產(chǎn)品一起提供的 XSD 模式文件(位于 sqllib/cfg 目錄中)指定。您將使用的 XSD 模式文件如 表 1所示。表 1. 與輸入和輸出參數(shù)相關(guān)聯(lián)的 XSD 文件API 參數(shù) 模式文件 操作和響應(yīng)(第一個(gè)和第三個(gè)參數(shù)) db2md_parameter.xsd 元數(shù)據(jù)(第二個(gè)參數(shù))db2md_metadata.xsd 和db2md_types.xsd 使用 API用于調(diào)用 md_message() 存儲(chǔ)過(guò)程的樣本 C++ 代碼與 DB2 Cube Views 產(chǎn)品一起提供,位于 sqllib/samples/olap/client/db2mdapiclient.cpp 中。關(guān)于用 Java™ 編寫的代碼,下面是使用 JDBC 來(lái)調(diào)用該存儲(chǔ)過(guò)程的樣本代碼片段:/* 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 */Stringsql = "CALL db2info.MD_MESSAGE (?, ?, ?)";Stringresponse= null;StringxmlMetadataResponse = 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;}讀取元數(shù)據(jù)在獲得成功調(diào)用該 API 的一些代碼之后,將需要把注重力放在將正確的 XML 傳遞給該 API,以及能夠解析輸出 XML。大多數(shù)程序?qū)⑿枰ㄟ^(guò)使用 DESCRIBE 操作來(lái)從 DB2 Cube Views 讀取元數(shù)據(jù)。下面是一些示例:示例 1. 讀取所有元數(shù)據(jù)下面是您要使用的操作 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>注:調(diào)用程序和服務(wù)器上的 DB2 存儲(chǔ)過(guò)程之間的版本號(hào)(如 8.1.2.1.0)必須一致。請(qǐng)注重,應(yīng)該將請(qǐng)求標(biāo)記限定為 <olap:request> 。輸出時(shí),第二個(gè)參數(shù)將返回包含元數(shù)據(jù)的 CLOB。通常會(huì)返回許多對(duì)象。假如 DB2 只有一個(gè) Attribute 對(duì)象,那么輸出元數(shù)據(jù) 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>假如成功,響應(yīng)文檔將類似于:<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>示例 2. 獲取特定的多維數(shù)據(jù)模型及相關(guān)對(duì)象下面是您將用來(lái)獲取 db2admin.MyCubeModel 的多維數(shù)據(jù)模型及其相關(guān)對(duì)象的操作 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" 告訴 API 返回多維數(shù)據(jù)模型以及該多維數(shù)據(jù)模型遞歸引用的所有對(duì)象。請(qǐng)注重,謂詞的運(yùn)用,謂詞指定我們感愛(ài)好的多維數(shù)據(jù)模型。創(chuàng)建元數(shù)據(jù)有兩個(gè)用于創(chuàng)建新元數(shù)據(jù)的操作:CREATE 和 IMPORT。在創(chuàng)建新的元數(shù)據(jù)時(shí),使用 CREATE。假如您想要?jiǎng)?chuàng)建的對(duì)象碰巧與現(xiàn)有對(duì)象沖突(因?yàn)槊Q相同),則使用 IMPORT。示例. 在 DB2 Cube Views 中創(chuàng)建一些元數(shù)據(jù)對(duì)象下面是您要使用的操作 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>通過(guò)第二個(gè)參數(shù)以 XML 格式將一個(gè)或多個(gè)元數(shù)據(jù)對(duì)象傳遞給存儲(chǔ)過(guò)程。改變?cè)獢?shù)據(jù)有兩個(gè)用于修改元數(shù)據(jù)對(duì)象的操作:ALTER 和 RENAME。示例 1. 改變連接對(duì)象ALTER 操作類似于 CREATE,但被傳入的元數(shù)據(jù)對(duì)象必須已經(jīng)存在。由新定義的對(duì)象替代原有對(duì)象。下面是您要使用的操作 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>對(duì)于元數(shù)據(jù) XML,傳入我們想讓它成為的 Join 對(duì)象:<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>示例 2. 重命名多維數(shù)據(jù)模型對(duì)象假設(shè)我們想要將多維數(shù)據(jù)模型對(duì)象 db2admin.SalesModel 重命名為 db2admin.SalesModel (2003) 。下面是做到這一點(diǎn)的操作 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>對(duì)于重命名,不需要元數(shù)據(jù) XML。刪除元數(shù)據(jù)用 DROP 操作刪除元數(shù)據(jù)對(duì)象。示例 1:刪除 所有元數(shù)據(jù)對(duì)象執(zhí)行該操作時(shí)必須小心!下面是要使用的操作 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>示例 2. 刪除多維數(shù)據(jù)對(duì)象及其相關(guān)對(duì)象下面是刪除 db2admin.MyCube 及其相關(guān)對(duì)象的操作 XML。請(qǐng)注重,非凡的 <script> 標(biāo)記,它可以在一次 API 調(diào)用中執(zhí)行多次刪除:<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>無(wú)需傳入任何元數(shù)據(jù) XML。調(diào)試錯(cuò)誤盡管您必須習(xí)慣于消息中如何引用對(duì)象的命名約定,但是存儲(chǔ)過(guò)程中的大多數(shù)錯(cuò)誤都相當(dāng)清楚,無(wú)需解釋。正因如此,您經(jīng)常不得不相當(dāng)仔細(xì)地閱讀消息。下面是報(bào)告錯(cuò)誤的 API 響應(yīng)示例。當(dāng)我們?cè)噲D刪除已不存在的 Cube 對(duì)象( db2admin.My Cube )時(shí),會(huì)返回下面的響應(yīng)。( 請(qǐng)注重:由于空間有限,狀態(tài)消息被分成兩行。)<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>跟蹤當(dāng)發(fā)生錯(cuò)誤而您又無(wú)法斷定 API 失敗的原因時(shí),通常有必要打開(kāi) API 跟蹤。從高級(jí)別跟蹤(信息量最少)開(kāi)始,僅當(dāng)絕對(duì)需要時(shí)才打開(kāi)中級(jí)或低級(jí)跟蹤(這些級(jí)別的信息要具體得多)。要打開(kāi)跟蹤,請(qǐng)修改配置文件 db2md_config.xml ,如下所示。每個(gè) DB2 實(shí)例都有一個(gè)這樣的文件,可以在實(shí)例目錄中找到它。在 Windows 上,缺省的 DB2 實(shí)例名為“DB2,可以在 sqllib/DB2/db2md_config.xml 中找到這個(gè)配置文件。在下面的 XML 中,已經(jīng)將跟蹤級(jí)別設(shè)置為 high。<?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>請(qǐng)注重:不要嘗試重命名跟蹤文件。其名稱必須是 db2mdtrace.log 。可以在實(shí)例目錄中找到跟蹤文件 db2mdtrace.log 。創(chuàng)建元數(shù)據(jù)橋元數(shù)據(jù)橋是將元數(shù)據(jù)從一種格式映射成另一種格式的軟件組件或?qū)嵱贸绦颉i_(kāi)發(fā)橋是為了在第三方商業(yè)智能或 OLAP 工具與 DB2 Cube Views 之間交換元數(shù)據(jù)。圖 3. 元數(shù)據(jù)橋例如,IBM 在 DB2 Cube Views 和 IBM DB2 OLAP Server™ 產(chǎn)品之間提供了橋。更準(zhǔn)確地講,橋在 DB2 Cube Views 和 DB2 OLAP Server 的 OLAP 集成服務(wù)器附加功能部件之間交換元數(shù)據(jù)。在規(guī)劃元數(shù)據(jù)橋時(shí),有許多初始考慮事項(xiàng)。我們將更具體地討論其中一些問(wèn)題。DB2 Cube Views 元數(shù)據(jù)對(duì)象模型與其它格式的對(duì)象模型相比,兼容性/相似程度如何?橋應(yīng)該是單向的還是雙向的?同時(shí)可以映射什么高級(jí)別的元數(shù)據(jù)分組?通常,多維數(shù)據(jù)模型或多維數(shù)據(jù)對(duì)象(以及所有引用對(duì)象)是橋的源或目標(biāo)。橋?qū)⒅С植⒅卫碓隽吭獢?shù)據(jù)更改嗎?將使用何種編程語(yǔ)言?該編程語(yǔ)言可以使用哪些 XML 解析器?當(dāng)使用 DB2 Cube Views 元數(shù)據(jù)時(shí),橋?qū)⒄{(diào)用 API 來(lái)讀取元數(shù)據(jù)還是讀取導(dǎo)出的元數(shù)據(jù) XML 文件?當(dāng)產(chǎn)生 DB2 Cube Views 元數(shù)據(jù)時(shí),橋?qū)⒄{(diào)用 API 來(lái)創(chuàng)建元數(shù)據(jù)還是將元數(shù)據(jù)寫入 XML 文件?映射練習(xí)做映射練習(xí)是設(shè)計(jì)橋的首要步驟。做這個(gè)練習(xí)的架構(gòu)設(shè)計(jì)師或開(kāi)發(fā)人員必須通曉 DB2 Cube Views 元數(shù)據(jù)對(duì)象模型和其它元數(shù)據(jù)對(duì)象模型方面的應(yīng)用知識(shí)。我們建議在原型設(shè)計(jì)和實(shí)現(xiàn)工作開(kāi)始之前,仔細(xì)地記錄并復(fù)查映射。如 表 2所示,每個(gè) DB2 Cube Views 對(duì)象在進(jìn)行映射時(shí)都有一些需要考慮的公共特性。表 2. DB2 Cube Views 對(duì)象的公共特性特性 說(shuō)明 模式當(dāng)映射到 DB2 Cube Views 時(shí),所有新對(duì)象通常都被放入單個(gè)模式中。但答應(yīng)多維數(shù)據(jù)視圖對(duì)象引用其它不同模式中的多維數(shù)據(jù)視圖對(duì)象。DB2 Cube Views 中每個(gè)對(duì)象的完整名稱由它的模式和名稱構(gòu)成,如 MYSCHEMA.MYATTRIBUTE 。模式的長(zhǎng)度不超過(guò) 30 個(gè)字節(jié)。 名稱每個(gè) DB2 Cube Views 對(duì)象類型都有自己的名稱空間,除了 Attribute 和 Measure 共享同一個(gè)名稱空間。因此,例如,Attribute 和 Join 可以具有同一個(gè)完整名稱。至 DB2 Cube Views 的橋通常必須生成一些目標(biāo)對(duì)象的名稱。名稱的長(zhǎng)度不超過(guò) 128 個(gè)字節(jié)。 商業(yè)名稱最多 128 個(gè)字節(jié)。注釋最多 254 個(gè)字節(jié)。創(chuàng)建者當(dāng)映射到 DB2 Cube Views 時(shí)不需要。創(chuàng)建時(shí)間當(dāng)映射到 DB2 Cube Views 時(shí)不需要。修改者當(dāng)映射到 DB2 Cube Views 時(shí)不需要。修改時(shí)間當(dāng)映射到 DB2 Cube Views 時(shí)不需要。必須對(duì) DB2 Cube Views 對(duì)象模型進(jìn)行研究,并將它與作為映射目標(biāo)或源的元數(shù)據(jù)進(jìn)行比較。請(qǐng)仔細(xì)地注重元數(shù)據(jù)間的差異,在映射元數(shù)據(jù)時(shí),這些差異會(huì)導(dǎo)致元數(shù)據(jù)丟失。假如橋是雙向的,那么在元數(shù)據(jù)往返時(shí)確定將如何改變?cè)獢?shù)據(jù)。對(duì)于大多數(shù)橋,不推薦使用元數(shù)據(jù)往返,因?yàn)槟罱K會(huì)得到一個(gè)與開(kāi)始時(shí)明顯不同的元數(shù)據(jù)。 表 3 包括一些按對(duì)象類型分需要牢記的說(shuō)明。當(dāng)映射至 DB2 Cube Views 時(shí),輸出元數(shù)據(jù) XML 必須有效。XML 在語(yǔ)法上必須是正確的。橋應(yīng)該通過(guò)依據(jù)模式文件 db2md_metadata.xsd 驗(yàn)證它們輸出的 DB2 Cube Views 元數(shù)據(jù) XML 來(lái)檢查是否格式良好。此外,輸出元數(shù)據(jù)必須遵守 DB2 Cube Views 指定的所有元數(shù)據(jù)驗(yàn)證規(guī)則。在 DB2 Cube Views 中,有三種驗(yàn)證級(jí)別。當(dāng)映射到 DB2 Cube Views 時(shí),遵守“基本規(guī)則就足夠了。從 DB2 Cube Views 進(jìn)行讀取的橋或許想要堅(jiān)持:元數(shù)據(jù)要遵守“多維數(shù)據(jù)模型完整性元數(shù)據(jù)規(guī)則。請(qǐng)參閱 Setup and User's Guide,以獲取有關(guān) DB2 Cube Views 中元數(shù)據(jù)驗(yàn)證級(jí)別的具體信息。表 3. 不同對(duì)象類型的映射說(shuō)明對(duì)象類型 映射說(shuō)明 AttributeSQL 表達(dá)式模板是映射過(guò)程中最難的特性,因?yàn)樗ǔP枰獙?duì)表達(dá)式進(jìn)行解析。另外,始于 DB2 Cube Views 的橋需要處理引用其它 Attribute 的 Attribute,并以遞歸方式遍歷所有 Attribute 來(lái)確定給定 Attribute 的最終 SQL 表達(dá)式。當(dāng)映射為 Attribute 時(shí),不需要數(shù)據(jù)類型特性;當(dāng)創(chuàng)建該 Attribute 時(shí),由 DB2 多維數(shù)據(jù)視圖確定它。 Join當(dāng)映射到 DB2 Cube Views 時(shí)創(chuàng)建 Join 很重要,因?yàn)樗鼈儾蹲綐?gòu)建 Dimension 和 Cube Model 所需的結(jié)構(gòu)信息。Attribute Relationship屬于 Hierarchy 的一部分。可在較復(fù)雜的 Cube Model 中找到它。Measure與 Attribute 的問(wèn)題一樣(即 SQL 表達(dá)式模板的映射很難)。通常,橋?qū)χС质謴?fù)雜的量方面有一些限制。Facts一組具有相同維數(shù)的 Measure。請(qǐng)注重,需要映射可選的 Attribute 和 Join。Dimension當(dāng)創(chuàng)建 Dimension 時(shí),請(qǐng)確保包括了所有的 Attribute。請(qǐng)注重,Hierarchy 和 Join 是可選的。層次結(jié)構(gòu)請(qǐng)注重,Attribute 列表是經(jīng)過(guò)排序的。還要注重,并不答應(yīng)所有的類型和部署的組合。有時(shí)候,橋在可以映射的層次結(jié)構(gòu)類型方面有一些限制。Cube Model它是橋在通常的映射過(guò)程中的最高一層對(duì)象。假如完全可能的話,至 DB2 Cube Views 的橋應(yīng)該創(chuàng)建 Cube Model 對(duì)象。Cube(和 Cube Facts、Cube Dimension、Cube Hierarchy)被映射為 Cube Model 的一部分(假如它有意義的話)。使用者或生產(chǎn)者橋可以產(chǎn)生或使用 DB2 Cube Views 元數(shù)據(jù)。人們經(jīng)常期望橋是雙向的,而且通常先實(shí)現(xiàn)一個(gè)方向,然后再實(shí)現(xiàn)另一個(gè)方向。在這個(gè)實(shí)例中,我們建議先針對(duì) 兩個(gè)方向理解和記錄映射,即使只馬上實(shí)現(xiàn)了一個(gè)方向,也是如此。通過(guò)定義兩個(gè)方向的映射,將有助于確保映射是合理而完整的。映射什么Cube Model 是 DB2 Cube Views 中豐富的元數(shù)據(jù)對(duì)象,它通常是橋進(jìn)行映射過(guò)程中的對(duì)象。有時(shí)候,橋還會(huì)與 Cube Model 一起產(chǎn)生或使用 Cube 對(duì)象。將元數(shù)據(jù)推入 DB2 UDB 的橋并不總是具有足夠的信息來(lái)創(chuàng)建 Cube Model。要?jiǎng)?chuàng)建 Cube Model,橋通常需要知道哪些表是事實(shí)表,哪些表是維表。假如橋沒(méi)有這些信息,那么它仍可以創(chuàng)建象 Attribute 和 Join 之類比較簡(jiǎn)單的對(duì)象,這些對(duì)象仍然要增加值。增量更改支持增量元數(shù)據(jù)更改是橋在企業(yè)倉(cāng)庫(kù)環(huán)境中運(yùn)用的一個(gè)重要特性。所有多維數(shù)據(jù)視圖元數(shù)據(jù)對(duì)象都有一個(gè)“修改時(shí)間,如在對(duì)象的 XML 表示中有 modifyTime="2003-03-25T09:54:51" 。使用這來(lái)確定已經(jīng)更改了哪些元數(shù)據(jù)對(duì)象。API 沒(méi)有提供一種方法來(lái)查詢自某一時(shí)間戳記以來(lái)更改的所有對(duì)象,所以您必須讀取一組對(duì)象,然后檢查每個(gè)對(duì)象的修改時(shí)間。使用這個(gè) API 的 altER 或 IMPORT 操作,將元數(shù)據(jù)更改推入 DB2。通過(guò)使用 IMPORT 操作,可以決定是否要覆蓋已經(jīng)更改的對(duì)象。還可以在實(shí)際執(zhí)行導(dǎo)入之前發(fā)現(xiàn)哪些對(duì)象有沖突。請(qǐng)參閱 Setup and User's Guide中具體描述的 IMPORT“方式。編程語(yǔ)言假如映射是從 XML 到 XML 的映射,則經(jīng)常考慮使用 XSLT。但要知道,有時(shí)候,映射所需的復(fù)雜邏輯難以用 XSLT 實(shí)現(xiàn)。我們所知道的大多數(shù)橋都是用 Java 或 C/C++ 實(shí)現(xiàn)的。XML 解析器可以選擇使用 Xerces 解析器。有關(guān)信息,請(qǐng)參閱 http://xml.apache.org/xerces-c/index.html。API 還是 XML 文件不管是產(chǎn)生還是使用 DB2 Cube Views XML,橋都需要決定是調(diào)用 API 還是處理 XML 文件。這兩種方法各有優(yōu)缺點(diǎn)。使用 XML 文件的優(yōu)缺點(diǎn)使用 XML 文件的優(yōu)點(diǎn)是橋可以獨(dú)立于 DB2 Cube Views 運(yùn)行,如在另一個(gè)客戶機(jī)或服務(wù)器機(jī)器上運(yùn)行。使用 XML 文件的缺點(diǎn)是:當(dāng)使用多維數(shù)據(jù)視圖 XML 時(shí),您不能確保元數(shù)據(jù)是有效的并與 DB2 中的關(guān)系模式同步。當(dāng)產(chǎn)生 DB2 多維數(shù)據(jù)視圖 XML 時(shí),您不能確保稍后可以成功地導(dǎo)入元數(shù)據(jù)。使用 API 的優(yōu)缺點(diǎn)使用 API 的優(yōu)點(diǎn)是:橋可以使用 VALIDATE 操作來(lái)確保它從 DB2 讀取的任何元數(shù)據(jù)都是有效的。橋可以通過(guò)查詢 DB2 系統(tǒng)目錄表來(lái)讀取有關(guān)引用表和列的附加信息。橋可以查看 DB2 中的所有元數(shù)據(jù)。API 的缺點(diǎn)是實(shí)現(xiàn)橋所花的時(shí)間會(huì)較長(zhǎng),因?yàn)槟枰砑哟a來(lái)調(diào)用 DB2 Cube Views API。程序?qū)⑿枰a(chǎn)生操作 XML 并解析響應(yīng) XML。實(shí)現(xiàn)步驟下面是如何成功地設(shè)計(jì)并實(shí)現(xiàn)橋的基本概述:產(chǎn)生一個(gè)設(shè)計(jì)文檔,該文檔包括具體的映射。針對(duì)實(shí)際的測(cè)試案例設(shè)計(jì)原型并測(cè)試映射。根據(jù)需要,修訂設(shè)計(jì)。實(shí)現(xiàn)橋(產(chǎn)品級(jí)代碼)。對(duì)橋執(zhí)行嚴(yán)格的 QA。經(jīng)驗(yàn)告訴我們,典型的橋項(xiàng)目需要三個(gè)以上的人月來(lái)完成。一個(gè)月左右的時(shí)間用于設(shè)計(jì),至少有一個(gè)月的時(shí)間用于實(shí)現(xiàn),測(cè)試大致需要一個(gè)月。建議用戶進(jìn)行 Beta 版測(cè)試。結(jié)束語(yǔ)IBM 鼓勵(lì)商業(yè)智能工具和解決方案的開(kāi)發(fā)人員能夠使他們的產(chǎn)品與 DB2 UDB 的 DB2 Cube Views 功能部件相互操作。對(duì)于許多 OLAP 工具和應(yīng)用程序,與 DB2 Cube Views 的集成需要通過(guò)使用基于 XML 的存儲(chǔ)過(guò)程接口來(lái)讀取或創(chuàng)建元數(shù)據(jù)。正如我們所看到的,在我們熟悉了存儲(chǔ)過(guò)程在輸入和輸出中所使用的 XML 語(yǔ)法之后,該接口就很簡(jiǎn)單了。在我們對(duì) API 感到滿足之后,就可以從事將 DB2 Cube Views 元數(shù)據(jù)映射到其它格式的工作。有關(guān)為 DB2 Cube Views 構(gòu)建元數(shù)據(jù)橋方面,我們已經(jīng)分享了許多應(yīng)牢記的考慮事項(xiàng)。對(duì)元數(shù)據(jù)進(jìn)行合理映射的橋?qū)⑹艿浇鉀Q方案構(gòu)建者的高度贊揚(yáng),因?yàn)橐粋€(gè)好的橋?qū)樗麄児?jié)省構(gòu)建和部署解決方案的時(shí)間。
標(biāo)簽: DB2 數(shù)據(jù)庫(kù)
主站蜘蛛池模板: 大象视频一区二区 | 男女爱爱福利视频 | 99久久免费精品视频 | 亚洲第一福利视频 | 激情 一区 | 日韩免费一区 | 国产视频久久久 | 一区不卡在线观看 | 国产日韩一区二区三区 | 一区精品在线观看 | 国产日韩免费视频 | 免费黄色大片 | 免费欧美 | 国产精品精品视频一区二区三区 | 午夜电影网 | 中文字幕在线一区二区三区 | 欧美aⅴ片 | 成人黄在线观看 | 一区二区三区四区不卡 | 国色天香综合网 | 国产在线精品一区二区三区 | 久久精品小视频 | 久久99精品久久久久久国产越南 | 色视频免费| 久久y| 一本大道久久a久久精二百 欧洲一区二区三区 | 免费一区二区三区 | 亚洲一区二区三区在线免费观看 | 国产精品成人一区二区三区吃奶 | 精品国产一区二区三区日日嗨 | 成人免费视频网站在线观看 | 午夜视频在线观看网址 | 亚洲黄色视屏 | 日本小电影在线 | 在线中文字幕视频 | 欧美9999 | 欧美日韩国产在线观看 | 久久久久国产精品免费免费搜索 | 国产精品视频一二三区 | 视频精品一区二区三区 | 91精品国产91久久综合桃花 |