libo-# FORMAT 'TEXT' ( DELIMITER '|' NULL ' ') ;
CREATE EXTERNAL TABLE
libo=# select * from ext_expenses;
colum
-------
aaaa
aaa
aa
a
(7 rows)
create table t as select * from t_ext DISTRIBUTED BY(id);
libo=# create table t as select * from t_ext DISTRIBUTED RANDOMLY;
SELECT 10
libo=# create external table t_ext (id int,name text)
libo-# location ('gpfdist://192.168.100.11:8081/aaa.csv')
libo-# format 'csv';
CREATE EXTERNAL TABLE
libo=# select * from t_ext;
ERROR: missing data for column "name" (seg3 slice1 sdw2:40001 pid=10243)
DETAIL: External table t_ext, line 4000 of gpfdist://192.168.100.11:8081/aaa.csv: ""
原因:csv 中有空行
结论:外部表只支持gpfdist 的http协议 gpfdist服务是GP的简单的web服务
结合使用SEGMENT REJECT LIMIT子句。
拒绝限制count参数可用于指定记录数(缺省),或者使用PERCENT指定记录
百分比。
保存错误记录以备将来的检查,使用LOG ERRORS INTO子句指定错误记
录日志表。
使用gpload装载
卸载数据
禁止web表定义中使用execute libo=# show gp_external_enable_exec
libo-# ;
gp_external_enable_exec
-------------------------
on
(1 row)
数据格式
在使用各种GP命令装载或卸载数据时,需要指定数据如何格式化
行分隔 GPDB预期是以LF字符(Line Feed/换行符/0x0A)、CR(Carriage Return/回车/0x0D)
或者CR加LF(CR+LF/回车换行/0x0A 0x0D)作为一行的分割。LF是标准UNIX或
类UNIX操作 系统的标准换行标识符。其他操作系统(如Windows、Mac OS 9)可
能是CR或者CR+LF。所有这些换行标识符在GPDB中都被支持作为行分隔符
列分隔 对于TEXT文件来说缺省的列分隔符是TAB字符(0x09),而 对 于CSV文件来说缺
省的列分隔符是逗号(0x2C)。不过在使用COPY、CREATE EXTERNAL TABLE
时或者使用gpload定义数据格式时都可以使用DELIMITER子句执行其他的单
字符分隔符。