定义一个新的外部表。
CREATE [READABLE] EXTERNAL [TEMPORARY | TEMP] TABLE table_name
( column_name data_type [, ...] | LIKE other_table )
LOCATION ('file://seghost[:port]/path/file' [, ...])
| ('gpfdist://filehost[:port]/file_pattern[#transform=trans_name]'
[, ...]
| ('gpfdists://filehost[:port]/file_pattern[#transform=trans_name]'
[, ...])
| ('pxf://path-to-data?PROFILE=profile_name[&SERVER=server_name][&custom-option=value[...]]'))
| ('s3://S3_endpoint[:port]/bucket_name/[S3_prefix] [region=S3-region] [config=config_file | config_server=url]')
[ON MASTER]
FORMAT 'TEXT'
[( [HEADER]
[DELIMITER [AS] 'delimiter' | 'OFF']
[NULL [AS] 'null string']
[ESCAPE [AS] 'escape' | 'OFF']
[NEWLINE [ AS ] 'LF' | 'CR' | 'CRLF']
[FILL MISSING FIELDS] )]
| 'CSV'
[( [HEADER]
[QUOTE [AS] 'quote']
[DELIMITER [AS] 'delimiter']
[NULL [AS] 'null string']
[FORCE NOT NULL column [, ...]]
[ESCAPE [AS] 'escape']
[NEWLINE [ AS ] 'LF' | 'CR' | 'CRLF']
[FILL MISSING FIELDS] )]
| 'CUSTOM' (Formatter=<formatter_specifications>)
[ OPTIONS ( key 'value' [, ...] ) ]
[ ENCODING 'encoding' ]
[ [LOG ERRORS [PERSISTENTLY]] SEGMENT REJECT LIMIT count
[ROWS | PERCENT] ]
CREATE [READABLE] EXTERNAL WEB [TEMPORARY | TEMP] TABLE table_name
( column_name data_type [, ...] | LIKE other_table )
LOCATION ('http://webhost[:port]/path/file' [, ...])
| EXECUTE 'command' [ON ALL
| MASTER
| number_of_segments
| HOST ['segment_hostname']
| SEGMENT segment_id ]
FORMAT 'TEXT'
[( [HEADER]
[DELIMITER [AS] 'delimiter' | 'OFF']
[NULL [AS] 'null string']
[ESCAPE [AS] 'escape' | 'OFF']
[NEWLINE [ AS ] 'LF' | 'CR' | 'CRLF']
[FILL MISSING FIELDS] )]
| 'CSV'
[( [HEADER]
[QUOTE [AS] 'quote']
[DELIMITER [AS] 'delimiter']
[NULL [AS] 'null string']
[FORCE NOT NULL column [, ...]]
[ESCAPE [AS] 'escape']
[NEWLINE [ AS ] 'LF' | 'CR' | 'CRLF']
[FILL MISSING FIELDS] )]
| 'CUSTOM' (Formatter=<formatter specifications>)
[ OPTIONS ( key 'value' [, ...] ) ]
[ ENCODING 'encoding' ]
[ [LOG ERRORS [PERSISTENTLY]] SEGMENT REJECT LIMIT count
[ROWS | PERCENT] ]
CREATE WRITABLE EXTERNAL [TEMPORARY | TEMP] TABLE table_name
( column_name data_type [, ...] | LIKE other_table )
LOCATION('gpfdist://outputhost[:port]/filename[#transform=trans_name]'
[, ...])
| ('gpfdists://outputhost[:port]/file_pattern[#transform=trans_name]'
[, ...])
FORMAT 'TEXT'
[( [DELIMITER [AS] 'delimiter']
[NULL [AS] 'null string']
[ESCAPE [AS] 'escape' | 'OFF'] )]
| 'CSV'
[([QUOTE [AS] 'quote']
[DELIMITER [AS] 'delimiter']
[NULL [AS] 'null string']
[FORCE QUOTE column [, ...]] | * ]
[ESCAPE [AS] 'escape'] )]
| 'CUSTOM' (Formatter=<formatter specifications>)
[ OPTIONS ( key 'value' [, ...] ) ]
[ ENCODING 'write_encoding' ]
[ DISTRIBUTED BY ({column [opclass]}, [ ... ] ) | DISTRIBUTED RANDOMLY ]
CREATE WRITABLE EXTERNAL [TEMPORARY | TEMP] TABLE table_name
( column_name data_type [, ...] | LIKE other_table )
LOCATION('s3://S3_endpoint[:port]/bucket_name/[S3_prefix] [region=S3-region] [config=config_file | config_server=url]')
[ON MASTER]
FORMAT 'TEXT'
[( [DELIMITER [AS] 'delimiter']
[NULL [AS] 'null string']
[ESCAPE [AS] 'escape' | 'OFF'] )]
| 'CSV'
[([QUOTE [AS] 'quote']
[DELIMITER [AS] 'delimiter']
[NULL [AS] 'null string']
[FORCE QUOTE column [, ...]] | * ]
[ESCAPE [AS] 'escape'] )]
CREATE WRITABLE EXTERNAL WEB [TEMPORARY | TEMP] TABLE table_name
( column_name data_type [, ...] | LIKE other_table )
EXECUTE 'command' [ON ALL]
FORMAT 'TEXT'
[( [DELIMITER [AS] 'delimiter']
[NULL [AS] 'null string']
[ESCAPE [AS] 'escape' | 'OFF'] )]
| 'CSV'
[([QUOTE [AS] 'quote']
[DELIMITER [AS] 'delimiter']
[NULL [AS] 'null string']
[FORCE QUOTE column [, ...]] | * ]
[ESCAPE [AS] 'escape'] )]
| 'CUSTOM' (Formatter=<formatter specifications>)
[ OPTIONS ( key 'value' [, ...] ) ]
[ ENCODING 'write_encoding' ]
[ DISTRIBUTED BY ({column [opclass]}, [ ... ] ) | DISTRIBUTED RANDOMLY ]
CREATE EXTERNAL TABLE或CREATE EXTERNAL WEB TABLE在 YMatrix 数据库中创建一个新的可读外部表定义。 可读的外部表通常用于快速并行数据加载。 定义外部表后,您可以使用SQL命令直接(或并行)查询其数据。 例如,您可以选择,联接或排序外部表数据。 您也可以为外部表创建视图。 可读外部表上不允许DML操作(UPDATE,INSERT,DELETE或TRUNCATE),并且您不能在可读外部表上创建索引。
CREATE WRITABLE EXTERNAL TABLE或CREATE WRITABLE EXTERNAL WEB TABLE在 YMatrix 数据库中创建新的可写外部表定义。 可写的外部表通常用于将数据库中的数据卸载到一组文件或命名管道中。 可写的外部Web表也可以用于将数据输出到可执行程序。 可写的外部表也可以用作 YMatrix 并行MapReduce计算的输出目标。 一旦定义了可写外部表,就可以从数据库表中选择数据并将其插入可写外部表中。 可写的外部表仅允许INSERT操作 – 不允许执行SELECT,UPDATE,DELETE或TRUNCATE。
常规外部表和外部Web表之间的主要区别在于它们的数据源。 常规可读的外部表访问静态平面文件,而外部Web表访问动态数据源 - 在Web服务器上或通过执行OS命令或脚本。
READABLE | WRITABLE
WEB
TEMPORARY | TEMP
table_name
column_name
LIKE other_table
data_type
LOCATION ('protocol://[host[:port]]/path/file' [, ...])
ON MASTER
EXECUTE 'command' [ON ...]
FORMAT 'TEXT | CSV' (options)
FORMAT 'CUSTOM' (formatter=formatter_specification)
DELIMITER
NULL
ESCAPE
NEWLINE
HEADER
QUOTE
FORCE NOT NULL
FORCE QUOTE
FILL MISSING FIELDS
OPTIONS key 'value'[, key' value' ...]
ENCODING 'encoding'
LOG ERRORS [PERSISTENTLY]
SEGMENT REJECT LIMIT count [ROWS | PERCENT]
DISTRIBUTED BY ({column [opclass]}, [ ... ] )
DISTRIBUTED RANDOMLY
在端口8081的后台启动gpfdist文件服务器程序,以服务目录/var/data/staging中的文件:
gpfdist -p 8081 -d /var/data/staging -l /home/mxadmin/log &
使用gpfdist协议和gpfdist目录中找到的所有文本格式文件(*.txt)创建一个名为ext_customer的可读外部表。 使用竖线(|)作为列定界符,并使用空白作为NULL来格式化文件。 还要以单行错误隔离模式访问外部表:
CREATE EXTERNAL TABLE ext_customer
(id int, name text, sponsor text)
LOCATION ( 'gpfdist://filehost:8081/*.txt' )
FORMAT 'TEXT' ( DELIMITER '|' NULL ' ')
LOG ERRORS SEGMENT REJECT LIMIT 5;
创建与上述相同的可读外部表定义,但使用CSV格式的文件:
CREATE EXTERNAL TABLE ext_customer
(id int, name text, sponsor text)
LOCATION ( 'gpfdist://filehost:8081/*.csv' )
FORMAT 'CSV' ( DELIMITER ',' );
使用file协议和一些带有标题行的CSV格式的文件,创建一个名为ext_expenses的可读外部表:
CREATE EXTERNAL TABLE ext_expenses (name text, date date,
amount float4, category text, description text)
LOCATION (
'file://seghost1/dbfast/external/expenses1.csv',
'file://seghost1/dbfast/external/expenses2.csv',
'file://seghost2/dbfast/external/expenses3.csv',
'file://seghost2/dbfast/external/expenses4.csv',
'file://seghost3/dbfast/external/expenses5.csv',
'file://seghost3/dbfast/external/expenses6.csv'
)
FORMAT 'CSV' ( HEADER );
创建一个可读的外部Web表,每个表主机执行一次脚本:
CREATE EXTERNAL WEB TABLE log_output (linenum int, message
text) EXECUTE '/var/load_scripts/get_log_data.sh' ON HOST
FORMAT 'TEXT' (DELIMITER '|');
创建一个名为sales_out的可写外部表,该表使用gpfdist将输出数据写入名为sales.out的文件。 使用竖线(|)作为列定界符,并使用空白作为NULL来格式化文件:
CREATE WRITABLE EXTERNAL TABLE sales_out (LIKE sales)
LOCATION ('gpfdist://etl1:8081/sales.out')
FORMAT 'TEXT' ( DELIMITER '|' NULL ' ')
DISTRIBUTED BY (txn_id);
创建一个可写的外部Web表,将segment接收的输出数据通过管道传输到名为to_adreport_etl.sh的可执行脚本:
CREATE WRITABLE EXTERNAL WEB TABLE campaign_out
(LIKE campaign)
EXECUTE '/var/unload_scripts/to_adreport_etl.sh'
FORMAT 'TEXT' (DELIMITER '|');
使用上面定义的可写外部表来卸载所选数据:
INSERT INTO campaign_out SELECT * FROM campaign WHERE
customer_id=123;
当您指定LOG ERRORS子句时,YMatrix 数据库将捕获读取外部表数据时发生的错误。 您可以查看和管理捕获的错误日志数据。
当使用gpfdist,gpfdists或file协议定义了多个 YMatrix 数据库外部表并访问Linux系统中的同一命名管道时, YMatrix 数据库会将对命名管道的访问限制为单个读取器。 如果第二个读取器尝试访问命名管道,则返回错误。
CREATE EXTERNAL TABLE是 YMatrix 数据库扩展。 SQL标准没有为外部表做任何准备。