GreenPlum-常用数据库命令
greenplum where exists语句

greenplum where exists语句在Greenplum数据库中,WHERE EXISTS 语句用于检查子查询是否返回任何行。
如果子查询返回至少一行结果,则主查询中的条件被认为是满足的。
以下是一个示例,演示了在Greenplum数据库中使用WHERE EXISTS 的基本语法:SELECT column1, column2, ...FROM your_tableWHERE EXISTS (SELECT 1FROM another_tableWHERE condition);在这个例子中,your_table 是主查询中的表,another_table 是子查询中的表,condition 是用于指定匹配条件的表达式。
如果子查询返回任何行,主查询中的条件就被认为是满足的,从而选择相应的行。
请注意,关键是使用 SELECT 1,而不是 SELECT *,因为我们只关心是否存在结果,而不关心具体的列值。
这有助于提高性能,因为它减少了子查询返回的数据量。
以下是一个更具体的示例:SELECT employee_id, employee_nameFROM employeesWHERE EXISTS (SELECT 1FROM projectsWHERE projects.employee_id = employees.employee_id AND projects.status = 'In Progress');在这个例子中,主查询选择了员工表中的某些列,但只有当子查询中的项目表中存在与员工关联的项目,并且项目的状态为'In Progress' 时,才会选择该员工。
greenplum中分区表语法

greenplum中分区表语法摘要:I.简介- 介绍Greenplum 数据库- 介绍分区表的概念和作用II.Greenplum 中分区表的语法- 分区表的定义- 分区表的属性- 分区表的创建语法- 分区表的数据插入、更新和删除语法III.分区表的优化- 分析分区表的性能- 优化分区表的建议IV.总结- 回顾分区表的重要性和作用- 强调分区表的合理使用和优化正文:I.简介Greenplum 是一个高性能、可扩展的大数据处理数据库,广泛应用于海量数据的存储和分析。
分区表是Greenplum 中一种特殊的表,可以根据数据的特性和业务需求将数据进行分区,从而提高查询效率和数据处理的灵活性。
II.Greenplum 中分区表的语法A.分区表的定义分区表是一个包含多个分区的表,每个分区可以包含不同的数据。
分区表使用PARTITION BY 子句定义分区,可以依据一个或多个列对数据进行分区。
B.分区表的属性分区表具有以下属性:1.分区数量:根据业务需求和数据量设定分区的数量。
2.分区方式:根据数据特性和查询需求选择合适的分区方式,如RANGE、LIST 等。
3.分区列:选择一个或多个列作为分区依据。
4.分区边界:指定分区的起始和结束值。
C.分区表的创建语法创建分区表的语法如下:```CREATE TABLE table_name (column1 data_type,column2 data_type,...)PARTITION BY (column_name data_type)(PARTITION partition_name VALUES LESS THAN (value1) TABLESPACE tablespace_name;PARTITION partition_name VALUES LESS THAN (value2) TABLESPACE tablespace_name;...);```D.分区表的数据插入、更新和删除语法1.插入数据:使用INSERT INTO 语句插入数据。
greenplum数据字典

greenplum是基于postgresql开发的分布式数据库,里面大部分的数据字典是一样的。
我们在维护gp的时候对gp的数据字典比较熟悉,特此分享给大家。
在这里不会详细介绍每个字典的内容,只会介绍常见的应用以及一些已经封装好了的函数。
具体的介绍大家可以去看postgresql的中文文档,里面有详细的解释。
1.postgresql中,所有数据库的对象都是用oid连接在一起的。
这样子会造成我们在理解数据字典的时候有一些不知所措。
下面介绍几个函数,可以简化很多的操作。
最常用的是regclass,关联数据字典的oid,使用方法如下:aligputf8=# select 1259::regclass;regclass———-pg_class(1 row)aligputf8=# select oid,relname from pg_class where oid=’pg_class’::regclass;oid | relname——+———-1259 | pg_class(1 row)这样子就可以通过regclass寻找一个表的信息,就不用去关联 pg_class跟pg_namespace(记录schema信息)了。
比较方便。
同样的,其他几个类型也是一样的用法,如regproc(regprocedure)是跟pg_proc(保存普通函数的命令)关联的。
regoper(regoperator)是跟pg_operator(操作符)的oid关联的。
Eg:aligputf8=# select oid::regoper,oid::regoperator,oid,oprname from pg_operator limit 1;oid | oid | oid | oprname————–+——————-+—–+———pg_catalog.= | =(integer,bigint) | 15 | =(1 row)aligputf8=# select oid::regproc,oid::regprocedure,oid,proname from pg_proc limit 1;oid | oid | oid | proname——–+—————–+——+———boolin | boolin(cstring) | 1242 | boolin(1 row)下面给给出如何使用regclass的例子。
greenplum regexp_replace用法

