- Greenplum簡介
GreenPlum是一個關系型數據庫集群.,它實際上是由多個獨立的數據庫服務組合成的邏輯數據庫。GreenPlum是基於PostgreSQL(開源數據庫)的分布式數據庫,它采用的是shared nothing架構(MPP Massively Parallel Processing,即大規模並行處理),主機、操作系統、內存、存儲都是節點自己控制,不存在着共享。它主要由master host,segment host,interconnect三大部分構成。
Master節點:客戶端訪問連接的認證,處理傳入的SQL語句,在segment之間分配工作負荷,協調每個segment返回的結果,並把最終結果返回給客戶端。
Segment節點主要做數據存儲和數據處理,用戶創建的索引和表被分發到各個子節點當中,每一個子節點都包含了用戶數據的分片,而這些分片不存在重復的情況。
Interconnect是GreenPlum數據庫的網絡層.在每個segment中起到一個ipc的作用(inter-process communication)。
- 常用命令
系統表:PG_TABLES:pg表信息表 pg_class:pg類信息表 pg_attribute:pg屬性表 pg_type:pg類型表
$psql -h 192.168.1.100 -p admin -d testDB -U gpadmin #其他機器上使用psql連接到數據庫
$createdb testDB -E utf-8 #創建測試數據庫
$truncate test1_tb; #*物理刪除表文件*
$export PGDATABASE=testDB #設置默認testDB數據庫
$select version(); #查詢數據庫版本
$create table test_tb(id int primary key,name varchar(64)); #創建表
$create table test_tb(id int primary key,name varchar(64)) distributed by(id,name);
$create table test_tb(id int,name varchar(64)) distributed randomly;
$create table test2_tb (like test1_tb); #復制表結構
#create table as 可以加入distributed指定分布鍵,select into只能使用默認的分布鍵
$create table test2_tb as select * from test1_tb distributed by(id);
$select * into test3_tb from test1_tb;
$select "name" as 姓名 from test_tb; #greenplum數據庫設置別名,不能使用單引號,單引號是修身變量
$select "name" as "姓名" from test_tb; #greenplum數據庫用雙引號設置別名
$insert into test1_tb values(1,'zhangsan'),(2,'lisi'),(3,'wangwu'); #批量插入數據,分布鍵不要為空
#update:不能批量對分布鍵執行update,因為對分布鍵執行update需要將數據重分布,而gp暫時不支持這個功能
$update test1_tb set name='lier' where id=1; #更新數據
$delete from test1_tb where name in(select name from test_tb); #刪除數據
$select * from pg_tables; #獲取表結構
$select datname,pg_size_pretty(pg_database_size(datname)) from pg_database; #獲取所有數據庫名
$select pg_size_pretty(pg_total_relation_size('tb_name')); #查看表索引
$SELECT A .attname AS field, T .typname AS TYPE FROM pg_class C, pg_attribute A, pg_type T WHERE C .relname = 'tb_name' AND A .attnum > 0 AND A .attrelid = C .oid AND A .atttypid = T .oid ORDER BY A .attnum; #查看表結構
- 索引(index)
# \h create index #查看創建索引的幫助
# \d tb_test #查看tb_test表信息
# create index idx_01 on tb_test(id); #為tb_test表中(id)字段創建索引
# \d tb_test #查看tb_test表信息
# \d+ tb_test; #查看tb_test表以及其子表信息
# create index bmidx_01 on tb_test using bitmap(count); #創建位圖索引
# explain select * from tb_test where count = 0; #查看tb_test表的執行計划
# show enable_seqscan; #GP中默認進行序列掃描
# set enable_seqscan=off; #將序列掃描的方式關閉
# \h reindex #查看reindex的幫助
# \h drop index #查看drop index的幫助
# drop index idx_01; #刪除索引idx_01
- 視圖(view)
格式:普通視圖V_【具體業務含義名稱】,物化視圖MV_【具體業務含義名稱】
CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW name [ ( column_name [, ...] ) ]
# \h create view #查看創建視圖的幫助
# \d tb_test #查看tb_test表結構信息
# create view vv_01 as select * from tb_test where gender = 'M'; #創建視圖
# \dv #使用“\dv”命令查看當前視圖
# \h drop view #查看刪除視圖的幫助
# drop view vv_01; #刪除視圖vv_01
- 序列(sequence)
查詢哪些視圖引用了某張數據表
CREATE OR REPLACE FUNCTION public.get_views_used_by_table(text) RETURNS setof record as $FBODY$ select distinct vn.nspname || '.'||vc.relname as viewname from pg_class c join pg_namespace n on n.oid=c.relnamespace left join pg_depend d on d.refobjid =c.oid left join pg_rewrite r on r.oid =d.objid left join pg_class vc on r.ev_class =vc.oid left join pg_namespace vn on vc.relnamespace=vn.oid where d.deptype='n' and d.classid =2618 and r.rulename ='_RETURN' and vc.relkind='v' and c.oid =$1::regclass ; $FBODY$ LANGUAGE sql volatile; |
#select public.get_views_used_by_table('public.test1');
#select * from public.get_views_used_by_table('public.test1') as A (viewname text);
#\h CREATE SEQUENCE #查看創建序列的幫助
#create sequence test_seq start with 100; #創建名為test_seq的序列
# \ds #通過\ds命令查看當前數據庫中存在的序列
#select setval('test_seq',200); #通過設置test_seq的序列值為200
#select nextval('test_seq'); #查看當前序列的下一個值
#select * from test_seq; #查看當前序列的信息
# \h alter sequence; #查看修改序列的幫助
# alter sequence test_seq start with 205; #修改當前序列的開始值為205
# \h drop sequence; #查看修改序列的幫助
# drop sequence test_seq; #刪除當前序列
# show enable_seqscan; #GP中默認進行序列掃描
# set enable_seqscan=off; #將序列掃描的方式關閉
備注:
作者:Shengming Zeng
博客:http://www.cnblogs.com/zengming/
GItHub:https://github.com/lovelifeming
嚴正聲明:
1.由於本博客部分資源來自互聯網,版權均歸原作者所有。轉載的目的是用於學術交流與討論學習,將不對任何資源負法律責任。
2.若無意中侵犯到您的版權利益,請來信聯系我,我會在收到信息后會盡快給予處理!
3.所有資源內容僅供學習交流之用,請勿用作商業用途,謝謝。
4.如有轉發請注明出處,來源於http://www.cnblogs.com/zengming/ https://blog.csdn.net/Z645817,謝謝合作。