12.加载和卸载数据
定义外部表-实例
CREATE EXTERNAL TABLE 命令定义一个外部表并且使用LOCATION和FORMAT参数指定外部表数据文件的位置和格式。
这个命令不会加载数据到表中。下面的例子展示了如何使用不同的协议连接到外部数据。
每一个CREATE EXTERNAL TABLE 命令只允许使用一种协议。每一中协议的详细使用情况可以在如下段落的实例中看到。
Example 1 - Starting the Greenplum file server (gpfdist)
在使用gpfdist协议创建外部表之前,gpfdist文件服务程序必须是运行状态。下面的代码在后台使用8081端口启动gpfdist文件服务程序serving files from directory /var/data/staging:
gpfdist -p 8081 -d /var/data/staging -l/home/gpadmin/log &
Example 2—Single Greenplum file server (gpfdist) instance on multipleNIC machine(单gpfdist实例在多nic主机上)
使用gpfdist协议创建一个名为ext_expenses的可读外部表。
文件使用管道符(|)作为列分隔符。
=# CREATE EXTERNAL TABLE ext_expenses (name text,
date date, amount float4, category text,desc1 text )
LOCATION ('gpfdist://etlhost-1:8081/*',
'gpfdist://etlhost-2:8081/*')
FORMAT 'TEXT' (DELIMITER '|');
Example 3—Multiple Greenplum file server (gpfdist) instances(多gpfdist实例)
使用gpfdist协议从以txt为扩展名的所有文件创建一个名为ext_expenses的可读外部表。
文件使用管道符(|)作为列分隔符,空格为null。
=# CREATE EXTERNAL TABLE ext_expenses (name text,
date date, amount float4, category text,desc1 text )
LOCATION ('gpfdist://etlhost-1:8081/*.txt',
'gpfdist://etlhost-2:8082/*.txt')
FORMAT 'TEXT' ( DELIMITER '|' NULL ' ') ;
Example 4—Single Greenplum file server (gpfdist) instance with errorlogging(带错误日志的单gpfdist实例)
使用gpfdist协议从以txt为扩展名的所有文件创建一个名为ext_expenses的可读外部表。
文件使用管道符(|)作为列分隔符,空格为null。
外部表通过单行错误独立模式(single row error isolation mode)被访问。一个错误表(err_customer)被指定。在输入数据中任何格式错误的数据将会附加一个错误描述被丢弃到err_customer中。err_customer可以在后期查询以便于发现错误的原因并且在确定问题后重新加载那些被丢弃的数据。如果错误格式数据在任何指定的节点上的数量大于5(通过SEGMENT REJECT LIMIT值指定),整个外部表操作将会被终止并且没有数据将会被处理。
=# CREATE EXTERNAL TABLE ext_expenses (name text,
date date, amount float4, category text,desc1 text )
LOCATION ('gpfdist://etlhost-1:8081/*.txt',
FORMAT 'TEXT' ( DELIMITER '|' NULL ' ')
LOG ERRORS INTO err_customer SEGMENT REJECTLIMIT 5;
像上面一样创建同样的可读外部表定义,但是使用csv格式的文件:
=# CREATE EXTERNAL TABLE ext_expenses (name text,
date date, amount float4, category text,desc1 text )
LOCATION ('gpfdist://etlhost-1:8081/*.txt',
FORMAT 'CSV' ( DELIMITER ',' );
LOG ERRORS INTO err_customer SEGMENT REJECTLIMIT 5;
Example 5—Hadoop Distributed File Server (HDFS)
使用gphdfs协议创建一个名为ext_expenses的可读外部表。
文件使用管道符(|)作为列分隔符.
=# CREATE EXTERNAL TABLE ext_expenses (name text,
date date, amount float4, category text,desc1 text )
LOCATION('gphdfs://hdfshost-1:8081/data/filename.txt')
FORMAT 'TEXT' (DELIMITER '|');
Note:gphdfs只允许一个文件,文件必须是TEXT格式。
Example 6—Multiple file protocols in CSV format with headerrows
使用file协议创建一个名为ext_expenses的可读外部表。通配符规范对所有文件是不相同的。文件是CSV格式并且有一行表头。
=# CREATE EXTERNAL TABLE ext_expenses (name text,
date date, amount float4, category text,desc1 text )
LOCATION('file://filehost:5432/data/international/*',
'file://filehost:5432/data/regional/*'
'file://filehost:5432/data/supplement/*.csv')
FORMAT 'CSV' (HEADER);
Example 7—Readable Web External Table with Script
创建一个可读的网络外部表通过在每个节点主键执行一次脚本文件。
CREATE EXTERNAL WEB TABLE log_output(linenum int, message text) EXECUTE '/var/load_scripts/get_log_data.sh' ON HOST
FORMAT 'TEXT' (DELIMITER '|');
Example 8—Writable External Table that Writes to a File
创建一个可写的名为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);
Example 9 – Writable External Web Table with Script
创建一个可写的网络外部表,可以通过管道输出接收于在各节点上执行名为to_adreport_etl.sh的脚本文件数据。
CREATE WRITABLE EXTERNAL WEB TABLEcampaign_out
(LIKE campaign)
EXECUTE '/var/unload_scripts/to_adreport_etl.sh'
FORMAT 'TEXT' (DELIMITER '|');
使用上面定义的可写的外部表来卸载查询到的数据
INSERT INTO campaign_out SELECT * FROMcampaign WHERE customer_id=123;