使用資源隊列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'