Compression

为什么要做数据压缩

在导入数据时,Redshift可以对列上的数据做压缩,这样有两个好处:1. 减少磁盘空间使用;2. 在查询数据时,减少读取数据的大小,从而提高I/O性能。 而且CPU擅长压缩和解压缩,并不会消耗太多性能

手动指定压缩方式

在执行COPY命令时,Redshift使用ENCODE AUTO压缩方式,它会对所有的列做压缩;如果对某一列指定了压缩方式,则整个表都不再使用ENCODE AUTO方式,它的语法如下:

CREATE TABLE table_name (column_name data_type ENCODE encoding-type)[, ...] 

# 例如
create table product(
product_id int encode raw, # 没有做压缩
product_name char(20) encode bytedict); # 使用bytedict方式压缩

Automatic compression - 自动压缩

在执行自动压缩时,Redshift会在后台执行以下动作:

  1. 加载一部分样例数据(根据COMPROWS参数,默认是100000条)
  2. 为每列选择一个压缩方式
  3. 使用这些压缩方式把数据全部导入