2013-05-22 102 views
1

我試圖設計一個Ab Initio加載過程,沒有任何Ab Initio培訓或文檔。是的,我知道。 一個設計決定是:對於傳入的數據文件,將會有插入和更新。 我應該讓供應商將它們分成數據文件(每晚1到10 GB),並讓Ab Initio分別插入和更新?Ab Initio是否支持Oracle Merge語句?

我與看到的一個問題,是數據總不是你希望它是... 什麼和插入的行可能已經存在(也許是清除失敗或飼料供應商犯了一個錯誤) 或更新行心不是現在。

所以我不知道我是否應該只是將所有插入和更新...並使用Oracle MERGE語句 (並行裝載後的數據到一個臨時表中,沒有當然的指數)

但我不不知道AbInitio是否支持合併。

從頭開始的教程或文檔在網上沒有太多...你能指導我什麼好的?

回答

0

我肯定不會依賴源系統來告訴我在目標表中是否存在行。我的直覺說要去並行,不可能(如果可能的話)壓縮(如果可能的話)加載到臨時表中,然後進行合併 - 如果Ab-Initio不支持合併,那麼希望它支持調用PL/SQL過程或直接執行SQL語句。

如果這是一個大量的數據,我想爲新數據集和當前數據集的連接鍵安排散列分區。

+0

你能解釋分區表的優點嗎? (我不是DBA)我很擔心合併步驟的影響。它將合併到正在進行在線流量的表格中。 –

1

您剛剛描述的解決方案(在臨時表中插入並更新,然後合併主表中的內容)是可行的。

一個設計決定是:對於傳入的數據文件會有插入和更新。

我不知道這個決定的背景,但你應該知道這個解決方案會導致更長的執行時間。爲了執行插入和更新,您必須使用比簡單的「輸出表」組件更慢的「更新表」組件。順便說一下,不要同時使用相同的「更新表」組件來插入和更新。爲插入使用單獨的「更新表」,而另一個用於更新(您將以這種方式體驗戲劇性的性能提升)。 (如果您可以更改上述設計決策,請改爲使用「輸出表」)

在任一情況下,將「更新表」/「輸出表」組件設置爲「永不中止」,以便您的圖贏得'如果相同的插入語句出現兩次或者沒有條目進行更新,則失敗。

最後,在完成所有插入和更新的處理時,應該從「運行SQL」組件觸發/執行「oracle merge」語句。使用階段確保它以這種方式發生...

如果您打算構建並行執行的圖形,請確保相同條目的插入和更新語句將由相同的分區處理。 (使用最終表的主鍵作爲「按鍵分區」組件中的鍵。)

如果您想概述在您的雜亂輸入中出現多少重複插入或錯誤更新,請使用相應「更新表」/「輸出表」的「拒絕」(最終爲「錯誤」)端口「組件進一步處理。