跳转至

定义文件的可写外部表

定义基于文件的可写外部表

使用SeaboxMPP并行文件服务器程序scfs或者SeaboxMPP平台扩展框架PXF(SeaboxMPP与Hadoop的接口)输出数据到文件的可写外部表。

使用CREATE FOREIGN TABLE命令定义外部表并且指定输出文件的位置和格式。

  • 对于一个使用scfs协议的可写外部表,SeaboxMPP的executor把它们的数据发送到scfs,后者会把数据写到指定的文件中。scfs必须运行在一个SeaboxMPP的executor能够通过网络访问的主机上。scfs指向一个输出主机上的位置并且把从SeaboxMPP的executor接收的数据写到该文件中。要把输出数据划分到多个文件之间,在用户的可写外部表定义中列出多个文件名。
  • 一个可写外部表可以把数据当作数据流发送给一个应用。例如,从SeaboxMPP数据库导出数据并且把它发送到一个连接到另一数据的应用或者把该数据导入到其他地方的ETL工具。可写外部表使用execute_fdw来指定一个shell命令、脚本或者应用运行在executor主机上并且接受一个输入数据流。

用户可以有选择地为用户的可写外部表声明一个分布策略。默认情况下,可写外部表使用一种随机分布策略。如果从中导出数据的源表具有一种哈希分布策略,为可写外部表定义相同的分布键列可以提高导出性能,因为这消除了在Interconnect之上移动行的需求。如果用户从一个特定表导出数据,用户可以使用LIKE子句从源表复制列定义和分布策略。

例 1—文件服务器(scfs)

create server sc1 foreign data wrapper scfs_fdw options(host '127.0.0.1', port '10020', format 'text');
create user mapping for public server sc1;  

copy test to 'fdw://sc1/scfs_1.gz' (delimiter E'\x01');

例 2—Hadoop文件系统(pxf)

create server hdfs foreign data wrapper hdfs_pxf_fdw;
create user mapping for public server hdfs;
create foreign table test ( name text, date date,  amount float4, category text, desc1 text ) server hdfs options (resources '/dir/data/', format 'text', delimiter '|'); 
select * from  test;
copy mpp_table from 'fdw://hdfs/dir/data/'(format 'text', delimiter '|');
copy mpp_table to 'fdw://hdfs/text/' (format 'text', delimiter ',');
copy mpp_table to 'fdw://hdfs/csv/' (format 'csv', delimiter ',');
copy mpp_table to 'fdw://hdfs/parquet/' (format 'parquet');

用户为使用pxf协议创建的可写外部表指定HDFS目录。