Posted by 阳光和鱼 on May 9, 2021
  • GP数据库文档笔记

    • Greenplum

      • 介绍:GP是一种分析性MPP数据库,而非SMP数据库。
      • 中文档官网
    • 创建和管理表

      • 设置字段约束

        • 检查约束:CHECK (price > 0)
        • 非空约束:NOT NULL
        • 唯一约束:UNIQUE
        • 主键(=unique和not null的组合):PRIMARY KEY
          • 该表必须是哈希分布
          • 约束列必须是该表的分布键列
        • 不支持外键
      • 表分布键

      • 列级压缩 Pasted image

      • 对大型表分区的依据

        ,更多内容

        • 表是否足够大(几百万或者几十亿的记录)
        • 用户是否体验到了不满意的性能
        • 用户的查询谓词有没有可识别的访问模式?(比如经常使用日期查找记录,那么按月或者周的日期分区是好的)
        • 用户的数据仓库是否维护了一个历史数据的窗口(比如只保留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 ,不懂哎Pasted image
        • lead(id,1,100) Pasted image
      • 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\);