COPIA

Restrizione: Non utilizzare il comando COPY. Per le operazioni di caricamento o scaricamento, utilizzare il comando 'nzload o i comandi CREATE EXTERNAL TABLE. Questi comandi sono più veloci e più stabili del comando COPY. Il comando COPY viene documentato qui perché viene utilizzato per le operazioni interne.

Il comando COPY sposta i dati tra tabelle e file standard del file system. Usare il comando COPIA con un nome di file per leggere direttamente da o scrivere su un file.
  • Utilizzare il comando COPIA IN per copiare l'intero contenuto di una tabella in un file. Il comando COPIA IN non agisce sui valori predefiniti delle colonne.
  • Usare il comando COPY FROM per copiare i dati da un file a una tabella. Se nella tabella sono già presenti dei dati, il comando li aggiunge alla tabella.

In SQL92 non esiste un comando COPY. È possibile utilizzare il comando COPY con le tabelle semplici, ma non con le viste.

Quando si utilizza un comando COPY, il sistema legge o scrive un file di testo con una riga per ogni riga della tabella. Il carattere delimitatore separa le colonne (attributi) di una riga. I valori degli attributi sono stringhe che la funzione di output genera per il tipo di dati di ciascun attributo o che sono accettabili per la funzione di input. Il sistema utilizza la stringa a valore nullo specificata al posto degli attributi che sono nulli.

Per impostazione predefinita, una copia di testo utilizza un carattere di tabulazione ("\t") come delimitatore tra i campi. È possibile cambiare il delimitatore di campo in qualsiasi altro carattere singolo con la frase della parola chiave utilizzando i delimitatori. Il sistema utilizza i caratteri di citazione backslash per i campi di dati che corrispondono al carattere delimitatore. La fine dei dati può essere rappresentata da una singola riga contenente un backslash-periodo (\.). Un marcatore di fine dati non è necessario quando si legge da un file UNIX, ma è necessario fornire un marcatore di fine dati quando si copiano dati da o verso un'applicazione client.

Il comando COPY interrompe il funzionamento al primo errore. Per il comando COPY FROM, questo non è un problema. Per il comando COPIA IN, la relazione di destinazione riceve già le righe precedenti. Queste righe non sono visibili o accessibili, ma occupano comunque spazio su disco. Questo potrebbe comportare un notevole spreco di spazio su disco se il guasto si verifica durante un'operazione di copia di grandi dimensioni.

È possibile utilizzare i caratteri backslash (\) nei dati del comando COPY per citare i caratteri dei dati che altrimenti potrebbero essere considerati delimitatori di riga o di colonna. In particolare, i seguenti caratteri devono essere preceduti da un backslash se vengono visualizzati come parte di un valore di attributo: il backslash stesso, la newline e il carattere delimitatore corrente.

Quando si utilizza un nome di file, specificare sempre un percorso assoluto. Il server di database impone un percorso assoluto nel caso del comando COPY TO, ma per il comando COPY FROM si può scegliere di leggere da un file specificato da un percorso relativo. Il sistema interpreta il percorso relativo alla directory di lavoro del server di database, non alla directory di lavoro di Netezza Performance Server SQL.

La tabella seguente descrive le sequenze di backslash del comando COPY FROM.
Tabella 1. COPIARE DA Sequenze di Backslash
Sequenza Rappresenta
\b Backspace (ASCII 8)
\f Avanzamento modulo (ASCII 12)
\n Nuova riga (ASCII 10)
\r Ritorno a capo (ASCII 13)
\t Tab (ASCII 9)
\v Tabulazione verticale (ASCII 11)
\Cifre Il backslash seguito da una o tre cifre ottali specifica il carattere con quel codice numerico.

Il comando COPY TO non emette una sequenza di backslash a cifre ottali, ma utilizza le altre sequenze elencate nella tabella precedente per i caratteri di controllo.

Limitazione: Non aggiungere una barra rovesciata prima di un carattere di dati N o di un punto (.). Tali coppie vengono scambiate per la stringa nulla predefinita o per il marcatore di fine dati. Qualsiasi altro carattere backslash non menzionato nella tabella precedente viene considerato come rappresentante di se stesso.

Le applicazioni che generano i dati del comando COPY convertono le newline dei dati in sequenze \n e i ritorni a capo in sequenze \r.

La fine di ogni riga è contrassegnata da un newline in stile UNIX ("\n"). Il comando COPIA DA non funziona correttamente con un file che contiene newline in stile DOS o Mac.

Sintassi

Sintassi per l'input proveniente da un'applicazione client:
COPY [BINARY] table 
    FROM { 'file name' | stdin }
    [ [USING] DELIMITERS 'delimiter' ]
    [ WITH NULL AS 'null string' ];
Sintassi per l'output che viene inviato a un'applicazione client:
COPY table 
    TO { 'file name' | stdout }
    [ [USING] DELIMITERS 'delimiter' ]
    [ WITH NULL AS 'null string' ];

Input

Il comando COPY riceve i seguenti input:

Tabella 2. COPIA Ingresso
Immissione Descrizione
BINARIO Modifica il comportamento della formattazione dei campi. Impone che tutti i dati vengano memorizzati o letti in formato binario anziché testuale.
delimitatore Il carattere che separa i campi all'interno di ogni riga del file.
nome file Il nome del percorso assoluto del file di input o di output.
stringa null La stringa che rappresenta un valore NULL. L'impostazione predefinita è "\N" (backslash-N).

In caso di copia, qualsiasi elemento di dati che corrisponde a questa stringa viene memorizzato come valore NULL. Assicurarsi di utilizzare la stessa stringa usata per la copia.

stdin L'input deve provenire dall'applicazione client.
stdout L'output deve essere inviato all'applicazione client.
tabella Il nome di una tabella esistente.

Output

Il comando COPY ha le seguenti uscite.
Tabella 3. COPIA uscite
Emissione Descrizione
COPY Il sistema restituisce questo messaggio se la copia viene completata con successo.
ERROR: reason Se la copia non riesce, il sistema restituisce questo messaggio con il motivo del fallimento.

Privilegi

È necessario avere il privilegio Select su tutte le tabelle i cui valori vengono letti dal comando COPY. È necessario disporre dei privilegi di inserimento o di aggiornamento di una tabella in cui i valori vengono inseriti con il comando COPY. Il server del database deve disporre delle autorizzazioni appropriate per qualsiasi file letto o scritto dal comando COPY.

Utilizzo

Di seguito sono riportati alcuni esempi di utilizzo.
  • Copia una tabella nell'output standard utilizzando una barra verticale (|) come delimitatore di campo:
    MYDB.SCH1(USER)=> COPY country TO stdout USING DELIMITERS '|';
  • Copiare i dati da un file UNIX nella tabella Paese:
    MYDB.SCH1(USER)=> COPY country FROM
    '/usr1/proj/bray/sql/country_data';
  • Questo è un campione di dati adatto a essere copiato in una tabella da stdin (quindi ha la sequenza di terminazione sull'ultima riga):
    AF      AFGHANISTAN
    AL      ALBANIA
    DZ      ALGERIA
    ZM      ZAMBIA
    ZW      ZIMBABWE
    \.