2016-11-15 83 views
1

我有一個ETL過程將數據加載到目標表A中。我們創建了另一個表B,它與結構 中的目標表相同,並且此表由報告組訪問生成報告。現在,無論何時將數據加載到目標表A中,都會調用存儲過程,將表B重命名爲表Temp,將表B重命名爲Table A,將表A重命名爲Temp。這樣做是爲了儘量減少報告生成的停機時間。表重命名和交換分區之間的區別

這樣報表總是訪問最新的數據。現在我的問題是我可以在表B上創建一個分區,並使用交換分區機制來交換A和分區表B的段。那麼你能告訴我哪一個更好的方法,以及表重命名的交換分區有多不同。

+0

@George它是有可能的兩個分區的目標表和ETL過程加載數據P1和P2到目標表的patition P1,然後使用交換分區,我們可以交換分區P2與分區P1。 P1將用於ETL和P2將用於報告...這種設計是否可能使用Exchange分區機制? – Dex

回答

1

當你重命名錶對象,它是指靜態的對這些表可能會變得無效。所以我寧願使用交換分區。

交換分區方法的另一個好處是,表A和B可以具有不同的補助:A是具有讀取授予最終用戶的目標表,B - 是中間表僅由應用程序訪問。

它們也可以有不同的索引 - B根本不需要索引。

表A可以存儲所有歷史數據(在分區)和B僅保存當前生成的中間數據(非分區)。

+0

我同意,如果我有分區選項,我寧願交換分區,即使分區表只有一個分區。 –

0

我想你必須理解的是,一個表是用一個數據對象合併與一組固有的邏輯元數據(名稱,補助金,等)的目的(以及數據對象的元數據,比如行數和其他統計)。

當您重命名錶時,您可能會修改關於該表名稱字符串解析的對象的所有內容 - 所有表元數據,數據對象及其元數據 - 並且對您的其餘部分具有重要意義系統。您現在指向一個不同的對象。

當你交換分區,你正在改變與表對象相關聯的數據對象。這固有地對系統的其他部分影響較小,因爲表的元數據保持不變,並且您仍然指向相同的邏輯對象。

由於這個原因,我寧願分區交換到表重命名。

p.s.使用這個隱喻,你也可以考慮一個視圖對象在邏輯上與表格對象幾乎相同,因爲它們都有類似的邏輯元數據。該視圖當然沒有數據對象,而是有額外的元數據來定義其底層關係。

物化視圖也喜歡錶,有額外的元數據(類似的觀點),並與刷新的目的額外的元數據。

帶有延遲段創建的表是尚未創建數據對象的表對象。