Parametri di conversione dei dati - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Parametri di conversione dei dati

Mentre carica la tabella, COPY tenta di convertire in modo implicito le stringhe nei dati di origine nel tipo di dati della colonna di destinazione. Se hai necessità di specificare una conversione diversa dal comportamento predefinito o se la conversione predefinita dà luogo a errori, è possibile gestire le conversioni dei dati specificando i seguenti parametri. Per ulteriori informazioni sulla sintassi dei parametri, consulta Sintassi di COPY.

Parametri di conversione dei dati
ACCEPTANYDATE

Consente il caricamento di qualsiasi formato di data, compresi i formati non validi come 00/00/00 00:00:00 senza generare un errore. Questo parametro è valido solo alle colonne TIMESTAMP e DATE. Utilizza sempre ACCEPTANYDATE con il parametro DATEFORMAT. Se il formato della data per i dati non corrisponde alla specifica DATEFORMAT, Amazon Redshift inserisce un valore NULL nel campo.

ACCEPTINVCHARS [AS] ['replacement_char']

Consente il caricamento di dati nelle colonne VARCHAR anche se i dati contengono caratteri UTF-8 non validi. Quando è specificato ACCEPTINVCHARS, COPY sostituisce ogni carattere UTF-8 non valido con una stringa di uguale lunghezza composta dal carattere specificato da replacement_char. Ad esempio, se il carattere sostitutivo è "^", un carattere a tre byte non valido verrà sostituito con "^^^".

Il carattere sostitutivo può essere qualsiasi carattere ASCII tranne NULL. Il valore predefinito è un punto interrogativo ( ? ). Per informazioni sui caratteri UTF-8 non validi, consultare Errori di caricamento di caratteri multibyte.

COPY restituisce il numero di righe che contenevano caratteri UTF-8 non validi e aggiunge una voce alla tabella di sistema STL_REPLACEMENTS per ogni riga interessata, fino a un massimo di 100 righe per ogni porzione di nodo. Vengono sostituiti anche altri caratteri UTF-8 non validi, ma gli eventi di sostituzione non vengono registrati.

Se non è specificato ACCEPTINVCHARS, COPY restituisce un errore ogni volta che incontra un carattere UTF-8 non valido.

ACCEPTINVCHARS è valido solo per le colonne VARCHAR.

BLANKSASNULL

Carica come NULL i campi vuoti, composti solo da caratteri di spazio. Questa opzione è valide solo alle colonne CHAR e VARCHAR. I campi vuoti per altri tipi di dati, come ad esempio INT, vengono sempre caricati come NULL. Ad esempio, una stringa che contiene tre caratteri spazio in successione (e nessun altro carattere) viene caricata come NULL. Il comportamento predefinito, senza questa opzione, è di caricare i caratteri spazio così come sono.

DATEFORMAT [AS] {'dateformat_string' | 'auto' }

Se non è specificato nessun DATEFORMAT, il formato predefinito è 'YYYY-MM-DD'. Ad esempio, un formato valido alternativo è 'MM-DD-YYYY'.

Se il comando COPY non riconosce il formato dei valori di data e ora o se i valori di data e ora utilizzano formati diversi, utilizza l'argomento 'auto' con il parametro DATEFORMAT o TIMEFORMAT. L'argomento 'auto' riconosce diversi formati che non sono supportati quando si usa una stringa DATEFORMAT e TIMEFORMAT. La parola chiave 'auto'' prevede una distinzione tra lettere maiuscole e minuscole. Per ulteriori informazioni, consulta Utilizzo del riconoscimento automatico con DATEFORMAT e TIMEFORMAT.

Il formato della data può includere informazioni sull'ora (ore, minuti, secondi), ma tali informazioni vengono ignorate. La parola chiave AS è facoltativa. Per ulteriori informazioni, consulta Stringhe DATEFORMAT e TIMEFORMAT.

EMPTYASNULL

