固定长度格式定义示例
本主题提供了示例数据记录、相应的列布局和相应的外部表定义。
以下是一个数据记录示例:
20011228YF2001122814313425 Forest St Marlborough MA017525083828200600
记录由以下列布局定义:
- 第 1 - 8 列:日期格式为 YYYYMMDD。 当值为 "99991231 "时为空。
- 第 9 栏:布尔 Y/N。 当值为空格('')时为空。
- 第 10 栏:布尔 T/F。 当值为空格('')时为空。
- 第 11 - 24 列:时间戳格式 YYYYMMDDHHMMSS。 当值为 "99991231000000 "时为空。
- 第 25 - 39 列:字符地址。 当值全部为空格时为空。
- 第 40 - 52 列:字符城市。 当值为'****NULL*****'时为空。
- 第 53 - 54 列:字符状态。 当值为 "##"时为空。
- 第 55 - 59 栏:数字邮政编码。 当值为零时为空。
- 第 60 - 68 列:字符电话。 当值为零时为空。
- 第 69 - 72 列:Number(3,2). 例如,600 是6.00。 从不空。
- 第 73 栏:记录末尾换行。
以下是该数据的外部表定义示例:
CREATE EXTERNAL TABLE sample_ext (
Col01 DATE ,
Col09 BOOL ,
/* Skipped col10 */
Col11 TIMESTAMP,
Col26 CHAR(12),
Col38 CHAR(10),
Col48 CHAR(2),
Col50 INT4,
Col56 CHAR(10),
Col67 CHAR(3) /* Numeric(3,2) cannot be loaded directly */
)
USING (
dataobject('/home/test/sample.fixed')
logdir '/home/test'
recordlength 72 /* Does not include end of record delimiter */
recorddelim '
' /* This is actually a newline between the single quotes; really not needed because newline is default */
format 'fixed'
layout (
Col01 DATE YMD '' bytes 8 nullif &='99991231',
Col09 BOOL Y_N bytes 1 nullif &=' ',
FILLER CHAR(1) Bytes 1, /* Was col10 space */
Col11 TIMESTAMP YMD '' 24HOUR '' bytes 14 nullif &='99991231000000',
Col26 CHAR(15) bytes 15 nullif &=' ', /* 15 spaces */
Col38 CHAR(13) bytes 13 nullif &='****NULL*****' ,
Col48 CHAR(2) bytes 2 nullif &='##' ,
Col50 INT4 bytes 5 nullif &='00000' ,
Col56 CHAR(10) bytes 10 nullif &='0000000000',
Col67 CHAR(3) bytes 3 /* Cannot load this directly, so insert-select statement used */
) /* end layout */
); /* end external table definition. */
INSERT INTO sampleTable
SELECT
Col01,
Col09,
Col11,
Col26,
Col38,
Col48,
Col50,
Col56,
(Col67/100)::numeric(3,2) as Col67 /* Convert char to numeric(3,2) */
FROM sample_ext ;