Greenplum管理表

4.3. 管理表
或许你要说create table还要你在这边指手画脚的?其实不然,即使在Oracle里面也还是有很多选项和参数未必都很清楚,何况是换了个不熟悉的gp,所以有必要全新的了解下。
创建表你需要考虑的内容和因素有:字段类型、表或者字段的约束、分布策略、存储策略、表分区等等。
4.3.0. 字段类型
在gp中character类型的char、varchar、text之间在不考虑使用空格填充空白的情况下没有区别,建议使用varchar和text替代char。而数字类型要考虑下类型大小占用的空间问题了,BIGINT类型如果都是填充些INT或者SMALLINT类型的数据的话将会浪费空间。
4.3.1. 约束
字段上,和oracle类似拥有primary、unique、check、not null、foreign约束,只是primary约束有个特殊的就是必须使用hash策略来分布表数据存储,不能在同一个表同时使用主键和唯一约束,并且指定了primary和unique的列必须全部或者部分包含在distributed key中;foreign约束虽然可以定义,但是并不会生效,至少在目前为止没有支持。
4.3.2. 分布策略
gp采用的是分布存放数据的架构,有两种分布方式:distributed by (key),采用的是hash算法,distributed randomly,采用的是随机算法;如果不指定分布策略默认使用hash。
为了尽可能的并行处理数据,需要选择能够最大化地将数据均匀分布到所有seg的策略,比如选择primary key;分布式处理中将会存在本地和分布式协作的操作,当不同的表使用相同的分部键的时候,大部分的排序、连接关联操作工作将会在本地完成,本地操作往往比分布式操作快上5倍,但是采用随机分布的策略无法享受到这个优势。
默认情况下,不指定分布策略将使用hash策略,并且选择primiary key或者第1个column,key不能是几何类型和用户自定义的类型的column,如果没有合适的列那么会采用randomly策略。
4.3.3. blocksize设定
一个参数,可能不会经常用到的:block size介于8192和2097152之间,以byte为单位,即8k到2mb,默认32k。更大的块大小会消耗更多的内存。
4.3.4. 数据存储方式
gp提供了多种的数据存储和组织方式,包括行存储、列存储、行和列混合存储、压缩、只读表等等。
ao表只允许追加数据;列存储只能是ao表;压缩只使用与ao表;
4.3.4.0. heap堆表
最普通的表形式,适合于较小的、经常更新的数据存储方式。
4.3.4.1. append only表
在某些情况下使用ao表存放非结构化的数据可以提高数据查询性能,ao表不允许update和delete操作。
4.3.4.2. row or column oriented行或列表
从以下方面考虑如何选择行或列存储:
如果表数据在载入后必须update,那么不能采用列存储的表,列存储只能适用于ao表;
如果表数据经常insert,还是建议采用行表,因为列表对写入并没有优势,一列的数据必须往磁盘上写入多个地方;
如果表的数据查询经常是选择多个列的查询,建议使用行表,列表还是比较适合聚合查询的场景,比如sum、avg等等;
如果一次查询选择了大部分的列或者行的数据相对小,采用行表,表的列数量如果非常多,那么选择行表是个不错的建议;
因为列表中列的数据都是同一类型的,使用压缩存储可以比行表压缩带来更大的空间节省,带来的问题是在读取数据解压缩的消耗,以及随机访问带来的性能下降,压缩只适用于ao表。
4.3.5. 压缩表
可以基于表和行级别对数据进行压缩,基于列级别的压缩可以指定列和选择不同的压缩算法。压缩和解压数据需要消耗更多的cpu资源,同时不要将数据存储到压缩的文件系统中。压缩数据初衷是出于最小化存储空间,但是cpu消耗和压缩速度同样是重要的考虑因素。
针对不同的组织方式的表有以下算法选择:
行表:可以选择zlib和quicklz算法,zlib有1-9个压缩级别,级别越高压缩比越高
列表:可以选择zlib和quicklz以及rle_type算法,rle_type是4.2.1之后版本新推出的称为运行长度编码的算法,适合于有大量重复的数据记录
quicklz通常比zlib更少的消耗cpu,更快的压缩速度;在zlib压缩级别1的情况之下,两者通常具有相同的压缩比,在级别大于6的情况下,会有更加显著的压缩比。

4.3.5.0. 列级别压缩
只能适用于列存储的表,可以在创建或修改表的语句中指定列压缩命令。
C1 char ENCODING (compresstype=quicklz, blocksize=65536)   
COLUMN C1 ENCODING (compresstype=quicklz, blocksize=65536)
DEFAULT COLUMN ENCODING (compresstype=quicklz)
指定参数的生效优先级如下(从高到底):分区表、分区、列,注意压缩属性不会被继承,如果使用like子句创建的表会忽略列和表级
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值