從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’;

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