Indica che Amazon Redshift dovrebbe caricare i campi vuoti CHAR e VARCHAR come NULL. I campi vuoti per altri tipi di dati, come ad esempio INT, vengono sempre caricati come NULL. I campi vuoti si hanno quando i dati contengono due delimitatori in successione senza caratteri tra i delimitatori. EMPTYASNULL e NULL AS '' (stringa vuota) producono lo stesso comportamento.

ENCODING [AS] file_encoding

Specifica il tipo di codifica dei dati di caricamento. Il comando COPY converte i dati dalla codifica specificata a UTF-8 durante il caricamento.

I valori validi per file_encoding sono i seguenti:

  • UTF8

  • UTF16

  • UTF16LE

  • UTF16BE

Il valore predefinito è UTF8.

I nomi dei file di origine devono utilizzare la codifica UTF-8.

I seguenti file devono utilizzare la codifica UTF-8, anche se per i dati di caricamento è specificata una codifica diversa:

  • File manifesto

  • File JSONPath

Le stringhe di argomento con i seguenti parametri devono utilizzare UTF-8:

  • FIXEDWIDTH 'fixedwidth_spec'

  • ACCEPTINVCHARS 'replacement_char'

  • DATEFORMAT 'dateformat_string'

  • TIMEFORMAT 'timeformat_string'

  • NULL AS 'null_string'

I file di dati a larghezza fissa devono utilizzare la codifica UTF-8. Le larghezze dei campi si basano sul numero di caratteri, non sul numero di byte.

Tutti i dati di caricamento devono utilizzare la codifica specificata. Se COPY incontra una codifica diversa, salta il file e restituisce un errore.

Se specifichi UTF16, i dati devono avere un BOM (byte order mark). Se sai se i dati UTF-16 sono little-endian (LE) o big-endian (BE), è possibile utilizzare UTF16LE o UTF16BE indipendentemente dalla presenza di un BOM.

ESCAPE

Quando si specifica questo parametro, il carattere di barra rovesciata (\) nei dati di input viene trattato come un carattere di escape. Il carattere che segue immediatamente il carattere di barra rovesciata viene caricato nella tabella come parte del valore corrente della colonna, anche se è un carattere che normalmente ha uno scopo particolare. Ad esempio, è possibile utilizzare questo parametro per creare una sequenza di escape con il carattere delimitatore, un punto interrogativo, un carattere newline incorporato o il carattere di escape stesso quando uno di questi caratteri è una parte lecita di un valore di colonna.

Se specifichi il parametro ESCAPE in combinazione con il parametro REMOVEQUOTES, è possibile creare una sequenza di escape e mantenere le virgolette (' o ") che altrimenti potrebbero essere rimosse. La stringa nulla predefinita, \N, funziona così com'è, ma è possibile anche creare una sequenza di escape nei dati di input come \\N. Finché non specifichi una stringa nulla alternativa con il parametro NULL AS, \N e \\N produrranno gli stessi risultati.

Nota

Non è possibile eseguire l'escape del carattere di controllo 0x00 (NUL) e questo carattere deve essere rimosso dai dati di input o convertito. Questo carattere viene trattato come un marcatore EOR (end of record), causando il troncamento del resto del record.

Non è possibile utilizzare il parametro ESCAPE per caricamenti FIXEDWIDTH e non è possibile specificare il carattere di escape stesso; il carattere di escape è sempre il carattere di barra rovesciata. Inoltre, devi assicurarti che i dati di input contengano il carattere di escape nei punti appropriati.

Di seguito sono riportati alcuni esempi di dati di input e i dati caricati risultanti quando viene specificato il parametro ESCAPE. Il risultato per la riga 4 presuppone che sia stato specificato anche il parametro REMOVEQUOTES. I dati di input sono costituiti da due campi delimitati da pipe:

1|The quick brown fox\[newline] jumped over the lazy dog. 2| A\\B\\C 3| A \| B \| C 4| 'A Midsummer Night\'s Dream'

I dati caricati nella colonna 2 assomigliano a questi:

The quick brown fox jumped over the lazy dog. A\B\C A|B|C A Midsummer Night's Dream
Nota

L'applicazione del carattere di escape ai dati di input per un caricamento è responsabilità dell'utente. Un'eccezione a questo requisito è quando ricarichi dati che erano stati precedentemente scaricati con il parametro ESCAPE. In questo caso, i dati conterranno già i caratteri di escape necessari.

Il parametro ESCAPE non interpreta la notazione ottale, esadecimale, Unicode o altra sequenza di escape. Ad esempio, se i dati di origine contengono il valore di avanzamento della linea ottale (\012) e si prova a caricare questi dati con il parametro ESCAPE, Amazon Redshift carica il valore 012 nella tabella e non interpreta questo valore come un avanzamento di linea in una sequenza di escape.

Per inserire in una sequenza di escape i caratteri newline nei dati che provengono dalle piattaforme Microsoft Windows, potresti dover utilizzare due caratteri di escape: uno per il ritorno a capo e uno per l'avanzamento di linea. In alternativa, è possibile rimuovere il ritorno a capo prima di caricare il file (ad esempio, utilizzando l'utilità dos2unix).

