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.
- 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.
| 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.
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
COPY [BINARY] table
FROM { 'file name' | stdin }
[ [USING] DELIMITERS 'delimiter' ]
[ WITH NULL AS 'null string' ];COPY table
TO { 'file name' | stdout }
[ [USING] DELIMITERS 'delimiter' ]
[ WITH NULL AS 'null string' ];Input
Il comando COPY riceve i seguenti input:
| 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
| 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
- 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 \.