创建GDS外表
操作步骤
- 根据规划导出数据中规划的路径确定外表参数location的值。
- Remote模式
请通过URL方式设置参数“location”,用于指定导出的数据文件存放路径。
- 不需要指定文件名。
- 当有多个路径时,只有第一个路径有效。
示例:
GDS数据服务器IP为192.168.0.90,假定启动GDS时设置的侦听端口为5000,设置的导出后文件存放目录为“/output_data/”。
根据以上情况,在创建外表时,指定参数“location”为“gsfs://192.168.0.90:5000/”。
- Local模式
设置参数“location”,用于指定导出的数据文件存放路径,不需要指定文件名。
示例:
数据源文件可通过本地文件方式访问,计划将导出数据文件存放在“/output_data/”目录中。
根据以上情况,在创建外表时,指定参数“location”为“file:///output_data/”。
- Remote模式
- 梳理待导出数据的格式信息,确定创建外表时使用的数据格式参数的值。格式参数详细介绍,请参见数据格式参数。
- 根据前面步骤确定的参数,创建GDS外表。外表的创建语法以及详细使用,请参考CREATE FOREIGN TABLE (导入导出)。
示例
- 示例1:创建GDS导出外表foreign_tpcds_reasons,待导出数据格式为CSV,用于接收数据服务器上的数据。
其中设置的导出模式信息如下所示:
规划数据服务器与集群处于同一内网,数据服务器IP为192.168.0.90,待导出的数据文件格式为CSV,选择并行导出模式为Remote模式。
假定启动GDS时,规划导出的数据文件存放目录为“/output_data/”,GDS侦听端口为5000,所以设置参数“location”为“gsfs://192.168.0.90:5000/”。
设置导出的数据格式信息,参数设置如下所示:
- 导出数据文件格式(format)为CSV。
- 编码格式(encoding)为UTF-8。
- 字段分隔符(delimiter)为E'\x20'。
- 引号字符(quote)为0x1b。
- 数据文件中空值(null)为没有引号的空字符串。
- 逃逸字符(escape)为默认值双引号。
- 数据文件是否包含标题行(header)为默认值false,即导出时数据文件第一行被识别为数据。
- 导出数据文件换行符样式(EOL)为0X0A。
创建的外表如下所示:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
openGauss=# CREATE FOREIGN TABLE foreign_tpcds_reasons ( r_reason_sk integer not null, r_reason_id char(16) not null, r_reason_desc char(100) ) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://192.168.0.90:5000/', FORMAT 'CSV', DELIMITER E'\x20', QUOTE E'\x1b', NULL '', EOL '0x0a' ) WRITE ONLY;
- 示例2:创建GDS导出外表foreign_tpcds_reasons,导出数据格式为FIXED,用于接收数据服务器上的数据。
其中设置的导出模式信息如下所示:
规划数据服务器与集群处于同一内网,数据服务器IP为192.168.0.90,计划导出的数据文件格式为CSV,选择并行导出模式为Remote模式。
假定启动GDS时,规划导出的数据文件存放目录为“/output_data/”,GDS侦听端口为5000,所以设置参数“location”为“gsfs://192.168.0.90:5000/”。
设置导出的数据格式信息,参数设置如下所示:
- 导出数据文件格式(format)为FIXED。
- 编码格式(encoding)为UTF-8。
- 数据文件是否包含标题行(header)为默认值false,即指定导出数据文件是不包含标题行。
- 定义每一个字段在数据文件中的位置POSITION(offset,length)。其中offset为该字段在文件中的起始位置,length为该字段的长度,单位为字节。
字段“r_reason_sk”,数据类型为integer,使用以下查询所得占用的最大字节数为2,所以设置的起始位置为1,长度为2。
字段“r_reason_id”,数据类型为character varying(16),使用以下查询所得占用的最大字节数为16,所以设置的起始位置为字段“r_reason_sk”的offset+length=1+2=3,长度为16。
字段“r_reason_desc”,数据类型为character varying(100),使用以下查询所得占用的最大字节数为100,所以设置的起始位置为字段“r_reason_id”的offset+length=3+16=19,长度为100。
1 2 3 4 5
openGauss=# SELECT max(lengthb(r_reason_sk)),max(lengthb(r_reason_id)),max(lengthb(r_reason_desc)) FROM reasons; max | max | max -----+-----+----- 2 | 16 | 100 (1 row)
- 导出数据文件换行符样式(EOL)为0X0A。
创建的外表如下所示:1 2 3 4 5 6 7 8 9 10 11 12
openGauss=# CREATE FOREIGN TABLE foreign_tpcds_reasons ( r_reason_sk integer position(1,2), r_reason_id char(16) position(3,16), r_reason_desc char(100) position(19,100) ) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://192.168.0.90:5000/', FORMAT 'FIXED', ENCODING 'utf8', EOL '0x0a' ) WRITE ONLY;