Greenplum 数据库的`regexp_replace` 函数是一个非常有用的工具,用于在字符串中执行正则表达式匹配,并将匹配的结果替换为新的字符串。
这个函数在数据清洗和文本处理中特别有用。
`regexp_replace` 函数的语法如下:```sqlregexp_replace(string, pattern, replacement [, flags])```* `string`:要进行处理的字符串。
* `pattern`:正则表达式模式,用于匹配要替换的字符串部分。
* `replacement`:替换匹配部分的字符串。
* `flags`(可选):控制匹配行为的标志。
可用的标志包括:+ `i`:执行不区分大小写的匹配。
+ `c`:执行区分大小写的匹配。
+ `n`:点号(.)不匹配换行符。
+ `m`:执行多行模式匹配。
+ `x`:启用扩展模式,忽略正则表达式中的空白字符。
这里有一些使用`regexp_replace` 的例子:1. 将字符串中的所有"apple" 替换为"orange":```sqlSELECT regexp_replace('I like apple pie.', 'apple', 'orange');```输出结果为'I like orange pie.'2. 使用不区分大小写的替换:```sqlSELECT regexp_replace('I LIKE APPLES AND BANANAS.', 'apple','orange', 'i');```输出结果为'I LIKE ORANGES AND BANANAS.'3. 使用多行模式替换:```sqlSELECT regexp_replace('apple\nbanana\neggplant', 'a', 'o', 'm');```输出结果为'ooloo\nbonono\neggplot',注意"banana" 的第一个字母没有改变。
greenplumn数据库查询语句示例

一、介绍Greenplumn是一个并行化的关系数据库管理系统,它是PostgreSQL的一个扩展,可以用于处理大规模数据。
在Greenplumn数据库中,我们可以通过SQL语句来进行数据查询和操作。
下面将通过示例介绍一些常用的Greenplumn数据库查询语句。
二、SELECT语句示例1. 查询所有数据```sqlSELECT * FROM table_name;```以上语句将返回table_name表中的所有数据。
2. 查询指定字段数据```sqlSELECT column1, column2 FROM table_name;```以上语句将返回table_name表中的column1和column2字段的数据。
3. 查询并排序```sqlSELECT * FROM table_name ORDER BY column_name DESC; ```以上语句将返回table_name表中的所有数据,并按照column_name字段降序排序。
4. 查询并限制结果集```sqlSELECT * FROM table_name LIMIT 10;```以上语句将返回table_name表中的前10条数据。
5. 使用聚合函数```sqlSELECT COUNT(column_name) FROM table_name;```以上语句将返回table_name表中column_name字段的数量。
三、INSERT语句示例1. 插入单行数据```sqlINSERT INTO table_name (column1, column2) VALUES (value1,value2);```以上语句将在table_name表中插入一行数据,值为value1和value2。
2. 插入多行数据```sqlINSERT INTO table_name (column1, column2) VALUES (value1, value2), (value3, value4), (value5, value6);```以上语句将在table_name表中插入多行数据。
Greenplum常用命令、函数

