2013-06-11 10 views
8
  • Ho una tabella .csv (t1) con colonne: c1, c2, c3 nell'immagazzinaggio Amazon S3
  • voglio copiare che in amazon redshift
  • ho creare la tabella con le colonne: C1, C2, C3, dove tutte le colonne sono annullabili
  • ho copia con il comando:in postgresql redshift posso saltare colonne con la funzione di copia

    copia T1a (c1, c3) da t1

  • Mi aspettavo che copi c1 e c3 da t1 e inserissi il valore nullo predefinito in c2 in modo che una riga in t1a assomigli (c1_rowX, null, c3_rowX).

  • Invece si verifica un errore di tipo perché copia i dati di tipo c2 (tipo stringa) da t1 a c3 (tipo int) di t1a.

  • il comando di copia funziona bene quando non specificare le colonne:

    copia t1a da t1

  • ho incluso un link alla documentazione comando di copia redshift:

http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html

  • m una domanda è un problema con il mio uso di specificare colonne. grazie

risposta

4

dettagliate delle colonne-mappature non sono supportati in COPY direttamente, a meno che Amazon/ParAccel potuto aggiungere qualcosa in più alla loro forchetta PostgreSQL che non è in linea principale.

Quello che in genere si fa in questo caso è un massaggio di script/pad dati - leggere il CSV, trasformarlo come desiderato, quindi inviare la linea attraverso la connessione PostgreSQL a un comando COPY ... FROM STDIN.

In alternativa, è possibile COPY l'intero CSV originale in una tabella, quindi trasformare i dati con un INSERT INTO ... SELECT nella tabella di destinazione reale.

+0

grazie, Craig. Sperando di evitare di copiare l'intero file a causa di problemi di dimensioni e tempi. Potrebbe trasformarsi prima della copia. – Elm

+0

amazon fornisce un modello di script di copia: COPY nome_tabella [(colonna1 [, colonna2, ...])] - dove (colonna1 [, colonna2, ...]) "specifica un elenco di colonne facoltativo per caricare campi di dati in colonne specifiche" – Elm

+0

@Elm Sicuro, ma questo non ti permette di dire 'COPIA tablename (col1, SKIP, col3)' lo fa ... ed è quello che sembra che tu voglia?Anche se Pg supportava il fatto che doveva ancora trasferire tutti i dati per scartare le parti che non volevi, quindi ha molto più senso fare semplicemente questo lato client con uno script di pre-elaborazione. –

10

Se volete saltare parte di pre-elaborazione, è possibile definire la colonna da saltare come CHAR(1) e quindi utilizzare un parametro TRUNCATECOLUMNS ad un comando COPY:

CREATE TABLE t1a (
    c1, 
    c2 CHAR(1), 
    c3 
); 
COPY t1a FROM t1 TRUNCATECOLUMNS 

Il TRUNCATECOLUMNS ignora tutti i dati che è più lungo di definire in uno schema di tabella durante l'importazione, quindi tutti i dati in quella colonna verranno troncati in 1 carattere.

Si tratta di un file di input di pre-elaborazione, ma a volte è necessario un trucco.

Problemi correlati