首页 > GreenPlum学习笔记:基础知识

GreenPlum学习笔记:基础知识

一、介绍

  GreenPlum分布式数据仓库,大规模并行计算技术。 

  • 无共享/MPP核心架构

  Greenplum数据库软件将数据平均分布到系统的所有节点服务器上,所以节点存储每张表或表分区的部分行,所有数据加载和查询都是自动在各个节点服务器上并行运行,并且该架构支持扩展到上万个节点。

  • 混合的存储和执行(按列或按行)

  Greenplum发明支持混合按列或按行存储数据,每张表或表分区可以由管理员根据应用需要,分别指定存储和压缩方式。基于这个功能,用户可以对任何表或表分区选择按行或按列存储数据和处理方式。这些是在建表或表分区的DDL语句中配置的,只需在建表或表分区时指定。这个功能基于Greenplum的多态维数据存储技术。

  Master和Segment都是一个单独的PostgreSQL数据库。每一个都有自己单独的一套元数据字典。

  Master节点一般也叫主节点,Segment叫做数据节点。

  为了实现高可用,每个Segment都有对应的备节点 Mirror Segment分别存在与不同的机器上。

  Client一般只能与Master节点进行交互,Client将SQL发给Master,然后Master对SQL进行分析后再将其分配给所有的Segment进行操作。

  Greenplum没有Windows版本,只能安装在类UNIX的操作系统上。

  Greenplumn极度消耗I/O资源,所以对存储的要求比较高。

 

 

  • Master节点:是整个系统的控制中心和对外的服务接入点,它负责接收用户SQL请求,将SQL生成查询计划并进行并行处理优化,然后将查询计划分配(dispatch)到所有的Segment节点进行并行处理,协调组织各个Segment节点按照查询计划一步一步地进行并行处理,最后获取到Segment的计算结果,再返回给客户端;从用户的角度看Greenplum集群,看到的只是Master节点,无需关心集群内部的机制,所有的并行处理都是在Master控制下自动完成的。Master节点一般只有一个或两个(互为备份);
  • Segment节点:是Greenplum执行并行任务的并行运算节点,它接收Master的指令进行MPP并行计算,因此所有Segment节点的计算性能总和就是整个集群的性能,通过增加Segment节点,可以线性化得增加集群的处理性能和存储容量,Segment节点可以是1~10000个节点;
  • Interconnect:是Master节点与Segment节点、Segment节点与Segment节点之间的数据传输组件,它基于千兆交换机或万兆交换机实现数据在节点间的高速传输;
  • 外部数据加载到Greenplum时,采用并行数据流进行加载,直接加载到Segment节点,这项独特的技术是Greenplum的专有技术,以此保证外部数据在最短时间内加载到数据库中。

二、基本语法

 1.create table

  • 在Greenplum中建表时需要指定表的分布键
  • 如果表需要用某个字段分区,可以通过partition by将表建成分区表
  • 可以使用like操作创建与like的表一样结构的表,功能类似 create table t1 as select * from t2 limit 0
  • 可以使用inherits实现表的继承

  Greenplum是一个分布式数据库,有两种数据分布策略:

  • Hash分布:指定一个或多个分布键,计算hash值,并且通过hash值路由到特定的Segment节点上,语法为Distributed by(...)。如果不指定分布键,默认将第一个字段作为分布键。
  • 随机分布:也叫平均分布,数据随机分散在每一个节点中,这样无论数据是什么内容,都可以平均分布在每个节点上,但是在执行SQL的过程中,关联等操作都需要将数据重分布,性能较差。语法为在表字段定义的后面加上Distributed randomly。

2.select

  • 分页采用offset加limit操作
  • select可以不用加from子句
  • 不加order by的话,查询结果顺序是随机的

3.create table as与select into

  • 可以使表根据直接执行select的结果创建出一个新的表,这个在临时分析数据的时候十分方便。
  • select into的语法比create table as更简单,虽然功能一样,但是执行select into不能指定分布键,只能使用默认的分布键。

4.explain

  • 查询表的执行计划

5.insert/update/delete

  • insert的时候分布键不要为空,否则分布键默认会变成null,数据都被保存在一个节点上,造成数据分布不均。
  • 不能批量对分布键执行update,因为对分布键执行update需要将数据重分布,Greenplum暂时不支持这个功能。
  • Greenplum 3.x版本中,如果delete操作涉及子查询,并且子查询的结果还会涉及数据重分布,这样的删除语句会报错。对整张表执行Delete较慢,有此需求时建议使用truncate。

