自学内容网 自学内容网

Grrenplum本地开发使用

连接我本机:   

ssh -p 2222 gpadmin@10.198.61.106    #密码: changeme

# 执行以下的命令,用于重新构建一遍环境变量

source /usr/local/greenplum-db/greenplum_path.sh

source env.sh

再次执行psql   就可以进入greenplum中去了。

连数据库,我这边好了, 账号: gpadmin,  密码123456, 端口是5433.

gpstart -a => 快速启动|

gpstart -d => 指定数据目录(默认值:$MASTER_DATA_DIRECTORY)

gpstart -q => 在安静模式下运行。命令输出不显示在屏幕,但仍然写入日志文件。

gpstart -R => 管理员连接

gpstart -v => 显示详细启动信息

gpstop  -u  重启集群

插入速度过慢的时候:

Greenplum调整的参数如下:

(1)全局死锁检测开关

在Greenplum 6中其默认关闭,需要打开它才可以支持并发更新/删除操作;

gpconfig -c gp_enable_global_deadlock_detector -v on

(2) 禁用GPORCA优化器(据说GPDB6默认的优化器为:GPORCA)

gpconfig -c optimizer -v off

(3)关闭日志

此GUC减少不必要的日志,避免日志输出对I/O性能的干扰。

gpconfig -c log_statement -v none

注意:参数配置修改后,我使用gpstop -u重新加了配置,并用gpconfig -s检查了各个参数确认为修改成功。

导入CSV文件到GreenPlum中去.

copy td_case_custom_column from '/home/gpadmin/td_case_custom_column.csv' with csv;

复制一个文件过去到目录下

scp -P 2222 ~/Downloads/td_case_custom_column.csv gpadmin@10.198.56.186:~

复制一个文件夹过去到/data目录下

scp -P 2222   -r  td_case/   gpadmin@10.198.56.186:~/data

# 使用 copy 命令将 resdata 库下的 aa_test 表中的数据导出到 /tmp/data/test.csv 文件中

# ---------------------------------------------------------

COPY aa_test TO '/tmp/data/test.csv' WITH csv;

COPY 2

# 使用 copy 命令将 /tmp/data/test.csv 文件中内容导入到 resdata 库下的 aa_test 表中

# ---------------------------------------------------------

COPY aa_test  FROM '/tmp/data/test.csv' WITH csv;

Greenplum的查询

-- 查看greenplum库各个节点数据的分布情况

select gp_segment_id,count(*) from td_case group by gp_segment_id;

select gp_segment_id,count(*) from td_case  where tenant_id ='22' group by gp_segment_id;

-- 查询表的总览

select

    relname,

    reltuples::int as total

from

    pg_class

where

    relname = 'td_case'

    and relnamespace = (select oid from pg_namespace where nspname = 'public');

   

   --  查询所有的库

   select * from pg_namespace

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Greenplum自动根据create_time创建分区~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

创建分区:

CREATE OR REPLACE FUNCTION auto_insert_into_td_case()

  RETURNS trigger AS

$BODY$

DECLARE

    time_column_name text ; -- 父表中用于分区的时间字段的名称[必须首先初始化!!]

    curMM varchar(6); -- 'YYYYMM'字串,用做分区子表的后缀

    isExist boolean; -- 分区子表,是否已存在

    startTime text;

    endTime text;

    strSQL  text;

    

