Oracle Data Integrator(ODI)

ODI開發(Oracle Data Integrator)

ODI就是一個導數的工具,用IMP,EXP加個FTP和定時crontab一樣可以實現導數,只不過,odi更加強大,可以實現更多的功能,等你上個項目,當你接口實現不了需求的時候,你就知道要用存儲過程了,odi可以刷新執行,定時執行,不同的庫數據導給同一個庫用來出報表,大致如此,沒有必要扣什麼數據挖掘,除非售前也歸你,向客戶兜售ODI,才需要扯一些什麼數據倉儲,數據挖掘之類的。

 

oracle的數據加載工具,說白了,就是不同庫,或不同用戶下的數據傳輸工具。上網上下載個操作說明,先在本地安裝一個ODI,熟悉熟悉操作就行了。

 主要有三個工具:

1、Topology manager定義物理和邏輯架構,就是配置不同庫的url,sid什麼的。

2、Designer進行數據傳輸的操作(不同庫表數據的傳輸,傳輸方式很多種(牛B之處))

3、Operator查看數據傳輸的結果(傳輸成功,還是失敗,失敗的原因等等)。

 

事實表和維表

事實表和維表多對一的關係。

比如事實表每條記錄對應一次洗衣粉銷售行爲,其中一個字段爲洗衣粉品牌代碼;而維表中保存唯一的品牌和品牌代碼,兩表通過代碼關聯;這樣就可以從品牌的角度對洗衣粉銷售進行分析。

 

其實主要的區別我想是:

事實表是記錄你要分析的東西;

維表是你要用來度量你要分析指標的東西;

就是說一個是對象,一個是尺度。

 

維度:   

多維數據集的一種結構特性,是描述事實數據表中的數據的類別(級別)的有組織的層次結構。這些類別通常描述相似成員的集合,用戶要根據它們進行分析。

 

FS表和F表是怎麼產生的?

不是ODS層導過來的,是自己手動創建的。

 

ETL層中:(ODI相當於一個ETL工具)

         ODS:直接從數據源表導入所有數據

         SDE:產生FS事實表,FS表從其他表中獲取數據,用視圖實現

         SIL:根據FS表和其他與維度相關的表產生F維表

處理完後的數據會形成 DW數據倉庫

 

ODS層接口,主要是完成從各業務源系統到ODS的數據抽取和集成,該過程的原則是儘量保持ODS層的表結構和數據與各業務源系統的表結構和數據一致。

SDE層,是完成從ODS的數據導到數據倉庫DW的表的提前步驟。從ODS的數據到DW前,都會在先加載到SDE層的臨時表,然後在SIL層的時候再導入DW表。

SIL層將數據從SDE臨時表裏加載到DW表,其中事實表在SIL過程中,需要把對應的維度字段轉換成維表生成的代理鍵。

 

(一下過程不涉及SDESIL

創建主資料庫->創建工作資料庫(->創建源數據庫和目標數據庫)->創建數據服務器(在物理體系結構模塊下)->創建物理方案->創建邏輯方案(可單獨創建或者創建物理方案時自動創建)->創建表->創建模型->逆向工程模型->創建項目->導入知識模塊->創建接口->映射、快速編輯、流(上下文Global->執行

 

這其中會涉及到ODI的操作,先由設置物理層和邏輯層,物理層是和數據源的JDBC URL關聯,邏輯層和物理層一一對應其命名一般都保持一致,轉到模型新建模型,每個模型和一個邏輯層關聯,新建反向表,反向表是不含數據的表結構,反向表弄好後轉到項目,新建文件和接口,再就是在關係圖中將源表和目標表映射起來,這些表需要從模型中拖來再在中選擇目標表選擇 IKM SQL control append truncate設爲是。建立好接口後執行接口將數據跑到目標表中。整個過程完成。詳見10GODI\Oracle Data Integrator.doc11GODI\浙江電子口岸BI項目_ODI操作手冊.doc ODI\Oracle__Data_Integrator的使用教程.doc

 

逆向工程的實質就是通過剛纔建立的邏輯和物理方案連接到數據庫,將源表和目標表的表結構等信息(源數據)導入到模型中。

只導入了源表的結構信息,源表數據是怎麼通過執行接口就遷移到了目標數據表中呢???

源表通過邏輯架構遷移到了目標數據表中,一個模型中會有一個對應的邏輯架構

 

通常來說一個接口的遷移過程中,應該至少包含LKMIKM知識模塊,LKM負責將數據從源表裝載至臨時區域,IKM負責將數據從臨時區域再整合進入目標表。

 

增量過濾器

>=TO_DATE('#BI_CLAIM_LAST_EXTRACT_DATE_VAR','YYYY-MM-DD')

WID

一般由對應表的序列的nextval

ODI常見錯誤

1.      缺少某個字段,會提示某個字段不存在

2.      LKM選擇問題修改後刪掉同義詞,會提示數據庫連接出錯(ORA-02019: connection description for remotedatabase not found

3.      FULL表中TRUNCATE屬性設置爲是;FLOW CONTROL設置爲否,否則會在delete previous出錯

4.      name isalready used by an existing object,刪除和表名相同的同義詞     

5.      invalidrelational operator,過濾器裏面缺少條件或者符號(>=

6.      0 : 08S01: com.microsoft.sqlserver.jdbc.SQLServerException:不支持此服務器版本。目標服務器必須是 SQL Server 2000或更高版本。原因是字段爲空?

7.      2287 :42000 : java.sql.SQLException: ORA-02287: sequence number not allowed here

 

8.      936 :42000 : java.sql.SQLException: ORA-00936: missing expression

是因爲缺少主鍵

9.      942 :42000 : java.sql.SQLException: ORA-00942: table or view does not exist

錯誤原因是創建表出錯,找到建表的步驟即找到第二步,查看執行,發現錯誤原因如下

 

10.  當有很大的數據量時將下面策略設置爲NONE可加快速度

 

11.  1747 :42000 : java.sql.SQLException: ORA-01747: invalid user.table.column,table.column, or column specification

IKM的選擇問題

12.  接口執行錯誤

原因是開啓了 FLOW_CONTROL

 

13.      LKM SQL to Oracle 會創建臨時表所以慢,DBlinkto Oracle 不創建臨時表所以快。

 

14.      0 : 08S01 :com.microsoft.sqlserver.jdbc.SQLServerException: 通過端口 1433 連接到主機172.18.84.32 的 TCP/IP 連接失敗。錯誤:“connect timed out。請驗證連接屬性。確保 SQL Server 的實例正在主機上運行,且在此端口接受 TCP/IP 連接,還要確保防火牆沒有阻止到此端口的 TCP 連接。”。

 

原因連接SqlServer數據庫出錯。

15.      911 : 42000 :java.sql.SQLException: ORA-00911: invalid character

KM中多了一個分號,KM每一句不需要分號。

 

16.      1400 : 23000 :java.sql.SQLException: ORA-01400: cannot insert NULL into("EDW"."DW_SUPPLIER_COUNT_F"."SUPPLIER_WID")

籠統上wid不要設置成not null也可能是其他原因造成的

 

17.      12170 : 66000 :java.sql.SQLException: ORA-12170: TNS:Connect timeout occurred

資源被搶佔了

 

發佈了78 篇原創文章 · 獲贊 287 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章