-
GP数据库文档笔记
-
Greenplum
- 介绍:GP是一种分析性MPP数据库,而非SMP数据库。
- 中文档官网
-
创建和管理表
-
设置字段约束
- 检查约束:CHECK (price > 0)
- 非空约束:NOT NULL
- 唯一约束:UNIQUE
- 主键(=unique和not null的组合):PRIMARY KEY
- 该表必须是哈希分布
- 约束列必须是该表的分布键列
- 不支持外键
-
表分布键
-
列级压缩
-
对大型表分区的依据
,更多内容
- 表是否足够大(几百万或者几十亿的记录)
- 用户是否体验到了不满意的性能
- 用户的查询谓词有没有可识别的访问模式?(比如经常使用日期查找记录,那么按月或者周的日期分区是好的)
- 用户的数据仓库是否维护了一个历史数据的窗口(比如只保留12月数据,则可按分区就行删除最旧的月份分区,并把当前数据载入到最近的月份分区中)
- 数据是否基于某种定义的原则而被划分成差不多相等的部分?(尽可能均匀的分区原则)
-
-
Schema管理
- Schema在每个数据库中是唯一的。每个数据库都一个名为public的默认Schema。
-
使用序列
- 创建字段时:id INT4 DEFAULT nextval(‘id_seq’)
-
视图view
- 视图允许用户保存常用的或者复杂的查询,然后在一个 SELECT语句中把它们当作表来访问。视图在磁盘上并没有被物理存储:当用户访问视图时查询会作为一个子查询运行。
- CREATE VIEW comedies AS SELECT * FROM films WHERE kind = ‘comedy’;
- insert into tablename
- update tablename set
- delete from tablename
- truncate tablename
- VACUUM mytable;虽然新事务看不到被删除或者被更新的数据行,但是它们仍然在磁盘上占用物理空间。周期性地运行VACUUM命令可以移除这些过期的行。
-
事务
- 事务允许用户把多个SQL语句捆绑在一个要么全做要么全不做的操作中。
-
窗函数over()
- row_number():分类唯一编号
- rank():分配排名,可以并列,因此值可能不连续
- dense_rank():可以并列,无跳跃排名,
- precent_rank()
- first_value(c1):select distinct on (label_id) label_id,first_value(label_CODE) over(partition by label_id order by label_value )
- last_value(c1)
- ntile(N):划分成N个桶,4个数据划分3个桶,则值分别为1,1,2,3。
- lead(N)
- lag(id, 1) 和 lead(id, -1)是一样的。
- 提供N偏移量,如果分组数大于N,则N+1开始为null ,不懂哎
- lead(id,1,100)
- cume_dist():值得累积分布
-
SQL命令
-
alter function owner to new_owner
-
alter function rename to new_name
-
alter function set schema new_schema
-
alter table rename to new_name
-
alter table column to new_column
-
alter table set distributed by (col)
-
copy table from
-
insert into table
-
DO:设置临时的过程函数
DO \(DECLARE r record; BEGIN FOR r IN SELECT table_schema, table_name FROM information_schema.tables LOOP END LOOP; END\);
-
-