• Greenplum使用教程


    • 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,谢谢合作。

  • 相关阅读:
    <自动化测试>之<使用unittest Python测试框架进行参数化测试>
    <自动化测试>之<unittest框架使用1>
    <自动化测试>之<selenium API 查找元素操作底层方法>
    <自动化测试>之<selenium API 用法2>
    <自动化测试>之<Selenium API 的用法1>
    <Jmeter入门不放弃>之<3.两种常见录制脚本的方法>
    <Jmeter入门不放弃>之<2.常用功能>
    <Jmeter入门不放弃>之<1.认识jmeter>
    <自动化测试>之<SeleniumIDE使用详解 >
    sql 注入get与post模式语句
  • 原文地址:https://www.cnblogs.com/zengming/p/10965101.html
Copyright © 2020-2023  润新知