6.truncate

  • 与oracle一样,执行truncate直接删除表的物理文件,然后创建新的数据文件。truncate操作比delete操作在性能上有非常大的提升,当前如果有sql正在操作这张表,那么truncate操作会被锁住,直到表上面的所有锁被释放。

三、常用数据类型

 1.数值类型

  • smallint
  • integer
  • bigint
  • decimal
  • numeric
  • real
  • double
  • serial
  • bigserial

2.字符类型

  • character varying(n)
  • varchar(n)
  • character(n)
  • char(n)
  • text

3.时间类型

  • timestamp
  • interval
  • date
  • time

 四、常用函数

1.字符串函数

  • string || string 字符串连接
select 'abc'||'def'; 
  • length(string) 字符串长度
select length('abcd');
  • position(substring in string) 指定子字符串的位置
select position('ab' in 'foanegabdafeab');
  • substring(string from 2 for 5) 抽取子字符串,从第2位开始,取5位
select substring('abcdefghij' from 2 for 5);
  • trim(leading/trailing/both 'x' from string)从字符串string的开头/结尾/两边删除只包含characters中字符(默认是空白)的最长的字符串
select trim(both 'x' from 'xTomxxx');
  • lower(string) 小写
  • upper(string) 大写
select lower('ADENG'), upper('dfsen');
  • overlay(string placing string from 2 for 4) 替换子字符串
select overlay('Txxxxas' placing 'hom' from 2 for 4);
  • replace(string,from,to) 把字符串string中出现的所有子字符串from替换成子字符串to
select replace('abdadfabadfab','ab','XX');
  • split_part(string,delimiter,field) 根据delimiter分隔string返回生成的第field个子字符串(1开始)
select split_part('abc***def***fff','***',2);

 2.时间函数

  • age(timestamp, timestamp) 减去参数后的”符号化”结果
select age(timestamp '2001-04-10', timestamp '1957-06-13');-- 43 years 9 mons 27 days
  • age(timestamp) 从current_date减去参数中的日期
select age(timestamp '2001-04-10'); -- 17 years 3 mons 27 days
  • current_date 当前的日期
select current_date; -- 2018-08-07
  • current_time 当前时间
select current_time; -- 10:14:27.558098+08
  • current_timestamp 当前事务开始时的时间戳
select current_timestamp; -- 2018-08-07 10:29:22.029703+08
  • date_part(text, timestamp) 获取子域,等同于extract
select date_part('hour', timestamp '2001-02-16 20:34:13')
  • date_trunc(text, timestamp) 截断成指定的精度
select date_trunc('hour', timestamp '2001-02-16 20:34:13')
  • extract(field from timestamp) 获取子域 同date_part
select extract('hour' from timestamp '2001-02-16 20:34:13')
  • now() 当前事务开始的时间戳
select now() -- 2018-08-07 10:35:13.367511+08

  使用interval类型可以直接对事件类型进行计算,用来计算时间的加减

 3.数值计算函数

  • abs 绝对值
  • ceil、ceiling 最小整数
  • exp 自然指数
  • ln 自然对数
  • log 以10为底的对数
  • log(b,x) 以b为底的对数
  • mod(y,x) y/x的余数
  • pi() 派
  • power(a,b) a的b次幂
  • random() 0-1之间的随机数
  • floor() 最大整数
  • round(x,s) s位小数
  • sign(x) 符号化
  • sqrt(x) 平方根
  • cbrt(x) 立方根
  • trunc(x,s) 截断为s位小数

 4.其他常用函数

  • generate_series(x,y,t)

序列号生成函数,生成多行数据从x到y,步长为t,默认是1。

select generate_series(2,20,2);
  • md5、hashbpchar

hash函数

md5的hash算法精度为128位,返回一个字符串

hashbpchar的精度是32位,返回一个integer类型

select hashbpchar('100');
select hashbpchar('helloworld');
  • 分析函数
  • 聚合函数返回各个分组的结果
  • 开窗函数则为每一行返回结果

  rank()、row_number() over(partition by a order by b)

三、注意点

1.缩进风格:必须使用空格,不允许使用【Tab】键。以免在用不同的编辑器阅读程序时,因【Tab】键 所设置的空格数目不同而造成程序布局不整齐;

2.适量换行:避免将复杂的SQL 语句写到同一行,建议要在关键字和谓词处换行。

