Greenplum使用教程

  • Greenplum簡介  

  GreenPlum是一個關係型數據庫集羣.,它其實是由多個獨立的數據庫服務組合成的邏輯數據庫。GreenPlum是基於PostgreSQL(開源數據庫)的分佈式數據庫,它採用的是shared nothing架構(MPP  Massively Parallel Processing,即大規模並行處理),主機、操做系統、內存、存儲都是節點本身控制,不存在着共享。它主要由master host,segment host,interconnect三大部分構成。 git

  Master節點:客戶端訪問鏈接的認證,處理傳入的SQL語句,在segment之間分配工做負荷,協調每一個segment返回的結果,並把最終結果返回給客戶端。github

  Segment節點主要作數據存儲和數據處理,用戶建立的索引和表被分發到各個子節點當中,每個子節點都包含了用戶數據的分片,而這些分片不存在重複的狀況。sql

  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          #建立測試數據庫dom

  $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,謝謝合做。

相關文章
相關標籤/搜索