GP中的table和其它关系型数据表是一样的,除了数据被分布在不同的segment以外。
在建表的时候必须申明分布键distribution policy。

建表需定义下面几个方面:
1. 指定列和数据类型
2. 约束
3. 分布策略
4. 数据存储方式
5. 大表分区策略

------选择列的数据类型------
关于字符类型,gp中CHAR、VARCHAR、TEXT在性能上没有什么差异。但其它数据库系统中char有性能优势。在大多数情况下,可以用CHAR来替代TEXT
或 VARCHAR。
关于数字类型,最好使用最小的数据类型。 用INT or SMALLINT 代替 BIGINT。
当需要跨表做join的时候,需要保证数据类型是一致。 不然的话,gp将做数据类型转换,造成性能消耗。
GP中还包含一些集合数据类型。

------约束------
兼容postgresql,包含:check、not null、unique、primary key
4.1暂不支持Foreign Key

------选择分布策略------
2种方式:
DISTRIBUTED BY (哈希分布)
DISTRIBUTED RANDOMLY(随机分布 Round-Robin)

考虑条件(重要性依次排序)
1. Even Data Distribution
为了得到最好的性能,所有segment的数据量应该是相等的。
如果出现不平衡的话,在查询的时候,数据量多的segment的负载就会很大。
2.Local and Distributed Operations
要做join、sort或aggregation的操作的话,segment-level(segment内部)比system-level(segment之间)要快。

3. Even Query Processing
每个Segment都获得相等的查询请求负载

------表存储方式------
1. Heap 或
Append-Only存储
  
GP默认使用堆表。堆表最好用在小表,如:维表(初始化后经常更新)
  
Append-Only表不能update和delete。一般用来做批量数据导入。 不建议单行插入。
   如:
   
=> CREATE TABLE bar (a int, b text)
      
WITH (appendonly=true)
      
DISTRIBUTED BY (a);
2. Row 或 Column-Oriented
存储
   GP提供存储模式:
行存储、列存储、混合存储
   使用情景说明:
   a.数据需要更新
    
行存储 => 表数据被导入后,如果需要更新的话
   
 列存储 => 只适合append-only表。
   b.经常插入数据
    
行存储 => 如果频繁插入数据
   
 列存储 => 对于写操作没有做优化
(同一行的列值必须写到磁盘的不同位置)
   c.多列查询请求
    
行存储 => 在select或where子句中,查询所有列或大部分列
    
列存储 => 在where或having子句中,查询单列的值汇总或单行过滤
             
如: SELECT AVG(salary)... WHERE salary > 10000
                
 SELECT salary, dept ... WHERE state='CA'
   d.表中许多列
    
行存储 => 同一次请求很多列 或 行数据大小相对较小
   
 列存储 => 使用宽表,查询时候仅仅查少数列
   e.压缩
    
行存储 => 不可用
    
列存储 =>  可用
    
如:(注: 使用列存储必须是append-only表)
    
=> CREATE TABLE bar (a int, b text)
       
WITH (appendonly=true, orientation=column)
      
 DISTRIBUTED BY (a);
3. 使用压缩 (Append-Only表才适用)
   可以数据库内置的压缩(zlib 或
QuickLZ)。如果使用了已压缩的文件系统,建append-only表将不能使用压缩功能。
  
在选择append-only表的压缩类型和级别的时候需考虑一下因素:
   @ CPU的使用率
   @ 压缩率/磁盘大小
   @ 压缩速率
   @ 解压速率/扫描速率
  
  
尽管我们为了减少数据容量大小而使用压缩功能,但是我们必须考虑到数据在压缩与解压的过程中的时间和cpu的消耗。
   压缩的性能取决于硬件、查询调优设置、其它因素。
   QuickLZ -
低压缩率、低cpu消耗、压缩数据块
   zlib - 高压缩率、低速
  
   示例:=> CREATE
TABLE foo (a int, b text)
           
WITH (appendonly=true, compresstype=zlib,
           
compresslevel=5);
    (注:
QuickLZ的压缩级别只有level1,zlib能够设置从1-9)
  

(压缩相关函数)

------修改表结构------
   Alter
Table修改内容:列定义、分布原则、存储模式、分区结构...等等
   具体可以参考官方文档
  
------删除表------
   DROP TABLE mytable;
  
同时删除相关index、rule、trigger和contraints。
   如果要删除相关的view的话,需要加 CASCADE

------清空表------
   DELETE FROM
mytable; 
   TRUNCATE mytable;

引用:http://blog.sina.com.cn/s/blog_90474a9201013gyz.html