Greenplum常⽤命令、函数Greenplum常⽤查询命令#查看test_bd事务(即数据库)下的所有表名包含 user 的表信息SELECT UPPER(A.SCHEMANAME) AS SCHEMANAME, UPPER(A.TABLENAME) AS TABLENAME,D.ATTRELID,D.ATTRELID :: regclass,UPPER(D.ATTNAME) AS ATTNAME,REPLACE(REPLACE(REPLACE(FORMAT_TYPE(D.ATTTYPID, D.ATTTYPMOD),'numeric','NUMBER'),'character varying','VARCHAR2'),'date','DATE') AS DATA_TYPE,E.DESCRIPTIONFROM PG_TABLES AS AINNER JOIN PG_CLASS AS B ON A.TABLENAME = B.RELNAMELEFT JOIN PG_CATALOG.PG_DESCRIPTION AS E ON B.OID = E.OBJOIDLEFT JOIN PG_CATALOG.PG_ATTRIBUTE AS D ON D.ATTRELID = E.OBJOID AND D.ATTNUM = E.OBJSUBIDWHERE SCHEMANAME ='test_bd'AND A.TABLENAME LIKE'%user%'AND D.ATTNUM >0ORDER BY A .TABLENAME,D.ATTNUM select pg_size_pretty(pg_database_size('gp_db')); #查看gp数据库⼤⼩ select gp_segment_id,count(*) from db_name.tb_name group by gp_segment_id; #查看数据分布情况1.创建数据库 createdb test_db;2.删除数据库 dropdb test_db;3.创建模式 create schema myschema;4.删除模式 drop schema myschema;5.创建⽤户 create user user_name with password '123456' ;6.删除⽤户 drop user user_name;7.查看系统⽤户信息 select usename from pg_user;8.查看版本信息 select version();9.打开psql交互⼯具 psql name_db;10.执⾏sql⽂件 mydb=> \i basics.sql \i 命令从指定的⽂件中读取命令。
greenplum hint用法

greenplum hint用法Greenplum是一种基于PostgreSQL的分布式数据库管理系统,它可以在多个节点上同时处理数据,从而加快了数据的处理速度。
而在Greenplum中,我们可以使用hint来优化我们的查询操作,使Greenplum更好地利用集群资源,提高整个集群的查询效率。
什么是hint?hint是一种在Greenplum中可以使用的调优技巧,它的作用是告诉Greenplum如何执行查询来达到更好的性能。
我们可以在SQL语句中加入特殊的注释来指定hint,从而改变Greenplum执行查询的方式。
Greenplum支持两种hint类型:Query Hints和Plan Hints。
Query HintsQuery Hints是指那些在查询语句中添加的注释,它可以改变Greenplum中查询语句的优化策略和执行计划。
以下是一些常用的Query Hints:1. /*+ MAx(variant=hash) */:使用hash join算法连接表变体。
2. /*+set_dop(4) */:指定查询的并行度为4。
3. /*+ gathered */:强制Greenplum在执行聚合函数之前将所有数据收集到单个节点上,以便在单个节点上执行聚合函数。
4. /* nolimit */:不限制查询结果的行数。
Plan Hints1. SET OPTIMIZER = ON:启用查询优化器。
使用hint的三个原则在使用hint之前,我们需要了解以下三个原则:1. 尽量不使用hinthint虽然可以提高查询性能,但是它更像是一种紧急情况下的解决方案。
出现性能问题时,我们应该首先通过SQL优化器尝试解决问题,而不是使用hint。
2. 只在性能瓶颈出现时使用hint如果查询速度有问题,我们应该先使用Greenplum自带的性能分析工具进行诊断,找出瓶颈所在的地方。
如果瓶颈确实在查询语句上,再考虑使用hint优化。
gp简易维护

