簡體   English   中英

ODI:從XML文件加載數據並插入Oracle數據庫

[英]ODI: Load Data from XML file & insert into Oracle Database

我是ODI(Oracle Data Integrator)11g的新手。 我有XML文件。 我需要將數據從該XML文件加載到Oracle數據庫中。 我創建了項目,導入了知識模塊,創建了XML和Oracle模型。

注意:我的XML文件由40多個表格組成。 這是我的界面

我創建了XML和Oracle模型

目前目標數據存儲區僅存儲1個表。

這是我的會話日志: 錯誤信息

編輯

基於注釋,這是加載多個“相同xsd” xml文件的方法。

首先,必須確保所有XML都具有相同的XSD結構,否則可能會遇到奇怪的行為。

要處理多個XML文件,基本上這是您必須要做的:

1)提供一個特定的固定XML名稱,並基於該名稱創建拓撲。 2)創建一個“文件處理控件”以重命名並在讀取之前移動文件。 3)確保您執行正確的“同步”命令

您有XML文件:

/path/in/XML001.XML
/path/in/XML002.XML
/path/in/XML003.XML

將其中一個文件另存為XML_DATA.xml,並在某些“ / work /”路徑中使用XML_DATA.xml設置拓撲,並通過測試驗證其是否良好。

處理一個循環,其中:

1)將/path/in/XML001.XML移至/path/work/XMLDATA.XML(覆蓋或刪除舊的XMLDATA)
2)執行“從文件同步”
3)處理您的界面
4)執行“從數據庫同步”
5)將已處理的XML移至“ / path / processed /”

您的包裹將類似於:

[循環]> [MoveFile]> [ProcedureSync]> [接口]> [ProcedureSync]> [MoveFile]> [EndLoop]

關於Loop控件,有幾種方法可以實現,如果您有疑問,我可以給您發送提示。

希望有幫助!

編輯2

根據新信息,我將嘗試對所提出的問題進行更好的解釋。 這並不是一個艱巨的任務,但是對於仍然了解ODI工具的人來說,聽起來可能很難。

要點是要了解,對於ODI而言,XML文件就像數據庫一樣是數據源,而不是.csv這樣的文件。

  • (Q)如何創建文件處理控件?
  • (A)我所謂的“文件處理控件”是一種簡單的機制,您可以在其中通過文件夾“移動/復制/刪除” XML文件。 您可以使用打包工具OdiFileCopy,OdiFileDelete等來完成此操作。
  • (Q)我對同步命令還不夠了解。 你能給我更多細節嗎?
  • (A)在ODI中使用XML文件時,必須進行同步。 基本上,當ODI使用XML文件時,首先將其加載到內存中。 然后,ODI創建一個.lck文件來鎖定XML文件。 完成打包后,XML文件仍在內存中,因此您需要再次將其“下載”到文件中並釋放鎖,ODI本身不會這樣做。 這是因為您應該能夠在加載過程中運行盡可能多的軟件包,而XML文件仍然可用。 因此,完成后,必須通過運行從數據庫同步命令來通知您不再使用XML。
  • 我應該創建XML技術拓撲還是文件技術拓撲? 或兩者?
  • (A)您無需為File創建拓撲,即可運行包文件工具。 請記住,您必須為“通用”文件創建XML拓撲。 不要將拓撲設置為OM135SVOD180624.xml,而應將其設置為OMDATASOURCE.xml
  • 我需要有關循環控制的更多詳細信息
  • (A)我將做更詳細的描述。 非常不幸的是我現在沒有在這里安裝ODI,否則我也將發布一個示例。 但是我認為這很容易理解。

1)處理XML文件時使用同步的示例。

每當訪問XML文件進行讀寫時,建議按照以下步驟進行操作:

  • 在XML文件的邏輯模式中運行“ SYNCHRONIZE FROM FILE”命令。 您可以通過創建ODI過程,將技術設置為XML,將邏輯模式指向您創建的邏輯模式並在“目標上的命令”窗口中寫入:SYNCHRONIZE FROM FILE來實現。
  • 運行您的ODI軟件包或加載讀取或寫入XML文件的計划。
  • 在XML文件的邏輯模式中運行“ SYNCHRONIZE FROM DATABASE”命令。 您可以通過創建ODI過程,將技術設置為XML,將邏輯模式指向您創建的邏輯模式並在“目標上的命令”窗口中進行寫入來完成此操作:SYNCHRONIZE FROM DATABASE。
  • 此處的完整參考非常容易找到:項目5.6.1.2中的https://docs.oracle.com/cd/E28280_01/integrate.1111/e12644/xml_file.htm#ODIKM534

例: 在此處輸入圖片說明

2)文件處理控制

在“工具包”工具欄中的“包”中,有一個“文件”工具欄,可為您提供許多有用的文件工具,例如復制,刪除,移動,壓縮,解壓縮等。當您需要“控制”工具時,此工具很有用。您正在讀取,重命名等文件

您可以使用這些工具進行一些操作,它們非常易於理解。

3)回路控制

在ODI中,您可以使用包中的變量來開發循環。 有時,您可以僅使用odi過程來處理循環,這取決於您的需求。 根據我所掌握的有關您的上下文的一些信息,建議您首先嘗試使用變量。

因此,這是一個處理5次循環的示例。

1)創建一個數字變量。
2)將其拖到包中並將其值設置為0。
3)再次拖動它,將其配置為評估,將條件設置為等於5。
4)拖動任何具有的“測試”界面。
5)將KO Link鏈接到接口。 使用評估變量時,KO鏈接的行為類似於“假”條件。 在我們的例子中,如果計數器<5,它將指向接口。
6)再次拖動變量,這一次不用設置固定值,而是將增量設置為1。這將為該值加1。
7)將最后一個變量鏈接到評估變量。

因此,它將運行5次測試界面。 我在互聯網上發現一張圖片,說明了這一點:

ODI中的循環示例

您可以在以下位置找到有用的信息:“ https://dzone.com/articles/odi-11g-implementing-loops ”和“ https://blogs.oracle.com/dataintegration/using-variables-in-odi:-creating-包裝中的一個循環 ”。

最終包裝

歸根結底,您的“算法”將如下所示:

1)處理文件夾中文件的循環(這有點棘手,它可能需要一個jython代碼,您可以在此處找到相關的參考資料“ https://blogs.perficient.com/2014/08/01 /通過使用odi /的文件夾中的文件循環

2)將第一個文件移至/work/OMDATASOURCE.xml

3)SYNCHRONIZE FROM DATABASE命令。

4)處理您的界面

5)SYNCHRONIZE FROM FILE命令。

6)將OMDATASOURCE.xml移至“ / processed”或您創​​建的任何其他控件。

7)處理下一個文件。 您可能還希望使用表來控制某些內容,例如讀取的文件,處理的文件等。

8)結束循環(使用我發送的循環控制示例)。

ODI非常靈活且可擴展,您可以通過很多方式來做所有事情。

注意事項

  • 還有其他方法可以做到這一點。 您可以在XML文件的名稱中設置一個變量。 這樣可以避免“移動並重命名”的需要,但是您仍然需要處理路徑中的文件循環,以獲取所需文件的參數,或者至少將它們放在表中以便可以處理循環並更改值。

希望這會有所幫助,

干杯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM