Greenplum表定义
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表定义的更多相关文章
- MySQL表定义缓存
表定义 MySQL的表包含表名,表空间.索引.列.约束等信息,这些表的元数据我们暂且称为表定义信息. 对于InnoDB来说,MySQL在server层和engine层都有表定义信息.server层的表 ...
- (转载)根据数据字典表定义的表结构,生成创建表的SQL语句
<来源网址:http://www.delphifans.com/infoview/Article_221.html>根据数据字典表定义的表结构,生成创建表的SQL语句 //1. 类名:T ...
- hbase源码系列(四)数据模型-表定义和列族定义的具体含义
hbase是一个KeyValue型的数据库,在<hbase实战>描述它的逻辑模型[行键,列族,列限定符,时间版本],物理模型是基于列族的.但实际情况是啥?还是上点代码吧. HTableDe ...
- OGG_GoldenGate数据表定义方式DEFGEN(案例)
2014-03-09 Created By BaoXinjian
- hbase shell-ddl(表定义指令)
hbase表定义指令详细解说篇 1. alter, alter_async, alter_status 2. create 3. describe (可以简写成'desc') 显示某张表的结构情况 ...
- MySQL的表定义语法
表定义 只有成功创建数据库后,才能创建数据表,数据表是字段的集合,在表中数据按行和列的格式存储 创建表 MySQL 使用 CREATE TABLE 创建表.其中有多个选择,主要由表创建定义(creat ...
- 十八般武艺玩转GaussDB(DWS)性能调优(三):好味道表定义
摘要:表结构设计是数据库建模的一个关键环节,表定义好坏直接决定了集群的有效容量以及业务查询性能,本文从产品架构.功能实现以及业务特征的角度阐述在GaussDB(DWS)的中表定义时需要关注的一些关键因 ...
- Oracle cmd 导出数据库或者表定义或者纯数据
实例: expdp zypacs/Sfx371482@zyrisdb schemas=ZYPACS content=metadata_only CONTENT={ALL | DATA_ONLY | M ...
- greenplum表的distributed key值查看
greenplum属于分布式的数据库,MPP+Share nothing的体系,查询的效率很快.不过,这是建立在数据分散均匀的基础上的.如果DK值设置不合理的话,完全有可能出现所有数据落在单个节点上的 ...
随机推荐
- eayui js动态加载Datagrid,自适应宽度,高度
HTML: <div class="easyui-layout" style="min-height:100%;min-width:100%;"> ...
- MVC控制器中动作方法返回的结果
在MVC控制器中主要的返回方式有如下几种: 1.Content(): 返回文本类型的ContentResult,比如“这是我做的一个MVC”. 2.File(): 返回文件类型的内容FileResul ...
- leetcode 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram" ...
- 用MVC5+EF6+WebApi 做一个小功能(三) 项目搭建
一般一个项目开始之前都会有启动会,需求交底等等,其中会有一个环节,大讲特讲项目的意义,然后取一个高大上的项目名字,咱这是一个小功能谈不上项目,但是名字不能太小气了.好吧,就叫Trump吧.没有任何含义 ...
- Android Performance 性能提升
1. 经常变动的字符串要用 StringBuilder,然后每次变动用 append 方法.而不应该每次创建新的 String. 2. 使用 static final 变量. 3. It's reas ...
- python网络编程--socket,网络协议,TCP
一. 客户端/服务端架构(用到网络通信的地方) 我们使用qq.微信和别人聊天,通过浏览器来浏览页面.看京东的网站,通过优酷.快播(此处只是怀念一下)看片片啥的等等,通过无线打印机来打印一个word文档 ...
- “全栈2019”Java多线程第六章:中断线程interrupt()方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- Substrings(SPOJ8222) (sam(后缀自动机))
You are given a string \(S\) which consists of 250000 lowercase latin letters at most. We define \(F ...
- c++ 多态总结
C++的多态性用一句话概括就是: 在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数. 如果对象类型是派生类,就调用派生类的函数:如果对象类型是 ...
- Groovy学习记录-------Groovy安装/配置
1.Groovy SDK下载 Groovy SDK官网下载地址: http://www.groovy-lang.org/download.html 每个版本有五个选项可供下载,依次为: binary ...