Greenplum 日常简明维护手册1. 数据库启动:gpstart 提示选择Y…常用参数: -a : 直接启动,不提示终端用户输入确认-q : 不希望屏幕输出-m:只启动master 实例,主要在故障处理时使用-R:只启动数据库在受限模式,禁止非超级用户登陆.-y:启动数据,但不启动standby启动完毕可使用gpstate查看数据库状态2. 数据库停止:gpstop 提示选择Y…常用参数:-a:直接停止,不提示终端用户输入确认-m:只停止master 实例,与gpstart –m 对应使用-f(-m faster):停止数据库,中断所有数据库连接,回滚正在运行的事务-u:不停止数据库,只加载pg_hba.conf 和postgresql.conf中运行时参数,当改动参数配置时候使用。
关闭完毕后可使用gpssh控制所有服务器查看postgres进程是否已经都不存在,下面命令显示为1则表明数据库所有进程已经关闭完毕.gpadmin@dsszbyz-dw6-mst01:~> gpssh -f host_all=> ps -ef|grep postgres |wc -l[ sdw1] 1[sdw2] 1[ mdw] 1[ sdw3] 1[ smdw] 1[ sdw4] 1[ ftp1] 1=>exit3. 登陆数据库:psql登录数据库方式:psql –d 数据库名–u 用户名可以先使用psql -d template1登陆默认实例,然后使用select * from pg_database;查看已经安装的数据库名,然后登陆相应数据库。
退出psql 使用\q.使用应用模式访问单个数据实例():PGOPTIONS='-c gp_session_role=utility' psql template1 -p 54324. 查看实例配置和状态:gpstate常用参数:-c:显示primary instance和mirror instance的对应关系-m:显示mirror的状态-f:显示standby的状态(是否配置,是否同步)-e:显示错误节点的详细信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Greenplum 日常简明维护手册1.数据库启动:gpstart常用参数:-a : 直接启动,不提示终端用户输入确认-m:只启动master 实例,主要在故障处理时使用访问单个数据实例:PGOPTIONS='-c gp_session_role=utility' psql template1 -p 5432启动某个segment instance :pg_ctl stop/start -D /datadir/取端口号:select * from gp_segment_configuration启动以后会在/tmp/ 下生成一个.lock 隐藏文件,记录主进程号。
2.数据库停止:gpstop:常用可选参数:-a:直接停止,不提示终端用户输入确认-m:只停止master 实例,与gpstart –m 对应使用-f:停止数据库,中断所有数据库连接,回滚正在运行的事务-u:不停止数据库,只加载pg_hba.conf 和postgresql.conf中运行时参数,当改动参数配置时候使用。
连接数,重启3.查看实例配置和状态select * from gp_segment_configuration order by content ;select * from pg_ ;主要字段说明:Content:该字段相等的两个实例,是一对P(primary instance)和M(mirror Instance)Isprimary:实例是否作为primary instance 运行Valid:实例是否有效,如处于false 状态,则说明该实例已经down 掉。
Port:实例运行的端口Datadir:实例对应的数据目录4.gpstate :显示Greenplum数据库运行状态,详细配置等信息常用可选参数:-c:primary instance 和mirror instance 的对应关系-m:只列出mirror 实例的状态和配置信息-f:显示standby master 的详细信息该命令默认列出数据库运行状态汇总信息,常用于日常巡检。
5.查看用户会话和提交的查询等信息select * from pg_stat_activity 该表能查看到当前数据库连接的IP 地址,用户名,提交的查询等。
另外也可以在master 主机上查看进程,对每个客户端连接,master 都会创建一个进程。
ps -ef |grep -i postgres |grep -i con杀进程:Linux:kill -11 PIDSql :pg_cancel_backend(pid)ps –ef |grep – i postgre |grep –i con6.查看数据库、表占用空间查询表大小:select pg_size_pretty(pg_relation_size('schema.tablename'));例: select pg_size_pretty(pg_relation_size('iidp_code.cf_load_state'));表和索引select pg_size_pretty(pg_total_relation_size('iidp_code.cf_load_state '));查询数据库大小select pg_size_pretty(pg_database_size('databasename'));例:select pg_size_pretty(pg_database_size('BDDJ_S_T'));--单个库select datname,pg_size_pretty(pg_database_size(datname)) from pg_database; --所有库分区表:Select *from pg_partitions where …查某个schema 占用的空间:select pg_size_pretty(pg_relation_size(tablename)) from pg_tables t inner join pg_namespace d on t.schemaname=d.nspname group by d.nspname必须在数据库所对应的存储系统里,至少保留30%的自由空间,日常巡检,要检查存储空间的剩余容量。
7.收集统计信息,回收空间定期使用Vacuum analyze tablename 回收垃圾和收集统计信息,尤其在大数据量删除,导入以后,非常重要将delete 或update 的“旧”数据放到Rollback Segment,与表分开存放。
并发事务为了保证数据一致性,需要从Rollback Segment 上恢复数据。
Greenplum:“旧数据”与表存放在一起,对旧的数据做了标志。
并发事务通过transaction ID(XID)判断数据是否可用系统表也是需要进行vacuum:#!/bin/bashDBNAME="databasename"VCOMMAND="VACUUM ANALYZE"#VCOMMAND="VACUUM FULL ANALYZE"psql -tc "select '$VCOMMAND' || ' pg_catalog.' || relname || ';' from pg_classa,pg_namespace b where a.relnamespace=b.oid and b.nspname= 'pg_catalog' anda.relkind='r'" $DBNAME | psql -a $DBNAME长期没有vaccum 的大表,使用重建表/drop 表的方式,消除垃圾空间。
Alter table xxx rename to yyyy.8.查看数据分布情况两种方式:Select gp_segment_id,count(*) from tablename group by 1 ;如数据分布不均匀,将发挥不了并行计算的优势,严重影响性能。
查看磁盘分布select dfhostname, dfspace,dfdevice from gp_toolkit.gp_disk_free order by dfhostname 9.实例恢复:gprecoverseg通过gpstate 或gp_segment_configuration 发现有实例down 掉以后,使用该命令进行回复,恢复时候不需要停机,不影响应用10.查看锁信息:SELECT locktype, database, c.relname, l.relation, l.transactionid, l.transaction, l.pid,l.mode, l.granted, a.current_queryFROM pg_locks l, pg_class c, pg_stat_activity aWHERE l.relation=c.oid AND l.pid=a.procpidORDER BY c.relname;主要字段说明:relname: 表名locktype、mode 标识了锁的类型MVCC: 读写相互不影响select / insert update delete避免死锁:delete 和update 是表级排他EXCLUSIVE锁。
11.数据库备份gp_dump, pg_dump常用参数:-s: 只导出对象定义(表结构,函数等)-n: 只导出某个schemagp_dump 默认在master 的data 目录上产生这些文件:gp_catalog_1_<dbid>_<timestamp> :关于数据库系统配置的备份文件gp_cdatabase_1_<dbid>_<timestamp>:数据库创建语句的备份文件gp_dump_1_<dbid>_<timestamp>:数据库对象ddl语句gp_dump_status_1_<dbid>_<timestamp>:备份操作的日志在每个segment instance 上的data目录上产生的文件:gp_dump_0_<dbid>_<timestamp>:用户数据备份文件gp_dump_status_0_<dbid>_<timestamp>:备份日志12.数据库恢复gp_restore pg_restore必选参数:--gp-k=key :key 为gp_dump 导出来的文件的后缀时间戳-d dbname :将备份文件恢复到dbname13.Master主机硬件故障时,如何切换至Stand by Master,切换成功后是否需要进行数据检查或恢复等HA答:在stand by master 主机上,运行gpactivatestandby -d /gpdata 进行切换。
由于Master 只存储系统元数据信息,切换成功后,一般不需要进行数据检查和恢复。
日常巡检中要检查Stand by master 是否同步,可以通过表gp_master_mirroring 确认,如果发现不同步,可以通过命令:gpinitstandby -sstandby_master_hostname –n 使得master和standby 重新同步。
14.当Master主机硬件故障排除时,如何由Stand by切换至原Master主机。
答:1,在standby master运行:gpinitstandby –s original_master_hostname2,在standby master 上运行:gpstop –m,注意这里只停止master 实例3,在原来的maste上运行:gpactivatestandby -d /gpdata。
4,在原来的master上运行:gpinitstandby -s original_standby_master_hostname15.日志:master 和segment 上分别有日志:$DATADIR/pg_log/*.csv$DATADIR:select * from pg_ ;使用外部表将日志导入数据库,进行分析。
使用xfs 文件系统。
后台存储目录结构:base 下每个目录,对应select oid ,* from pg_database ;select rel from pg_class : ;16.gpconfig : 4.0 新增加管理工具,参数配置工具;-c | --change <param_name>-v | --value value-m | --mastervalue master_value-s | --show <param_name>gpconfig -c max_connections -v 100 -m 1017.gpcheckperf :网络:gpcheckperf -f host -r N –netperf -d /tmp磁盘IOgpcheckperf -f host -d /data1 -d /data2 -r dlinux DD 命令:dd if=/dev/zero of=/vol2/a.test bs=256k count=161000 dd if=/vol2/b.test of=/dev/null bs=256k count=160000 18.gpssh : 同时登陆到多个机器上,进行操作Gpssh -h sdw1 –h sdw2 -h sdw319.gp_toolkit: 管理工具包:◆gp_bloat_diag◆gp_stats_missing更多详细信息参见GpadminGuide appendix I ;pg_stat_last_operation:Shows the last time certain database operations were performedon a database object, for example, the last time a table wasvacuumed。