我正在使用临时临时表TempStaging进行一些合并。主表MainTable的某些列中的数据以lzo格式编码,比如C1。合并输出返回到MainTable。
为了确保TempStaging的dist键相同,我使用create table创建它。由于某些原因,我不能使用Create Table as。
那么,我应该将列C1编码到lzo中吗?或者让它不编码?会不会RedShift在从MainTable中选择时短路解码,在写入TempStaging时编码,在从TempTable中选择时解码进行合并,在将其写入MainTable时重新编码回来
因为我在想,如果短路没有发生,我最好离开编码,用一些内存来换取CPU收益。
-Amit
发布于 2017-01-25 23:48:24
Redshift中的数据总是在从表AFAIK中读取时被解码。有一些数据库可以直接操作压缩数据,但Redshift不能。
对于是否应在临时表中使用编码,没有绝对规则。这取决于正在写入的数据量。我发现用当时的90+%编码速度更快,所以这是我的默认方法。
正如您所注意到的,确保临时表使用相同的dist键是第一要务。但是,您可以在CREATE TABLE AS中指定dist键(和列编码):
CREATE TABLE my_new_table
DISTKEY(my_dist_key_col)
AS
SELECT *
FROM my_old_table
;https://stackoverflow.com/questions/41759015
复制相似问题