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. [Elixir005] 查看指定数据的详细信息 i helper

    elixir在1.2后增加了一个新的特性i helper. 在iex shell中使用i可以查看任意数据的数据类型和详细描述 #查看变量描述 iex(1)> i {:test, "Th ...

  2. Buffer Pool--内存总结2

    按内存划分: 1.DATABASE CACHE 用于存放数据页面的缓冲区,8KB每页 2.各项组件 A)数据库连接(CONNECTION) B)通用数据,如果事务上下文,表和索引的元数据 C)执行计划 ...

  3. 解决AttributeError: 'Ui_MainWindow' object has no attribute 'show'报错

    1.首先使用pyqt designer来设计ui界面,将其保存为"***.ui"文件, 然后进入到pyqt所在的文件目录中,执行cmd中命令,即在当前目录中可以生成相应的**.py ...

  4. CheckBox使用记录

    页面显示 页面代码 <div> <div><input type="checkbox" value="" class=" ...

  5. 【OCP题库】最新CUUG OCP 12c 071考试题库(67题)

    67.(25-8)choose the best answer: View the Exhibit and examine the structure of CUSTOMERS table. Eval ...

  6. SpringMvc+ajax 实现json格式数据传递

    传JSON对象 前端 function test () { var param = {username : "yitop"}; $.ajax({ timeout : 20000, ...

  7. 【javascrpt】——图片预览和上传,兼容IE 9-

    下载DEMO:https://github.com/CaptainLiao/zujian/tree/master/Upload 对于现代浏览器来说,要实现图片预览非常简单: 1.fileReader. ...

  8. 分享一些JAVA常用的学习网站

    常用学习网站freecodecamp 一个非常好的网站,教学模式类似游戏中的闯关,通过每关之后会有成就感,在该网站还有设有聊天室,可以进行相关的技术交流,很棒的学习网站. https://www.fr ...

  9. Linux之du命令的使用

    du的用法 du命令用来查看目录或文件所占用磁盘空间的大小.常用选项组合为:du -sh du常用的选项: -h:以人类可读的方式显示 -a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘 ...

  10. 51.RocketMQ 顺序消费

    大部分的员工早上的心情可能不会很好,因为这时想到还有很多事情要做,压力会大点,一般到下午4点左右,状态会是一天中最好的,因为这时大部分的工作做得差不多了,又快要下班了,当然也不是绝对.要注意记录各下属 ...