2017-04-05 181 views
0

我是Teradata &的新手幸運的是有機會在DDL-DML兩個語句上工作。最好的方法來更新表中的數據 - Teradata

我觀察到的一件事是當時間到達UPDATE表中的數據具有大量記錄時,Teradata非常緩慢。

我在Google上找到的最簡單的方法來執行此更新是寫一個INSERT-SELECT語句與CASE列保持值更新爲新值。

但是,當這種情況到達Data Warehouse環境時,當我們需要更新一列表中的多列時,會有數百萬行? 哪一個會是最好的方法?

INSERT-SELECT only OR MERGE-UPDATE OR MLOAD

不確定是否有任何上述方法不適用於此UPDATE操作。

預先感謝您!

+0

如果沒有索引可以使用更新需要全表掃描,但通常相當快(只更新主索引或分區列是緩慢的,但無論如何不好的做法)。另外一個巨大的更新可能會導致一個巨大的瞬態Jornal。表格中的行數和更新行的百分比是多少?你的更新如何編碼? – dnoeth

+0

@Dnoeth目前我們在表中有382,851,001#行。但這是每週一次的增量。所以現在我們可以使用INSERT-SELECT方法。但很快,由於空間限制,我們的情況將會失敗。僅供參考,我們有多個專欄用戶,PI&table是專家。通常我們需要更新不是PI的列。 – Aditya

+0

任何二級/聯結指數? MERGE通常比UPDATE更好(可能避免假脫機)。你的更新如何編碼?一個巨大的選擇或源表? – dnoeth

回答

0

在企業級別,我們預計卷將是巨大的,並且更新通常是一些預定作業/腳本的一部分。

由於數據量巨大,更新成爲代價高昂的操作,在更新失敗(由於回退日誌)的情況下,涉及阻塞表一段時間的風險。儘管腳本測試良好,並且在生產環境中很少發生故障,但最好將需要更新的數據以需要的形式加載到臨時表中,並在刪除匹配記錄後插回到同一個表以維護SCD-1(其中我們不保留歷史)。

+0

MLOAD實用程序是否可用於此目的?如果是的話,它會提供更好的表現嗎? – Aditya

+0

正如我們在討論桌面上的更新時,其他負載和導出實用程序移出畫面(快速加載,緊固端口和BTEQ:不適合批量使用)。剩下的是MLoad或TPump。除非和直到更新發生在非常少量的記錄上,否則Mload會在性能上勝過TPump。發生這種情況時TPump性能可能會接近Mload。 Mload在Block級別運行,而TPump在行級別運行。 – appleboy

相關問題