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. Python 爬虫入门实例(爬取小米应用商店的top应用apk)

    一,爬虫是什么? 爬虫就是获取网络上各种资源,数据的一种工具.具体的可以自行百度. 二,如何写简单爬虫 1,获取网页内容 可以通过 Python(3.x) 自带的 urllib,来实现网页内容的下载. ...

  2. Vue的基本认识与使用

    什么是Vue? Vue是一个渐进式的js框架,采用的是MVVM模式的双向绑定, Vue的使用 引入vue        <script src="vuejs/vue.js"& ...

  3. RPC 简单小试

    由于经常被抓取文章内容,在此附上博客文章网址:,偶尔会更新某些出错的数据或文字,建议到我博客地址 :  --> 点击这里 RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器 ...

  4. NOI2019省选模拟赛 第六场

    传送门 又炸了-- \(A\) 唐时月夜 不知道改了什么东西之后就\(A\)掉了\(.jpg\) 首先,题目保证"如果一片子水域曾经被操作过,那么在之后的施法中,这片子水域也一定会被操作&q ...

  5. django rest framework 向数据库中插入数据时处理外键的方法

    一.models.py中 from django.db import models class UserModel(models.Model) user_name = models.CharField ...

  6. MySQL中LOCATE用法

    SELECT LOCATE('q', 'asqdfasdfser') 返回 3 SELECT LOCATE('q', 'asqdfasqdfser',4) 返回 8 SELECT * from  my ...

  7. Microsoft Visual C++ 14.0 is required

    building 'twisted.test.raiser' extensionerror: Microsoft Visual C++ 14.0 is required. Get it with &q ...

  8. iOS ---进阶之摇一摇

    1.摇一摇的原理分析 1)在摇动手机时会产生一个动画,界面的图片会在中间分开分别进行向上.向下的位置移动. 分析:此过程就是在主屏幕上设置两个imageView,在开始摇动的方法中对这两个imageV ...

  9. Echarts【1、数据过多导致显示不全分页,2、数据展示探讨分析】

    var len=<c:out value="${len }"></c:out>; var dataZoom_end=null; //为空默认100%所以默认 ...

  10. Scrum Meeting 汇总

    Alpha [Alpha]Scrum Meeting 0&1 [Alpha]Scrum Meeting 2 [Alpha]Scrum Meeting 3 [Alpha]Scrum Meetin ...