EXPLICIT_IDS

Utilizza EXPLICIT_IDS con tabelle che hanno colonne IDENTITY se desideri sostituire i valori generati automaticamente con valori espliciti dai file di dati sorgente per le tabelle. Se il comando include un elenco di colonne, tale elenco deve includere le colonne IDENTITY per poter utilizzare questo parametro. Il formato dei dati per i valori di EXPLICIT_IDS deve corrispondere al formato IDENTITY specificato dalla definizione CREATE TABLE.

Quando esegui un comando COPY su una tabella con l'opzione EXPLICIT_IDS, Amazon Redshift non controlla più l'univocità delle colonne IDENTITY della tabella.

Se una colonna è definita con GENERATED BY DEFAULT AS IDENTITY, può esser copiata. i valori vengono generati o aggiornati con i valori forniti dall'utente. L'opzione EXPLICIT_IDS non è obbligatoria. COPY non aggiorna la filigrana ad elevata identità.

Per un esempio di comando COPY con EXPLICIT_IDS, consulta Caricamento di VENUE con valori espliciti per una colonna IDENTITY.

FILLRECORD

Consente di caricare file di dati quando mancano colonne contigue alla fine di alcuni record. Le colonne mancanti vengono caricate come NULL. Per i formati testo e CSV, se la colonna mancante è una colonna VARCHAR, vengono caricate stringhe a lunghezza zero anziché NULL. Per caricare NULL nelle colonne VARCHAR dal testo e dal CSV, specificare la parola chiave EMPTYASNULL. La sostituzione NULL funziona solo se la definizione della colonna permette dei NULL.

Per esempio, se la definizione della tabella contiene quattro colonne CHAR che possono contenere dei null e un record contiene i valori apple, orange, banana, mango, il comando COPY può caricare e compilare un record che contiene solo i valori apple, orange. I valori CHAR mancanti saranno caricati come valori NULL.

IGNOREBLANKLINES

Ignora le righe vuote che contengono solo un avanzamento di linea in un file di dati e non tenta di caricarle.

IGNOREHEADER [ AS ] number_rows

Tratta il number_rows specificato come intestazione del file e non carica le righe. Usa IGNOREHEADER per saltare le intestazioni di tutti i file in un caricamento parallelo.

NULL AS 'null_string'

Carica i campi che fanno corrispondere null_string a NULL, dove null_string può essere una stringa qualsiasi. Se i dati includono un terminatore null, chiamato anche NUL (UTF-8 0000) o zero binario (0x000), COPY lo tratta come qualsiasi altro carattere. Ad esempio, un record contenente '1' || NUL || '2' viene copiato come stringa di lunghezza da 3 byte. Se un campo contiene solo NUL, è possibile utilizzare NULL AS per sostituire il terminatore null con NULL specificando '\0' o '\000', ad esempio NULL AS '\0' o NULL AS '\000'. Se un campo contiene una stringa che termina con NUL ed è specificato NULL AS, la stringa viene inserita con NUL alla fine. Non utilizzare '\n' (newline) per il valore null_string. Amazon Redshift riserva '\n' per l'utilizzo come delimitatore di linea. La null_string predefinita è '\N'.

