gpdb使用纪要

使用资源队列master配置

max_resource_queues = 9
max_resource_portals_per_transaction = 64
resource_select_only = on
resource_cleanup_gangs_on_wait = on
gp_resqueue_memory_policy = 'auto'
gp_vmem_protect_limit = 7168
gp_vmem_idle_resource_timeout = 18000

创建外部表

gp_external_enable_exec=on

普通用户创建外部表需要有权限

CREATEEXTTABLE

创建资源队列

CREATE RESOURCE QUEUE pg_basic WITH (ACTIVE_STATEMENTS=50, 
MEMORY_LIMIT='2877MB');

指派角色(用户)到资源队列

ALTER ROLE name RESOURCE QUEUE queue_name;

gpload安装

linux在非gpdb服务器单独安装gpload
1、安装下载对应系统、对应gpdb版本的gpload,解压安装,由于gpload自带python,所以可以不单独安装python
一下步骤建议创建单独用户组及用户安装,例如groupadd etl;useradd -g etl etl;切换到etl用户,配置环境变量source /usr/local/greenplum-loaders-5.9.0/greenplum_loaders_path.sh,source一下
2、安装pyyaml,pip install pyyaml
3、安装pygresql,pip install PyGreSQL,如果安装失败,提示 Exception: pg_config tool is not available,先执行安装yum install postgresql-devel,再执行pip install PyGreSQL

gpdb使用注意

1、授权时不要授权给public,不然所有用户都能访问
2、postgresql创建表、字段时如果使用了双引号,则严格区分大小写,导致使用时表名、字段必须得加上双引号

GP权限

postgresql中的权限可以大概分为以下几种:
SELECT:该权限用来查询表或是表上的某些列,或是视图,序列。
INSERT:该权限允许对表或是视图进行插入数据操作,也可以使用COPY FROM进行数据的插入。
UPDATE:该权限允许对表或是或是表上特定的列或是视图进行更新操作。
DELETE:该权限允许对表或是视图进行删除数据的操作。
TRUNCATE:允许对表进行清空操作。
REFERENCES:允许给参照列和被参照列上创建外键约束。
TRIGGER:允许在表上创建触发器。
CREATE:对于数据库,允许在数据库上创建Schema;对于Schema,允许对Schema上创建数据库对象;对于表空间,允许把表或是索引指定到对应的表空间上。
CONNECT:允许用户连接到指定的数据库上。
TEMPORARY或是TEMP:允许在指定数据库的时候创建临时表。
EXECUTE:允许执行某个函数。
USAGE:对于程序语言来说,允许使用指定的程序语言创建函数;对于Schema来说,允许查找该Schema下的对象;对于序列来说,允许使用currval和nextval函数;对于外部封装器来说,允许使用外部封装器来创建外部服务器;对于外部服务器来说,允许创建外部表。
ALL PRIVILEGES:表示一次性给予可以授予的权限。

回收schema权限

revoke all on SCHEMA dkd_sp2p from public;

回收数据库权限

revoke ALL ON DATABASE data_warehouse from public;

回收表权限

REVOKE ALL ON dkd_sp2p.i_order_info FROM gpdev;

gp日期相关

select extract(epoch FROM ('2018-08-07 18:50:23'::timestamp - '2018-08-07 18:49:00'::timestamp));
新纪元时间 Epoch 是以 1970-01-01 00:00:00 UTC 为标准的时间,将目标时间与 1970-01-01 00:00:00
时间的差值以秒来计算 ,单位是秒,可以是负值;

-- 两个日期相减后的分子域,不会将小时加进来,例如1:20:30,minute结果为20,hour为1,minute为23,(SECOND秒,minute分钟,hour小时,month月)
select extract(minute from('2018-08-07 18:50:23'::timestamp - '2018-08-07 18:49:00'::timestamp));

-- cast(x as x)类型转换
select cast((extract(epoch FROM ('2018-08-08 18:50:23'::timestamp - '2018-08-07 18:49:00'::timestamp))/60) as integer);

-- 日期加减,month是单位
SELECT now()::timestamp + '-1 month';

select substring('cdsvfd',1,2);
-- 日期加减,month是单位
SELECT now()::timestamp + '-1 month';
SELECT now()::date;
select (extract(epoch FROM ('2018-08-08 18:50:23'::timestamp - '2018-08-07 18:49:00'::timestamp))/60);
-- cast(x as x)类型转换
select cast((extract(epoch FROM ('2018-08-08 18:50:23'::timestamp - '2018-08-07 18:49:00'::timestamp))/60) as integer);
select now()::timestamp without time zone - '2018-08-07 18:49:00'::timestamp;
select (to_char(CURRENT_TIMESTAMP,'yyyy-mm-dd hh24:mi:ss'))::timestamp;
-- tochar:日期转为字符串
select to_timestamp(to_char(CURRENT_TIMESTAMP,'yyyy-mm-dd hh24:mi:ss'), 'yyyy-mm-dd HH24:MI:SS');
-- 两个日期相减后的分钟子域,不会将小时加进来,例如1:20:30,minute结果为20,hour为1,minute为23
select extract(minute from('2018-08-07 18:50:23'::timestamp - '2018-08-07 18:49:00'::timestamp));
select to_char(-125.8, '999D99S');

GP索引

1、默认情况下,索引不用于 IS NULL 字句

gpdb的sql函数注意事项

1、不支持LEFT()函数,使用substring()代替
2、不支持TIMESTAMPDIFF()函数,使用extract(epoch FROM ('2018-08-07 18:50:23'::timestamp - '2018-08-07 18:49:00'::timestamp))代替
3、统计函数统计的字段,例如sum等,必须得加入到grouy by中
4、不支持DATE_ADD()函数,日期可直接相加减,now()::timestamp) + '-1 month'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章