Greenplum表定义的更多相关文章

  1. MySQL表定义缓存

    表定义 MySQL的表包含表名,表空间.索引.列.约束等信息,这些表的元数据我们暂且称为表定义信息. 对于InnoDB来说,MySQL在server层和engine层都有表定义信息.server层的表 ...

  2. (转载)根据数据字典表定义的表结构,生成创建表的SQL语句

    <来源网址:http://www.delphifans.com/infoview/Article_221.html>根据数据字典表定义的表结构,生成创建表的SQL语句 //1.  类名:T ...

  3. hbase源码系列(四)数据模型-表定义和列族定义的具体含义

    hbase是一个KeyValue型的数据库,在<hbase实战>描述它的逻辑模型[行键,列族,列限定符,时间版本],物理模型是基于列族的.但实际情况是啥?还是上点代码吧. HTableDe ...

  4. OGG_GoldenGate数据表定义方式DEFGEN(案例)

    2014-03-09 Created By BaoXinjian

  5. hbase shell-ddl(表定义指令)

    hbase表定义指令详细解说篇 1. alter, alter_async, alter_status 2. create 3. describe (可以简写成'desc')  显示某张表的结构情况 ...

  6. MySQL的表定义语法

    表定义 只有成功创建数据库后,才能创建数据表,数据表是字段的集合,在表中数据按行和列的格式存储 创建表 MySQL 使用 CREATE TABLE 创建表.其中有多个选择,主要由表创建定义(creat ...

  7. 十八般武艺玩转GaussDB(DWS)性能调优(三):好味道表定义

    摘要:表结构设计是数据库建模的一个关键环节,表定义好坏直接决定了集群的有效容量以及业务查询性能,本文从产品架构.功能实现以及业务特征的角度阐述在GaussDB(DWS)的中表定义时需要关注的一些关键因 ...

  8. Oracle cmd 导出数据库或者表定义或者纯数据

    实例: expdp zypacs/Sfx371482@zyrisdb schemas=ZYPACS content=metadata_only CONTENT={ALL | DATA_ONLY | M ...

  9. greenplum表的distributed key值查看

    greenplum属于分布式的数据库,MPP+Share nothing的体系,查询的效率很快.不过,这是建立在数据分散均匀的基础上的.如果DK值设置不合理的话,完全有可能出现所有数据落在单个节点上的 ...

随机推荐

  1. 学习css(一)

    font:12px/22px "\5B8B\4F53",Arial, Helvetica, sans-serif font:12px/22px 指 字体大小/字体行高 " ...

  2. asp.net——Base64加密解密

    /// <summary> /// 实现Base64加密解密 /// </summary> public sealed class Base64 { /// <summa ...

  3. 纸壳CMS列表Grid的配置

    纸壳CMS(ZKEACMS)里的Grid是一个TagHelper,是对jQuery插件datatables的一个配置封装. Easy.Mvc.TagHelpers.GridTagHelper grid ...

  4. Mysql修改字段类型

    mysql 修改字段长度 alter table news  modify column title varchar(130); alter table 表名 modify column 字段名 类型 ...

  5. XHTML与HTML、HTML5的区别

    XHTML与HTML最主要的区别 XHTML 元素必须被正确地嵌套. XHTML 元素必须被关闭. XHTML标签名必须用小写字母. XHTML 文档必须拥有根元素. HTML5 HTML5是很有野心 ...

  6. Android TextView 嵌套图片及其点击,TextView 部分文字点击,文字多颜色

    1. TextView 中嵌套图片的方法 TextView textView... textView.setText("..."); textView.append(Html.fr ...

  7. 点击input消除默认背景颜色:focus

    1.在谷歌浏览器会出现默认点击input框黄色背景,如何去除? //消除google浏览器黄色框 input:-webkit-autofill, input:-webkit-autofill:hove ...

  8. 2018年Android面试题含答案--适合中高级(上)

    这些面试题是我在今年年初换工作的时候整理,没有重点.包括java基础,数据结构,网络,Android相关等等.适合中高级工程师.由于内容过多,将会分为上下两部分.下部分跳转链接:http://www. ...

  9. js 正则(自己一点点的笔记)

    alert(/[abc]/.test("c")); //true alert("a bat ,a Cat,a fAt bat ,a faT cat".match ...

  10. 如何在Cordova Android 7.0.0 以下版本集成最新插件 极光插件为例

    前提 Cordova Android 7.0.0开始改变了项目安卓平台的架构.新建一个空项目分别添加Android 6.4.0 和 Android 7.0.0平台: cordova platform ...