Greenplum入门篇_Greenplum企业应用实战

2023-03-01 00:00:00 数据 执行 都是 节点 分布

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

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、数值计算函数



其他常用函数
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连接到数据库上,然后通过管道将数据重定向成文件。
————————————————
本文来源:https://blog.csdn.net/weixin_41636030/article/details/106828544

相关文章