3.*号规则:避免使用SELECT * 语句;不要用*来代替所有字段,应给出字段列表,以避免在表结构发生变化时应用程序出现无法识别的情况。

4.长度匹配规则:确保变量和参数在类型和长度上与表数据列相匹配。如果与表数据列宽度不匹配,则当较宽或较大的数据传进来时会产生运行异常。


 END 2018-08-02 09:59:53

 

转载于:https://www.cnblogs.com/hider/p/9405415.html

更多相关:

  • select {appearance: none;/*隐藏原生select下拉框的向下箭头▼*/ }...

  • 一、基础1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:mssq...

  • from selenium.webdriver.support.ui import Select Select(d.find_element_by_id(u'key_开户行')).first_selected_option.text 转载于:https://www.cnblogs.com/paisen/p/3669272.html...

  • 我们都知道面试的时候通常都会考数据库部分的知识,所以在此整理了下我们常用的面试中常用的一些查询语句SQL,本人测试数据库为SQL Server2008 首先在数据库中建立一个测试库,此处用DavidTest代替 数据表与相应测试数据 USE [DavidTest] GO /****** Object: Table [dbo].[T...

  • 当一个IT组织开始走到需要实施网络边缘的旅程时,他们很快意识到面对的挑战与他们在传统数据中心内所经历的挑战不同。 第一个挑战是空间。与更大的核心或区域数据中心同类产品相比,许多边缘站点的物理尺寸更小,因此,需要仔细计划好,尝试在未为其专门设计的空间中安装硬件。  第二个挑战是运行环境。还必须解决的可能面对的冷热温度变化 ,天气,无...

  • 单向循环链表单链表的一个变形是单向循环链表, 链表的最后一个节点的next域不再为None, 而是指向链表的头节点.单向循环链表如图所示:单向循环链表同样单向循环链表也是要使用python来对它的基本功能进行一个封装. 总体大致的功能如下:is_empty() 判断链表是否为空length() 返回链表的长度travel() 遍历ad...

  • 题目: 二叉搜索树与双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一...

  • 题目:删除链表的节点 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 返回删除后的链表的头节点。 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为...

  • 【从零开始的ROS四轴机械臂控制】(一)- 实际模型制作、Solidworks文件转urdf与rviz仿真 一、模型制作 1.实际模型制作 2.Solidworks模型制作 二、Solidworks文件转urdf 1.sw_urdf_exporter插件 2.添加坐标系和转轴 3.导出urdf文件 三、rivz仿真...

  • 本文是西门子开放式TCP通信的第2篇,上一篇我们讲了使用西门子1200PLC作为TCP服务器的程序编写,可以点击下方链接阅读:【公众号dotNet工控上位机:thinger_swj】基于Socket访问西门子PLC系列教程(一)在完成上述步骤后,接下来就是编写上位机软件与PLC之间进行通信。上位机UI界面设计如下图所示:从上图可以看出...

  • 我有一个大型数据集,列出了在全国不同地区销售的竞争对手产品。我希望通过使用这些新数据帧名称中的列值的迭代过程,根据区域将该数据帧分成几个其他区域,以便我可以分别处理每个数据帧-例如根据价格对每个地区的信息进行排序,以了解每个地区的市场情况。我给出了以下数据的简化版本:Competitor Region ProductA Product...

  • 作为一名IT从业者,我来回答一下这个问题。首先,对于具有Java编程基础的人来说,学习Python的初期并不会遇到太大的障碍,但是要结合自己的发展规划来制定学习规划,尤其要重视学习方向的选择。Java与Python都是比较典型的全场景编程语言,相比于Java语言来说,当前Python语言在大数据、人工智能领域的应用更为广泛一些,而且大...

  • 这段时间通过学习相关的知识,最大的变化就是看待事物更加喜欢去了解事物后面的本质,碰到问题后解决问题思路也发生了改变。举个具体的例子,我在学习数据分析,将来会考虑从事这方面的工作,需要掌握的相关专业知识这个问题暂且按下不表,那哪些具体的问题是我需要了解的呢,以下简单罗列:1、了解数据分析师这个岗位在各个地区的需求情况?2、数据分析师的薪...

  • 这一节将开始学习python的一个核心数据分析支持库---pandas,它是python数据分析实践与实战的必备高级工具。对于使用 Python 进行数据分析来说,pandas 几乎是无人不知,无人不晓的。今天,我们就来认识认识数据分析界鼎鼎大名的 pandas。目录一. pandas主要数据结构 SeriesDataFrame二...