OushuDB-定义外部表

可以使用下面的命令创建外部表。其中需要把etlhost-1替换为gpfdist所在机器的主机名。本机的可以使 用localhost。
可以直接查询该外部表:

gpfdist -d /data1/load-files -p 8081 -l /data1/log1
gpfdist -d /data2/load-files -p 8082 -l /data2/log2
john|2017-01-20|100.00|travel|nothing
tom|2016-12-01|300|taxi|nothing
marry|2017-01-21|1000.00|travel|nothing
kurt|2016-12-02|800|taxi|nothing
CREATE EXTERNAL TABLE ext_expenses

    ( name text, date date, amount float4, category text, desc1 text )

LOCATION ('gpfdist://etlhost-1:8081/', 'gpfdist://etlhost-1:8082/')
FORMAT 'TEXT' (DELIMITER '|');
etl=# select * from ext_expenses;

name date amount category desc1
john 2017-01-20 100 travel nothing
tom 2016-12-01
marry 2017-01-21
kurt 2016-12-02
300 taxi
1000 travel
800 taxi
nothing
nothing
nothing

(4 rows)
有些时候,输入的text/csv文件有一些格式错误,默认情况下,出现错误时,整个加载会失败。如果数据 量很大的话,修正错误再重新加载会浪费很多时间。如果错误可以接受的话,我们可以通过定义error table的方法隔离错误的行,把错误的行放到一个单独的error table中,而正常加载所有的正确行。下面 是一个例子。
上面那条语句指定了error table为expense_errortable,系统会自动创建该表。SEGMENT REJECT LIMIT指的是如果有超过10行的错误,加载将报错退出。
如果一个CSV文件包含错误的格式,error table的rawdata列可能包含几个合并的错误行。例如,如果一 个text列的值少了一个结束的引号,后面的行(包含换行符)将会被当作那个列的值处理。当这种情况 发生时,并且该值超过64K大小时,OushuDB会把64K大小的值放入error table中做为一个单独的行, 继续处理后面的行。如果这种情况发生多次,加载会失败,OushuDB会报“rejected N or more rows”错 退出。

你可能感兴趣的:(oushudb-hawq)