Greenplum的一个应用案例

2.5 一个综合范例

注:这个范例就是一串实验,在安装好虚拟机后可以直接做。
【 在虚拟机测试环境下做GP操作的实验 】
# made in shenyang.liaoning. create by hcb. 20120318.
# 大纲:
#一、试验外部表(只读):
#二、实验构建STAGE层
#三、实验构建ODS层
#四、导出数据为文本

===============================================================
一、试验外部表(只读):

步骤1:启动gpfdist 服务
nohup gpfdist -d /data/etl_data -p 8082 -l gpfdist.log&

步骤2:创建只读外部表
drop external table stage.ts_mytest_r_external;
create external table stage.ts_mytest_r_external
(
caa varchar(20),
cbb varchar(20),
ccc varchar(20),
cdd varchar(2)
)
LOCATION ('gpfdist://wmd:8082/xmx.txt*')
FORMAT 'TEXT'( DELIMITER '|')
encoding 'UTF8'
;

步骤3:建一个与外部表相对应的文本文件xmx.txt(路径:/data/etl_data)
输入以下内容
aaaa|bbbbbbb|cccccccc|1
2a2a|2b2b2b2b|2c2c2c|2
3a3a|3b3b3b3b|3c3c3c|3
4a4a|4b4b4b4b|4c4c4c|4

步骤4:查询外部表
select * from stage.ts_mytest_r_external limit 10;

===============================================================
二、实验构建STAGE层
步骤1:创建stage表(采用简单的随机分布)
drop table stage.ts_mytest;
create table stage.ts_mytest
(
caa varchar(20),
cbb varchar(20),
ccc varchar(20),
cdd varchar(2)
)
DISTRIBUTED RANDOMLY
;

步骤2:创建stage函数,将数据从外部表读取上来
create or replace function stage.p_ts_mytest()
returns void as
$body$
declare
v_schemaname varchar(40) := 'stage'; --这个东西没有使用到,纯粹无聊
begin

    --清空表
    EXECUTE 'TRUNCATE TABLE stage.ts_mytest;';
    --进数据
    insert into stage.ts_mytest(caa,cbb,ccc,cdd) select caa,cbb,ccc,cdd from stage.ts_mytest_r_external;

end; $body$
language plpgsql volatile;

将以上function代码保存到/home/gpadmin/_hcb目录下
然后用gpadmin用户(只要是有权限创建function的用户就可以)执行:
psql -f /home/gpadmin/_hcb/crt_fun.sql
(也可以在GPADMIN3上或Aginity Workbench for EMC Greenplum上创建)
然后:
psql -c "select stage.p_ts_mytest()"
(也可以在GPADMIN3上或Aginity Workbench for EMC Greenplum上输入select stage.p_ts_mytest();来执行)
这样就是实现了把外部表指向的xmx.txt文件中的数据读取到了stage.ts_mytest表里面来了。

===============================================================
三、实验构建ODS层
步骤1:创建ods表
drop table ods.ods_d_mytest;
create table ods.ods_d_mytest
(
month_id varchar(6),
day_id varchar(2),
caa varchar(20),
cbb varchar(20),
ccc varchar(20),
cdd numeric
)
WITH (appendonly=true, compresslevel=1, orientation=column, compresstype=quicklz)
DISTRIBUTED BY (caa)
PARTITION BY LIST (month_id)
SUBPARTITION BY LIST (day_id)
SUBPARTITION TEMPLATE
(
SUBPARTITION d01 VALUES ('01'::character varying) WITH (appendonly=true, compresslevel=1, orientation=column, compresstype=quicklz),
SUBPARTITION d02 VALUES ('02'::character varying) WITH (appendonly=true, compresslevel=1, orientation=column, compresstype=quicklz),
SUBPARTITION d03 VALUES ('03'::character varying) WITH (appendonly=true, compresslevel=1, orientation=column, compresstype=quicklz),
SUBPARTITION d04 VALUES ('04'::character varying) WITH (appendonly=true, compresslevel=1, orientation=column, compresstype=quicklz),
SUBPARTITION d05 VALUES ('05'::character varying) WITH (appendonly=true, compresslevel=1, orientation=column, compresstype=quicklz),
......
SUBPARTITION d26 VALUES ('26'::character varying) WITH (appendonly=true, compresslevel=1, orientation=column, compresstype=quicklz),
SUBPARTITION d27 VALUES ('27'::character varying) WITH (appendonly=true, compresslevel=1, orientation=column, compresstype=quicklz),
SUBPARTITION d28 VALUES ('28'::character varying) WITH (appendonly=true, compresslevel=1, orientation=column, compresstype=quicklz),
SUBPARTITION d29 VALUES ('29'::character varying) WITH (appendonly=true, compresslevel=1, orientation=column, compresstype=quicklz),
SUBPARTITION d30 VALUES ('30'::character varying) WITH (appendonly=true, compresslevel=1, orientation=column, compresstype=quicklz),
SUBPARTITION d31 VALUES ('31'::character varying) WITH (appendonly=true, compresslevel=1, orientation=column, compresstype=quicklz)
)
(
PARTITION m201203 VALUES ('201203'::character varying) WITH (appendonly=true, compresslevel=1, orientation=column, compresstype=quicklz)
);

