file://协议

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

如例子中所示,LOCATION子句可以有多个URI:

  1. CREATE EXTERNAL TABLE ext_expenses (
  2. name text, date date, amount float4, category text, desc1 text )
  3. LOCATION ('file://host1:5432/data/expense/*.csv',
  4. 'file://host2:5432/data/expense/*.csv',
  5. 'file://host3:5432/data/expense/*.csv')
  6. 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。例如:

  1. SELECT * FROM pg_max_external_files;

上级主题: 使用基于文件的外部表