file://协议

file://协议

file://协议被用在一个指定操作系统文件的URI中。该URI包括主机名、端口和该文件的路径。每个文件都必须位于一个Segment主机上由Greenplum超级用户(gpadmin)可访问的位置。该URI中使用的主机名必须匹配gp_segment_configuration系统目录表中注册的一个Segment主机名。

如例子中所示,LOCATION子句可以有多个URI:
CREATE EXTERNAL TABLE ext_expenses (
   name text, date date, amount float4, category text, desc1 text ) 
LOCATION ('file://host1:5432/data/expense/*.csv', 
          'file://host2:5432/data/expense/*.csv', 
          'file://host3:5432/data/expense/*.csv') 
FORMAT 'CSV' (HEADER); 
用户在LOCATION子句中指定的URI的数量就是将并行工作访问外部表的Segment实例的数量。对于每一个URI,Greenplum为该文件指派一个指定主机上的主要Segment。为了装载数据时的最大并行化,可将数据与主要Segment数量相同的大小均等的文件。这会保证所有的Segment都参与到装载中。每个Segment主机上的外部文件不能超过该主机上主要Segment实例的数量。例如,如果用户的阵列的每个Segment主机上有四个主要Segment实例,用户可以在每个Segment主机上放置四个外部文件。基于file://协议的表只能是可读表。
系统视图pg_max_external_files显示每个外部表允许多少个外部表文件。这个视图列出了使用file:// protocol协议时每个Segment主机上可用的文件槽。该视图只适用于file:// protocol。例如:
SELECT * FROM pg_max_external_files;