从GP中卸载数据

两种类型:并行(可写外部表)和非并行(COPY)
两种方式的可写外部表:基于文件和基于WEB
定义基于文件的可写外部表
使用CREATE WRITABLE EXTERNAL TABLE 命令地定义外部表并指出输出文件的位置和格式
使用gpfdist协议的可写外部表
GP segment将数据发送给gpfdist进程,该进程将数据写到指定名称的文件;
若希望输出的数据分割到多个文件,可以在外部表的定义中指定多个gpfdist的URL选项
例如:

CREATE WRITABLE EXTERNAL TABLE tb_wext_gf01(LIKE tb_cp_02)
LOCATION ('gpfdist://mdw:8081/tb_wext_gf01.out',
'gpfdist://mdw:8082/tb_wext_gf02.out',
)
FROMAT 'TEXT' (DELIMITER ',')
DISTRIBUTED RANDOMLY;
insert into tb_wext_gf01 select * from tb_cp_02

一定要指定分布键,有一个小技巧,分布键的选择建议与将要导出的堆表的分布键保持一致,这样就不会进行数据重分步。

定义基于命令的可写外部表
使用CREATE WRITABLE EXTERNAL WEB TABLE 命令定义外部表并指定可执行命令或程序
对于可写WEB表,EXECUTE 子句指定的命令或脚本准备着接受数据输入流;
可写外部表有分步策略选项,缺省为随机分布;
若使用HASH分布策略,在可写外部表中定义相同的分布键可以改善卸载的性能。
在外部表定义的EXECUTE子句中,可根据需要设置环境变量。例如

CREATE WRITABLE EXTERNAL WEB TABLE tb_wext_wb01(output text)
EXECUTE 'export PATH=$PATH:/home/gpadmin;myprogram.sh'
FROMAT 'TEXT' 
DISTRIBUTED RANDOMLY;

WEB外部表和可写表的可执行性
外部表执行OS命令或者脚本有一定的风险,根据需要,可以禁止在WEB表定义中使用EXECUTE。在Mater的postgresql.conf文件设置gp_external_enable_exec=off

使用COPY卸载数据
在GP Master上使用COPY TO语句从数据库表串行拷贝数据到文件
例如:
COPY (SELECT * FROM tb_cp_02 WHERE date LIKE ‘2013%’ ) TO ‘/data/unload/tb_cp_02_2013.out’;
/COPY (SELECT * FROM tb_cp_02 WHERE date LIKE ‘2013%’ ) TO ‘/data/unload/tb_cp_02_2013.out’;–这个命令是在本地系统运行的 一般使用pgadminIII的插件。
在这里插入图片描述
可读外部表的统计信息
无法通过ANALYZE获取,可以通过手工修改数据字典pg_class来设置粗略统计值
指定行数和数据库页面数(数据尺寸/32K)
默认行数为1000000,页面数为1000
手工修改:
update pg_class set reltuples=500000,repages=150 where relname=‘tb_wext_gf01’;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章