2009-08-17 18 views
0

假設我有一個自定義文件格式,它可以類似於N個表格。讓我們選擇3.我可以轉換文件,編寫一個自定義加載包裝程序來填充3個數據庫表。如何使用Oracle Preprocessor for External Tables來使用此類格式?

但是假設對於空間和資源的限制,我不能將所有這些存儲在表空間中。

我可以使用Oracle預處理器對外部表格進行三種不同方式的自定義文件轉換嗎?

我讀過的使用示例給出了gzip'd文本文件的示例。但是這是一對一的文件到表的關係,只有一個轉換。

我有一個N個可能的數據提取文件。

  • 我需要定義N個外部表,每個表引用一個不同的程序嗎?
  • 如果我將三張表映射到同一個文件,這將如何影響性能? (訪問主要或全部讀取,很少或不寫入)。

此外,我的預處理器的標準輸出必須是什麼格式?它必須是CSV,還是有辦法配置外部表驅動程序?

+0

「但是,假設對於空間和資源的限制,我無法將所有這些存儲在表空間中。」這個XE是4GB的限制嗎? – 2009-08-18 01:33:30

回答

0

「如果我映射三個表到同 文件,這將如何影響 表現?(Access是大部分或全部 讀取,很少或根本沒有寫」

應該有很少或通過一個外部表定義或三個外部表定義訪問同一文件的三個會話之間沒有區別 數據庫沒有緩存外部表(可能是文件系統或磁盤),所以任何訪問都是純物理讀取。根據預處理器程序的不同,可能會有某種程度的系列(或者你可以使用預處理器程序來強制序列化)。

從性能上看,單次會話掃描外部文件/表並將其加載到一個或多個數據庫表中會更好。其他會話從這裏讀取它並將其緩存在SGA中。另外,您可以索引數據庫表,因此不必全部讀取。

您可能能夠使用multi-table inserts一次性從單個外部表定義中加載多個數據庫表。

「沒有我的預處理器的標準輸出 有什麼格式呢?必須將其 是CSV,還是有方法來配置 外部表的驅動程序?」

它幾乎跟在SQL * Loader,並且都在Utilities manual。您可以使用固定格式或其他分隔符。

我需要定義N外部 表,每個表引用不同的 程序?

取決於數據是如何交錯的。忽略預處理器,可以使用不同的外部表從同一個文件中提取不同的列,或者使用LOAD WHEN子句來確定要包含或排除哪些記錄。

+0

我真的不記得我的用例是什麼,但你當然會深思解決我所有的問題。謝謝! – maxwellb 2015-04-17 19:13:20

相關問題