2017-01-20 44 views
0

臨時表,我使用的臨時分級表,TempStaging,做一些合併。在一些列主表,MainTable,數據在LZO進行編碼,假設C1。合併輸出返回到MainTable。編碼在紅移

爲了確保TempStaging相同DIST鍵,我用的創建表的創建。由於某些原因,我不能使用Create Table作爲。

所以我應該在編碼列C1到LZO?或者讓它不用編碼? RedShift會將[MainTable中的解碼同時進行解碼,同時寫入TempStaging時進行編碼,同時從TempTable中選擇進行解碼以進行合併,並將其寫入MainTable時再次編碼]

因爲我在考慮如果短路不是發生,我更好的離開編碼,交換一些內存到CPU收益。

-Amit

回答

0

Redshift中的數據在從表AFAIK中讀取時始終解碼。有幾個DB可以直接對壓縮數據進行操作,但Redshift不能。

有關於是否應該在一個臨時表中使用的編碼沒有絕對的規則。這取決於正在寫入多少數據。我發現它與編碼90 +%的時間,這是我的默認方法快。

如您所見,確保臨時表使用相同的遠程密鑰是第一優先級。您可以指定雖然在CREATE TABLE AS的DIST鍵(列編碼):

CREATE TABLE my_new_table 
DISTKEY(my_dist_key_col) 
AS 
SELECT * 
FROM my_old_table 
;