示例:为 CUSTOMER 表选择压缩编码
下面的语句可创建一个包含不同数据类型列的 CUSTOMER 表。此 CREATE TABLE 语句显示了适用于这些列的众多压缩编码可能组合中的一个。
create table customer( custkey int encode delta, custname varchar(30) encode raw, gender varchar(7) encode text255, address varchar(200) encode text255, city varchar(30) encode text255, state char(2) encode raw, zipcode char(5) encode bytedict, start_date date encode delta32k);
下表显示了为 CUSTOMER 表选择的列编码并解释了如此选择的理由:
列 | 数据类型 | 编码 | 说明 |
---|---|---|---|
CUSTKEY | int | 增量 | CUSTKEY 由唯一、连续的整数值组成。差值只是一个字节,因此,DELTA 是很好的选择。 |
CUSTNAME | varchar(30) | raw | CUSTNAME 拥有包含少量重复值的大型域。任何压缩编码可能都无效。 |
GENDER | varchar(7) | text255 | GENDER 是一个包含许多重复值的小型域。Text255 非常适合用于重复出现相同单词的 VARCHAR 列。 |
ADDRESS | varchar(200) | text255 | ADDRESS 是一个大型域,但包含许多重复单词,如 Street Avenue、North、South 等。Text 255 和 text 32k 对于压缩重复出现相同单词的 VARCHAR 列很有用。列长度较短,因此,text255 是很好的选择。 |
CITY | varchar(30) | text255 | CITY 是一个包含部分重复值的大型域。某些城市名称较其他城市名称常用得多。Text255 是很好的选择,理由与 ADDRESS 相同。 |
STATE | char(2) | raw | 在美国,STATE 是一个由 50 个双字符值组成的精确域。Bytedict 编码能够产生一定的压缩效果,但由于列大小只有两个字符,压缩可能还抵不上解压数据产生的开销。 |
ZIPCODE | char(5) | bytedict | ZIPCODE 是由不足 50000 个唯一值组成的已知域。某些邮政编码较其他邮政编码常用得多。当列包含有限数量的唯一值时,Bytedict 编码非常有效。 |
START_DATE | date | delta32k 编码 | 增量编码对于日期时间列非常有用,特别是当行以日期顺序加载时。 |