我正在使用临时登台表TempStaging进行一些合并。主表MainTable的某些列中的数据以lzo编码,比如C1。合并输出返回MainTable。
为了确保TempStaging的相同dist键,我使用create table创建它。由于某些原因,我不能使用Create Table作为。
那么我应该将列C1编码为lzo吗?还是不加编码? RedShift会短路[解码时从MainTable中选择,编码时写入TempStaging,解码时从TempTable中选择合并,然后在将其写入MainTable时重新编码]
因为我认为如果没有发生短路,我最好离开编码,将一些内存交给CPU增益。
-Amit
答案 0 :(得分:0)
当从表AFAIK中读取时,Redshift中的数据始终被解码。有一些DB可以直接在压缩数据上运行,但Redshift不能。
对于是否应在临时表中使用编码,没有绝对的规则。这取决于正在写入的数据量。编码90%以上的时间我发现编码速度更快,这是我的默认方法。
如您所知,确保临时表使用相同的dist键是第1优先级。您可以在CREATE TABLE AS
中指定dist键(和列编码):
CREATE TABLE my_new_table
DISTKEY(my_dist_key_col)
AS
SELECT *
FROM my_old_table
;