创立内部表

创立一个内部表,应用CREATE EXTERNAL TABLE命令。在这个命令里,需申明新表名称,各列名称及其数据类型,基于命令的EXECUTE子句或基于URL的LOCATION子句的内部数据起源,数据格式。

当创立一个可读内部表时,location子句需指定应用一种协定指向内部数据源,format子句需指定TEXT、CSV、ORC或CUSTOM用户自定义文本格式。比方:应用gpfdist协定在gpfdist目录中找到(.txt)格局的所有文本文件,来创立一个名为ext_customer的可读内部表。这些文件的格局是以‘|’作为列分隔符,空白空间为空。还能够在单行谬误隔离模式下拜访内部表的SQL定义:
CREATE EXTERNAL TABLE ext_customer(id int, name text, sponsor text)LOCATION ( 'gpfdist://filehost:8081/*.txt' )FORMAT 'TEXT' ( DELIMITER '|' NULL ' ')LOG ERRORS INTO err_customer SEGMENT REJECT LIMIT 5;

或者创立与下面雷同的可读内部表定义,但应用CSV格式文件的示例:
CREATE EXTERNAL TABLE ext_customer(id int, name text, sponsor text)LOCATION ( 'gpfdist://filehost:8081/*.csv' )FORMAT 'CSV' ( DELIMITER ',' );

当创立一个可读web内部表时,除location子句形式指定内部数据形式外,还能够应用execute子句运行指定脚本(脚本必须位于所有segment主机上的同一地位)来拜访内部数据源。比方:在第五个虚构节点执行指定脚本创立一个内部表的SQL定义:
CREATE EXTERNAL WEB TABLE log_output (linenum int,message text)EXECUTE '/var/load_scripts/get_log_data.sh' ON 5FORMAT 'TEXT' (DELIMITER '|');

当创立一个可写内部表时,location子句应用上述协定之一指向内部数据源,format子句指定TEXT、CSV、ORC或CUSTOM用户自定义文本格式。例如:以下SQL命令显示如何创立可写hdfs内部表以自在加载、卸载、查问和插入数据:
CREATE WRITABLE EXTERNAL TABLE tbexternal (a int,b decimal(10,2),t text,d date)LOCATION ('hdfs://host1:port1/tbexternaldir')FORMAT 'csv' (DELIMITER '|')LOG ERRORS INTO err_tbexternal SEGMENT REJECT LIMIT 5;

此表反对读取和写入,门路’/tbexternaldir’中的所有文件都能够读取以进行查问或加载,用户还能够通过将数据写入同一门路’/tbexternaldir’来卸载或将数据插入此表。操作此外部表的一些示例如下所示:
INSERT INTO tbexternal SELECT FROM tb;INSERT INTO tbexternal SELECT FROM tb WHERE t like 'test%';INSERT INTO tb SELECT FROM tbexternal;INSERT INTO tb SELECT FROM tbexternal WHERE t like 'test%';SELECT a,b FROM tbexternal WHERE b > 10;SELECT T1.a, T1.d FROM tbexternal T1, tbinternal T2 WHERE T1.t = T2.t;

以下命令显示如何以orc格局创立可写hdfs内部表:
CREATE WRITABLE EXTERNAL TABLE orcexternal (p text,q text)LOCATION ('hdfs://host1:port1/orcexternaldir')FORMAT 'ORC' (COMPRESSTYPE 'lz4');

以下命令显示如何以orc格局创立可写hive内部表:
CREATE WRITABLE EXTERNAL TABLE orcexternal (p text,q text)LOCATION ('hive://host1:port1/dbname/orctablename’)FORMAT 'ORC' (COMPRESSTYPE 'lz4');

当创立一个可写Web内部表时,应用location子句指定内部数据源或execute子句指定执行脚本,应用format子句指定TEXT、CSV、ORC或CUSTOM用户本人定义的文本格式。例如:创立一个可写的内部web表,该表将segment接管到的输入数据管道化到名为_adreport_etl.sh的可执行脚本:
CREATE WRITABLE EXTERNAL WEB TABLE campaign_out (LIKE campaign)EXECUTE '/var/unload_scripts/to_adreport_etl.sh'FORMAT 'TEXT' (DELIMITER '|');