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'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章