Esempio di definizione di formato a lunghezza fissa

Questo argomento fornisce un esempio di record di dati di esempio, il layout della colonna corrispondente e la definizione della tabella esterna corrispondente.

Di seguito è riportato un esempio di record di dati:
20011228YF2001122814313425 Forest St Marlborough  MA017525083828200600
Il record è definito dalla seguente disposizione delle colonne:
  • Colonne 1 - 8: formato data YYYYMMDD. Nullo quando il valore è '99991231'.
  • Colonna 9: booleano S/N. Nullo quando il valore è uno spazio (' ').
  • Colonna 10: T/F booleano. Nullo quando il valore è uno spazio (' ').
  • Colonne 11 - 24: formato dell'ora YYYYMMDDHHMMSS. Nullo quando il valore è '99991231000000'.
  • Colonne 25-39: indirizzo del carattere. Nullo se il valore è costituito da tutti gli spazi.
  • Colonne 40 - 52: Città del personaggio. Nullo se il valore è '****NULL*****'.
  • Colonne 53 - 54: Stato del carattere. Nullo quando il valore è '##'.
  • Colonne 55 - 59: Numero di codice postale. Nullo quando il valore è composto da tutti zeri.
  • Colonne 60-68: telefono del personaggio. Nullo quando il valore è composto da tutti zeri.
  • Colonne 69-72: Numero(3,2). Ad esempio, 600 è 6.00. Mai nullo.
  • Colonna 73: Newline alla fine del record.
Di seguito è riportato un esempio di definizione di tabella esterna per questi dati:
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 ;