GreenPlum可写外部表操作实战

目录

一、什么是gp 可写外部表?

二、实例 

三、外部表有事务吗?


 


一、什么是gp 可写外部表?

创建可写外部表时需要声明WRITABLE。数据可以写入到gpfdist或者可执行程序,不支持写入本地文件。

  1. execute类型的外部数据URL格式是:EXECUTE ‘/var/load_scripts/get_log_data.sh’
  2. 其中execute指明了数据读写协议,/var/load_scripts/get_log_data.sh指定可执行程序。
  3. execute类型不仅支持读取外部数据,同时也支持写入外部数据。
  4. Greenplum外部表通过执行定义的外部执行程序:例如get_log_data.sh,和管道实现execute类型数据的读写。读外部数据:将程序的标准输出的作为数据来源;向外部写数据:将外部程序的标准输入作为数据表中的数据

二、实例 

2.1 创建一个外部表,查看每个Segment上执行命令时所有的环境变量。创建外部表如下

=# create external web table exec_example(id int, name varchar(100), value text) EXECUTE 'env|xargs -I {} echo $GP_SEGMENT_ID={}' format 'TEXT' (DELIMITER '=') LOG ERRORS SEGMENT REJECT LIMIT 10 ROWS;
=# select * from exec_example limit 10;
 id |         name          |                   value                    
----+-----------------------+--------------------------------------------
  3 | GP_USER               | gpadmin
  3 | GP_HADOOP_CONN_JARDIR | lib//hadoop
  3 | LC_MONETARY           | C
  3 | GP_CID                | 0
  3 | GPERA                 | 09877cd46d8003f1_201030102232
  3 | GP_SEG_PG_CONF        | /datap4/gpseg3/postgresql.conf
  3 | SHELL                 | /bin/bash
  3 | GPPERFMONHOME         | /usr/local/greenplum-cc-web-2.0.0-build-32
  3 | SSH_CLIENT            | 10.5***3 28799 22
  3 | LC_NUMERIC            | C

三、外部表有事务吗?

readable和writable用来表示外部表是可读还是可写。Greenplum的外部表分为只读和只写两种,目前不支持对同一个外部表同时进行读和写。如果外部表协议同时实现了读和写的支持,比如S3或者GPFDIST,用户可以用同样的URL分别创建读和写的外部表。需要注意的是,可写外部表框架本身是不保证数据事务特性的,需要由具体协议的实现来保证数据出错时可以回滚。例如,S3协议支持外部表写操作中断退出时,可以回滚已上传但未提交的数据;而GPFDIST协议不支持数据回滚。对可写外部表插入操作中断退出后,GPFDIST仍然会保存已上传的数据文件。无论读外部表还是写外部表,所有的操作都是在每个Primary Segment上完成的,因此外部表是以Segment为单位并行执行数据的加载和卸载。

猜你喜欢

转载自blog.csdn.net/MyySophia/article/details/113643857