COMMENT ON TABLE ods.ods_d_mytest IS '学习测试表';
COMMENT ON COLUMN ods.ods_d_mytest.month_id IS '月份';
COMMENT ON COLUMN ods.ods_d_mytest.day_id IS '日期';
COMMENT ON COLUMN ods.ods_d_mytest.caa IS 'a字段';
COMMENT ON COLUMN ods.ods_d_mytest.cbb IS 'b字段';
COMMENT ON COLUMN ods.ods_d_mytest.ccc IS 'c字段';

步骤2:创建ods函数,将stage层数据读上来,同时做些加工
create or replace function ods.p_ods_d_mytest(in v_day_id character varying,out v_retcode character varying,out v_retinfo character varying)
returns record as
$body$
declare
v_month varchar(6);
v_day varchar(2);
begin
v_month := substring(v_day_id,1,6);
v_day := substring(v_day_id,7,2);
--清空表分区
execute 'alter table ods.ods_d_mytest alter partition m'|| v_month ||' truncate partition d' ||v_day ;
--将数据从stage层读上来,同时做些处理
insert into ods.ods_d_mytest(
month_id,
day_id,
--caa,
cbb,
ccc,
cdd
)
select
v_month,
v_day,
caa,
case when cbb='bbbbbbb' then '1bbbbbb' else cbb end as cbb,
ccc,
cdd::numeric
from stage.ts_mytest
;
V_RETCODE := 'SUCCESS';
V_RETINFO := 'OK';

EXCEPTION
WHEN OTHERS THEN
V_RETCODE := 'HCB_FAIL_HCB';
V_RETINFO := SQLERRM;
RAISE NOTICE 'ERROR INFORMATION is %,%', V_RETINFO, V_RETCODE;

end;
$body$
language plpgsql volatile;

执行:
select ods.p_ods_d_mytest('20120318');
这样就实现了把数据从stage 层读到ods层并做一些加工的目的.
放到SHELL里面执行:
#! /bin/bash
v_rtn=psql -atc "select ods.p_ods_d_mytest('20120318')"
echo "==========="
echo "$v_rtn"

===============================================================
四、导出数据为文本
(一)实验用命令copy实现导出:
创建shell脚本: my_copy_out.sh
#####shell脚本--start#######
#!/bin/bash
psql -d bi -h xx -p dd -t -c "\copy (select * from ods.ods_d_mytest) to /home/gpadmin/_hcb/my_data.txt"
echo "导出完成."
#####shell脚本-- end #######

给shell脚本赋予执行权限: chmod +x my_copy_out.sh
执行shell脚本: ./my_copy_out.sh

好了可以在目录 /home/gpadmin/_hcb下看到生成了文本的数据文件my_data.txt (字段默认是以TAB为分隔符)
查看数据文件: cat my_data.txt

(二)实验用可写外部表实现导出:
步骤1:建立可写外部表
drop external table ods.ods_d_mytest_w_external;
create writable external table ods.ods_d_mytest_w_external
(
month_id varchar(6),
day_id varchar(2),
caa varchar(20),
cbb varchar(20),
ccc varchar(20),
cdd varchar(20)
)
LOCATION ('gpfdist://wmd:8082/out_xmx.txt')
FORMAT 'TEXT' (delimiter '|' null '' escape 'off')
ENCODING 'UTF8'
DISTRIBUTED RANDOMLY;

步骤2:向外部表INSERT数据,实现文本文件的生成
执行SQL:
insert into ods.ods_d_mytest_w_external(month_id,day_id,caa,cbb,ccc,cdd)
select month_id,day_id,caa,cbb,ccc,cdd from ods.ods_d_mytest
where month_id='201203' and day_id='18';

查看gpfdist所指向的目录下生成文件:out_xmx.txt (路径:/data/etl_data)
查看文件内容:
cat out_xmx.txt

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容

  • 三次握手简图 TCP建立连接之前要进行三次握手。 三次握手的最终目的就是为了establish a reliabl...
    FlyingPenguin阅读 1,587评论 0 0
  • 我是80后非85后中的一员。在我懵懵懂懂的小时候,从电视上只能看到《七巧板》、《渴望》及各类正统节目,资源十分匮乏...
    moon沐恩阅读 258评论 0 0
  • 我感觉很痛苦,很想去死,每天都不开心,每天都很痛苦,根本无法排解,想出去走走,又不知道去哪,心里很烦,很讨厌这样的...
    坛子金阅读 134评论 0 0