Nota

Se tenti di caricare i nulli in una colonna definita come NON NULL, il comando COPY fallirà.

REMOVEQUOTES

Rimuove le virgolette intorno alle stringhe nei dati in entrata. Tutti i caratteri compresi tra le virgolette, inclusi i delimitatori, vengono mantenuti. Se una stringa ha una virgoletta iniziale singola o doppia ma non una virgoletta finale corrispondente, il comando COPY non carica quella riga e restituisce un errore. La seguente tabella mostra alcuni semplici esempi di stringhe che contengono virgolette e i valori caricati risultanti.

Stringa di input Valore caricato con opzione REMOVEQUOTES
"Il delimitatore è un carattere pipe (|)" Il delimitatore è un carattere pipe (|)
'Nero' Nero
"Bianco" Bianco
Blu' Blu'
'Blu Valore non caricato: condizione di errore
"Blu Valore non caricato: condizione di errore
' ' 'Nero' ' ' ' 'Nero' '
' ' <white space>
ROUNDEC

Arrotonda i valori numerici quando la scala del valore di input è maggiore della scala della colonna. Per impostazione predefinita, COPY tronca i valori quando necessario per adattarli alla scala della colonna. Per esempio, se un valore di 20.259 viene caricato in una colonna DECIMAL(8,2), COPY tronca il valore a 20.25 per impostazione predefinita. Se è specificato ROUNDEC, COPY arrotonda il valore a 20.26. Il comando INSERT arrotonda sempre i valori quando necessario per farli corrispondere alla scala della colonna, quindi un comando COPY con il parametro ROUNDEC si comporta come un comando INSERT.

TIMEFORMAT [AS] {'timeformat_string' | 'auto' | 'epochsecs' | 'epochmillisecs' }

Specifica il formato dell'ora. Se non è specificato alcun TIMEFORMAT, il formato predefinito è YYYY-MM-DD HH:MI:SS per le colonne TIMESTAMP o YYYY-MM-DD HH:MI:SSOF per le colonne TIMESTAMPTZ, dove OF è l'offset rispetto all'UTC (Tempo coordinato universale). Non è possibile includere uno specificatore di fuso orario in timeformat_string. Per caricare i dati TIMESTAMPTZ in un formato diverso da quello predefinito, specificare "auto"; per maggiori informazioni, consultare Utilizzo del riconoscimento automatico con DATEFORMAT e TIMEFORMAT. Per maggiori informazioni su timeformat_string, consultare Stringhe DATEFORMAT e TIMEFORMAT.

L'argomento 'auto' riconosce diversi formati che non sono supportati quando si usa una stringa DATEFORMAT e TIMEFORMAT. Se il comando COPY non riconosce il formato dei valori di data e ora o se i valori di data e ora utilizzano formati diversi uno dall'altro, utilizza l'argomento 'auto' con il parametro DATEFORMAT o TIMEFORMAT. Per ulteriori informazioni, consulta Utilizzo del riconoscimento automatico con DATEFORMAT e TIMEFORMAT.

Se i dati sorgente sono rappresentati come tempo dell'epoca, cioè il numero di secondi o millisecondi dal 1° gennaio 1970, 00:00:00 UTC, specifica 'epochsecs' o 'epochmillisecs'.

Le parole chiave 'auto', 'epochsecs' e 'epochmillisecs' prevedono una distinzione tra lettere maiuscole e minuscole.

La parola chiave AS è facoltativa.

TRIMBLANKS

Rimuove i caratteri di spazio finale da una stringa VARCHAR. Questo parametro è valido solo per le colonne con un tipo di dati VARCHAR.

TRUNCATECOLUMNS

Tronca i dati nelle colonne al numero appropriato di caratteri in modo che corrispondano alle specifiche della colonna. Si applica solo alle colonne con un tipo di dati VARCHAR o CHAR e alle righe di dimensioni fino a 4 MB.