Greenplum入门篇_Greenplum企业应用实战

Bitmap位图索引:适合只有几个固定值的列;如性别,婚姻状况,它会通过对该列的几个固定值构建出向量,之后在where条件中通过固定值对应的向量返回值
在这里插入图片描述
第二章 greenplum快速入门
在这里插入图片描述
Master主机与segment主机对比
 Master主机
1) 建立与客户端会话连接和管理
2) Sql解析并形成分布式执行计划
3) 将生成好的执行计划分发到每个segment上执行
4) 收集segment执行结果
5) Master不存储业务数据,只存储数据字典
6) Master主机可一主一备,分布在两台机器上
7) 为提高性能,master最好单独占用一台机器
 Segment主机
1) 业务数据存储和存取
2) 执行由master分发的sql语句
3) 对master而言,每个segment都是对等的,负责对应数据的存储和计算
4) 每台机器可配置一到多个segment
5) 由于每个segment都是对等的,建议采用相同的机器配置
6) Segment分primary和mirror两种,一般交错的存放在子节点上

Master和segment都是一个单独的postgreSQL数据库;每一个都有自己单独的一套元数据字典;master节点一般也叫主节点,segment也叫数据节点。

Pg_class每个节点都有,故如果在master上查询pg_class,不用连接segment,所以当segment没有连上master时,不会报错;但是生成分布式执行计划,master需要与segment进行交互,所以此时若一个segment无法连接master时,会报错。

Greenplum数据分布
Greenplum将postegreSQL改成一个分布式数据库,其中,segment节点都是一个单独的postgreSQL数据库,master本身也是一个postegreSQL数据库;
 Master本身不存储数据,所有数据都被拆分保存到每个节点。
 在指定分布键时,数据按分布键的hash值来分布数据,称为哈希分布。
 还有一种分布不指定分布键,数据随机分布到每个节点,称作随机分布(也叫平均分布)

Hash分布:指定一个或多个分布键,计算hash值;如不指定分布键,会默认将第一个字段作为分布键
随机分布:也叫平均分布,数据随机分散在每个节点,无论数据时什么内容,都会平均分布在每个节点上,但在执行sql过程中,关联等操作都要将数据重分布,性能较差。

Greenplum的数据切分放在所有segment上,当从一个表查询数据时,master数据展现顺序是以master先接收到的数据的殊勋,每个segment数据到达master顺序是随机的,不是固定的。

Create table as和select into
Create table as与select into有一样的功能,即都使表直接执行select结果创建出一个新的表;
区别:
Create table as在创建一个表时若默认不指定分布键,则greenplum根据执行select得到的结果集来选择不用再次重分布数据的字段作为表的分布键,另外,它也能指定分布键
 Select into更简单,虽然功能一样,但执行select into不能指定分布键,只能使用默认的分布键

Explain:用来查询一个表的执行计划,在sql优化时会经常用到;执行计划的查看方法是从最右边开始查看。
Ex:
在这里插入图片描述
在这里插入图片描述

Insert, update和delete

  1. Insert:执行insert语句时,要留意分布键不要为空,否则分布键默认会变成null,数据都被保存在一个节点上,造成数据分布不均
    在这里插入图片描述
    2)update:不能批量对分布键执行update,因为对分布键执行update要将数据重分布,而greenplum暂时不支持;换句话说,update不能在分布键上执行
    在这里插入图片描述
    3)delete:若delete操作涉及子查询,且子查询结果还涉及重分布,这样删除语句会报错
    在这里插入图片描述
    若对整张表执行delete比较慢,建议使用truncate;另外,用delete删除数据在master的数据字典上并没有删除,只是被标记删除;故可用vacuum对master里的数据字典进行释放。

Truncate: 执行truncate直接删除表的物理文件,然后创建新的数据文件;truncate比delete操作在性能上有非常大提升,但若有sql正在操作这张表,则truncate会被锁住,直到表上资源释放。

常用数据类型

  1. 数值类型
    在这里插入图片描述
  2. 字符类型
    在这里插入图片描述
  3. 时间类型

在这里插入图片描述
常用函数

  1. 字符串函数
    在这里插入图片描述

  2. 时间函数 在这里插入图片描述在这里插入图片描述
    Interval表示时间间隔的一种数据类型,利用这种数据类型可实现时间的加减,两个时间的时间差就是interval类型

  3. 数值计算函数
    在这里插入图片描述
    在这里插入图片描述

  4. 其他常用函数
    1) 序列号生成函数——generate_series
    生成多行数据,从一个数字(start)到另外一个数字(end)按照一定间隔,默认是1,生成一个结果集。
    在这里插入图片描述
    2)字符串列转行函数——string_agg
    在这里插入图片描述
    3)字符串行转列——regexp_split_to_table
    在这里插入图片描述

2.3.6 分析函数
执行sum,count和avg这类聚集函数时,加不加order by是不同的;不加order by所有结果都一样,都是根据partition by进行聚合而加了order by,则是根据排序的字段递增的。
在这里插入图片描述
在这里插入图片描述

Grouping sets
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.8 外部表
在这里插入图片描述

Gpfdist:greenplum并发加载的工具
外部表:一张表数据指向数据库外的数据文件的;
Greenplum中,我们可对一个外部表执行正常的dml操作,外部表支持在segment上并发地高速从gpfdist导入数据。
注:这里感觉类似sql server里的bulk insert
在这里插入图片描述
在这里插入图片描述

外部表要指定gpfdist的IP和端口,还有详细目录地址。

在创建外部表时可指定分隔符,err表,指定允许出错的数据条数,及源文件的字符编码等

Copy命令(有点类似sql server里的bulk copy
使用copy命令可实现文件导出和导入,不过要通过master,效率没有外部表高,但在数据量比较小时,copy命令比外部表要方便。

如需将数据远程导出到其他机器,可用copy to stdout,远程执行psql连接到数据库上,然后通过管道将数据重定向成文件。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值