BEGIN

    -- 调用前,必须首先初始化(时间字段名):time_column_name [直接从调用参数中获取!!]

    time_column_name := TG_ARGV[0];

   

    -- 判断对应分区表 是否已经存在?

    EXECUTE 'SELECT $1.'||time_column_name INTO strSQL USING NEW;

    curMM := to_char( strSQL::timestamp , 'YYYYMM' );

    select count(*) INTO isExist from pg_class where relname = (TG_RELNAME||'_'||curMM);

    -- 若不存在, 则插入前需 先创建子分区

    IF ( isExist = false ) THEN  

        -- 创建子分区表

        startTime := curMM||'01 00:00:00';

        endTime := to_char( startTime::timestamp + interval '1 month', 'YYYY-MM-DD HH24:MI:SS');

        strSQL := 'CREATE TABLE IF NOT EXISTS '||TG_RELNAME||'_'||curMM||

                  ' ( CHECK('||time_column_name||'>='''|| startTime ||''' AND '

                             ||time_column_name||'< '''|| endTime ||''' )

                          ) INHERITS ('||TG_RELNAME||') ;'  ;  

        EXECUTE strSQL;

        -- 创建索引

        strSQL := 'CREATE INDEX '||TG_RELNAME||'_'||curMM||'_INDEX_'||time_column_name||' ON '

                  ||TG_RELNAME||'_'||curMM||' ('||time_column_name||');' ;

        EXECUTE strSQL;

       

    END IF;

    -- 插入数据到子分区!

    strSQL := 'INSERT INTO '||TG_RELNAME||'_'||curMM||' SELECT $1.*' ;

    EXECUTE strSQL USING NEW;

    RETURN NULL

END

$BODY$

  LANGUAGE plpgsql;

 CREATE TRIGGER insert_td_case_data_value_trigger

  BEFORE INSERT

  ON td_case

  FOR EACH ROW

  EXECUTE PROCEDURE auto_insert_into_td_case('create_time');

但是greenplum不支持上面的自动的创建的过程!!!!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Greenplum的查询~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

--表占用空间

 select

relname,

sotdsize / 1024 / 1024 as size_MB,

sotdtoastsize as toast,

sotdadditionalsize as other

from

gp_toolkit.gp_size_of_table_disk as sotd,

pg_class

where

sotd.sotdoid = pg_class.oid

and relname = 'td_case'

order by relname;

--索引占用空间

 select

soisize / 1024 / 1024 as size_MB,

relname as indexname

from

pg_class,

gp_toolkit.gp_size_of_index

where

pg_class.oid = gp_size_of_index.soioid

and pg_class.relkind = 'i';

--  数据库所占用空间

 select pg_size_pretty(pg_database_size('testDB'));

-- 一个schema包含的所有表 

 select * from pg_tables where schemaname = 'public';

--  查询所有的schema, 以及其id

 select oid,* from pg_namespace;

-- relkind 类型:char  

-- 分类:r =普通表,i = 索引,S =序列,v = 视图, c =复合类型,s = 特殊,t =TOAST表

-- 根据上面的id查询索引占用空间, relpages(磁盘用量)

 select sum(relpages) from pg_class

where relkind = 'i' and relnamespace = 2200;

--  根据上面的信息,查询表占用的空间

 select sum(relpages) from pg_class

where relkind = 'r' and relnamespace = 2200;

select * from pg_class where

relkind = 'r'

and relnamespace = 2200

and relname like 'td%'

order by relpages desc;

-- 一个表占用的空间的大小

 select pg_size_pretty(pg_relation_size('td_case')) ;

--查看seg分布

 select

gp_segment_id, count(1)

from td_case group by 1;

-- 磁盘、数据库空间

 select * from gp_toolkit.gp_disk_free order by dfsegment;

-- 查询库所占用的空间

 select * from gp_toolkit.gp_size_of_database order by sodddatname;

-- 日志查询

 select * from gp_toolkit.__gp_log_segment_ext;

GreenPlum + BI Reporting 研究计划

- 考虑如何实现BI Reporting中的数据需求(数据模型考虑先和已有的case management的数据模型一致)

    - Greenplum中表存储模型的选择(AO、行存、列存等)

   

选择使用AO的列存,

因为堆表和行存更加适用于OLTP的需求,即查询表的明细数据,很多的更新和删除的场景,

现实的业务场景是:批量的保存数据,然后查询汇总的信息,有更多的分析需求,场景更加偏向于OLAP,所以我们使用AO表的列存。

    - 考虑如何分区的问题(比如按tenant_id、create_time或者update_time等)

根据租户的id分区。

- 性能测试,尽量模拟真实数据进行测试

    - 数据准备(千万级别准备,数据分布尽量贴近真实,比如有的租户的数据量比较大,比如工作时间内的数据比较集中,非工作时间内的数据量比较少等,这么划分不一定完全准确仅供参考)

    - SQL准备(先考虑几个简单的指标,针对customs field的在简单的数据测试流程跑通之后再进一步考虑)

    - 执行,按照不同的数据分布进行分组测试(考虑在并行的情况下不同sql的执行效率、系统的资源占用情况等)

需求相关

User Cases: https://talkdesk.atlassian.net/wiki/spaces/TSC/pages/2757918779/Reporting+x+freshdesk+Approach

PRD: https://talkdesk.atlassian.net/wiki/spaces/TSC/pages/2742681658/Case+Reports

Greenplum相关参考

Greenplum表存储模型选择 - 程序员大本营

Greenplum性能优化之路 --(二)存储格式-腾讯云开发者社区-腾讯云

https://www.cnblogs.com/xibuhaohao/p/11127556.html


原文地址:https://blog.csdn.net/u010398771/article/details/130724208

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!