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層介面,主要是完成從各業務源系統到
SDE層,是完成從ODS的資料導到資料倉庫DW的表的提前步驟。從ODS的資料到DW前,都會在先載入到SDE層的臨時表,然後在SIL層的時候再匯入DW表。
SIL層將資料從SDE臨時表裡載入到DW表,其中事實表在SIL過程中,需要把對應的維度欄位轉換成維表生成的代理鍵。
(一下過程不涉及SDE和SIL)
建立主資料庫->建立工作資料庫(->建立源資料庫和目標資料庫)->建立資料伺服器(在物理體系結構模組下)->建立物理方案->建立邏輯方案(可單獨建立或者建立物理方案時自動建立)->建立表->建立模型->逆向工程模型->建立專案->匯入知識模組->建立介面->對映、快速編輯、流(上下文Global)->執行
這其中會涉及到ODI的操作,先由設定物理層和邏輯層,物理層是和資料來源的JDBC URL關聯,邏輯層和物理層一一對應其命名一般都保持一致,轉到模型新建模型,每個模型和一個邏輯層關聯,新建反向表,反向表是不含資料的表結構,反向表弄好後轉到專案,新建檔案和介面,再就是在關係圖中將源表和目標表對映起來,這些表需要從模型中拖來再在流中選擇目標表選擇 IKM SQL control append 將truncate設為是。建立好介面後執行介面將資料跑到目標表中。整個過程完成。詳見10GODI\Oracle Data Integrator.doc和11GODI\浙江電子口岸BI專案_ODI操作手冊.docODI\Oracle__Data_Integrator的使用教程.doc。
逆向工程的實質就是通過剛才建立的邏輯和物理方案連線到資料庫,將源表和目標表的表結構等資訊(源資料)匯入到模型中。
只匯入了源表的結構資訊,源表資料是怎麼通過執行介面就遷移到了目標資料表中呢???
源表通過邏輯架構遷移到了目標資料表中,一個模型中會有一個對應的邏輯架構
通常來說一個介面的遷移過程中,應該至少包含LKM和IKM知識模組,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
資源被搶佔了