导入和导出固定宽度的数据

导入和导出固定宽度的数据

用Greenplum数据库函数fixedwith_infixedwidth_out为固定宽度的数据指定自定义格式。这些函数已经存在于文件$GPHOME/share/postgresql/cdb_external_extensions.sql中。下面的例子声明一个自定格式,然后调用fixedwidth_in函数来格式化数据。

CREATE READABLE EXTERNAL TABLE students (
name varchar(20), address varchar(30), age int)
LOCATION ('file://<host>/file/path/')
FORMAT 'CUSTOM' (formatter=fixedwidth_in, 
         name='20', address='30', age='4');

下列选项指定如何导入固定宽度的数据。

  • 读取所有数据。

    要装载一行固定宽度数据上的所有域,用户必须按照它们的物理顺序装载它们。用户必须指定域长度,但不能指定开始和结束位置。固定宽度参数中的域名称必须匹配CREATE TABLE命令开头的域列表中的顺序。

  • 设置空白和空值字符的选项。

    拖尾的空白会被默认修剪掉。要保留拖尾的空白,使用preserve_blanks=on选项。用户可以用preserve_blanks=off选项重置拖尾空白选项为默认值。

    使用null='null_string_value'选项来为空值字符指定一个值。

  • 如果用户指定preserve_blanks=on,用户还必须为空值字符定义一个值。
  • 如果用户指定preserve_blanks=off、空值没有定义并且域只包含空白,Greenplum会写一个空值到表中。如果定义了空值,Greenplum会写一个空串到表中。

    使用line_delim='line_ending'参数来指定行结束字符。下面的例子覆盖了大部分情况。E指定了一个转义字符串常量。

    line_delim=E'\n'
    line_delim=E'\r'
    line_delim=E'\r\n'
    line_delim='abc'