COPY (KOPIEREN)
Einschränkung: Verwenden Sie den COPY-Befehl nicht. Verwenden Sie für Lade- oder Entladeoperationen den nzload-Befehl oder CREATE EXTERNAL TABLE-Befehle. Diese Befehle sind schneller und stabiler als der COPY-Befehl. Der COPY-Befehl wird hier dokumentiert, weil er für interne Operationen verwendet wird.
- Mit dem COPY TO-Befehl können Sie den gesamten Inhalt einer Tabelle in eine Datei kopieren. Der COPY TO-Befehl bearbeitet keine Spaltenstandardwerte.
- Mit dem COPY FROM-Befehl können Sie Daten aus einer Datei in eine Tabelle kopieren. Wenn die Tabelle bereits Daten enthält, fügt der Befehl Daten an sie an.
SQL92 unterstützt den COPY-Befehl nicht. Sie können den COPY-Befehl mit einfachen Tabellen, aber nicht mit Ansichten verwenden.
Wenn Sie einen COPY-Befehl verwenden, liest oder schreibt das System eine Textdatei mit einer Zeile pro Tabellenzeile. Das Begrenzungszeichen trennt Spalten (Attribute) in einer Zeile. Die Attributwerte sind Zeichenfolgen, die die Ausgabefunktion für den Datentyp der einzelnen Attribute generiert oder die von der Eingabefunktion verarbeitet werden können. Das System verwendet die angegebene Nullwertzeichenfolge anstelle von Nullattributen.
Bei einer Textkopie wird standardmäßig ein Tabulatorzeichen ("\t") als Begrenzungszeichen zwischen Feldern verwendet. Sie können das Feldbegrenzungszeichen mit der Schlüsselwortphrase über Begrenzungszeichen in ein beliebiges anderes einzelnes Zeichen ändern. Das System verwendet aus Backslashes bestehende Anführungszeichen für Datenfelder, die mit dem Begrenzungszeichen übereinstimmen. Sie können das Ende der Daten durch eine einzelne Zeile mit einem Backslash-Period (\.) darstellen. Eine Datenende-Markierung ist nicht erforderlich, wenn Sie aus einer UNIX-Datei lesen, aber Sie müssen eine Ende-Markierung angeben, wenn Sie Daten in oder aus einer Client-Anwendung kopieren.
Der COPY-Befehl wird beim ersten Fehler gestoppt. Beim COPY FROM-Befehl ist dies kein Problem. Beim COPY TO-Befehl erhält die Zielbeziehung bereits frühere Zeilen. Diese Zeilen können nicht angezeigt werden und es kann auch nicht auf andere Weise auf sie zugegriffen werden, aber sie belegen Festplattenspeicher. Dies kann zu einer großen Menge von unnötig belegtem Festplattenspeicher führen, wenn der Fehler mitten in einer umfangreichen Kopieroperation auftritt.
Sie können Datenzeichen, die andernfalls als Zeilen- oder Spaltenbegrenzungszeichen angesehen werden könnten, mit Backslash-Zeichen (\) in den COPY-Befehlsdaten einschließen. Insbesondere muss vor folgenden Zeichen ein Backslash angegeben werden, wenn sie als Teil eines Attributwerts angezeigt werden: das Backslash-Zeichen selbst, das Zeilenumbruchzeichen und das aktuelle Begrenzungszeichen.
Wenn Sie einen Dateinamen verwenden, geben Sie immer einen absoluten Pfad an. Der Datenbankserver erzwingt im Falle des COPY TO-Befehls einen absoluten Pfad, aber für den COPY FROM-Befehl haben Sie die Option, Daten aus einer Datei zu lesen, die durch einen relativen Pfad angegeben wird. Das System interpretiert den Pfad relativ zum Arbeitsverzeichnis des Datenbankservers, nicht zum Netezza Performance Server SQL-Arbeitsverzeichnis.
| Reihenfolge | Repräsentiert |
|---|---|
| \b | Rückschritt (ASCII 8) |
| \f | Formularvorschub (ASCII 12) |
| \n | Zeilenvorschub (ASCII 10) |
| \r | Wagenrücklauf (ASCII 13) |
| \t | Tabulator (ASCII 9) |
| \v | Vertikaltabulator (ASCII 11) |
| \Ziffern | Ein Backslash, gefolgt von ein bis drei Oktalziffern, gibt das Zeichen mit dem betreffenden numerischen Code an. |
Der COPY TO-Befehl gibt keine Backslash-Sequenz mit Oktalziffern aus, aber er verwendet die anderen Sequenzen, die in der vorherigen Tabelle aufgelistet sind, für diese Steuerzeichen.
Anwendungen, die COPY-Befehlsdaten generieren, konvertieren Zeilenvorschubmarkierungen für Daten in \n-Sequenzen und Wagenrücklaufzeichen in \r-Sequenzen.
Das Ende jeder Zeile wird durch eine Newline ("\n") im UNIX-Stil gekennzeichnet. Der COPY FROM-Befehl funktioniert mit einer Datei, die Zeilenvorschubmarkierungen im DOS- oder Mac-Stil enthält, nicht ordnungsgemäß.
Syntax
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' ];Eingaben
Für den COPY-Befehl sind die folgenden Eingaben zulässig:
| Eingabe | Beschreibung |
|---|---|
| BINÄR | Ändert das Verhalten der Feldformatierung. Erzwingt das Speichern oder Lesen aller Daten im Binärformat statt im Textformat. |
| Begrenzungszeichen | Das Zeichen, das Felder in jeder Zeile der Datei trennt. |
| Dateiname | Der absoluter Pfadname der Ein- oder Ausgabedatei. |
| Nullzeichenfolge | Die Zeichenfolge, die einen Nullwert darstellt. Der Standardwert ist "\N"
(Backslash-N). Beim Hineinkopieren werden alle Datenelemente, die mit dieser Zeichenfolge übereinstimmen, als Nullwert gespeichert. Stellen Sie sicher, dass Sie dieselbe Zeichenfolge wie beim Hinauskopieren verwenden. |
| stdin | Die Eingabe soll aus der Clientanwendung kommen. |
| Standardausgabe | Die Ausgabe soll in die Clientanwendung geleitet werden. |
| Tabelle | Der Name einer vorhandenen Tabelle. |
Ausgaben
| Ausgabe | Beschreibung |
|---|---|
| COPY | Das System gibt diese Nachricht zurück, wenn die Kopie erfolgreich abgeschlossen ist. |
| ERROR: reason | Wenn ein Kopiervorgang fehlschlägt, gibt das System diese Nachricht mit einem Grund für den Fehler zurück. |
Zugriffsrechte
Sie müssen über die Berechtigung zum Auswählen für jede Tabelle verfügen, deren Werte vom COPY-Befehl gelesen werden. Sie müssen über die Berechtigung zum Einfügen oder Aktualisieren für eine Tabelle verfügen, in die Werte vom COPY-Befehl eingefügt werden. Der Datenbankserver muss die entsprechenden Berechtigungen für jede Datei haben, die vom COPY-Befehl gelesen oder geschrieben wird.
Verwendung
- Tabelle durch Angabe eines vertikalen Strichs (|) als Feldbegrenzer in die Standardausgabe kopieren:
MYDB.SCH1(USER)=> COPY country TO stdout USING DELIMITERS '|'; - Kopieren Sie Daten aus einer UNIX-Datei in die Tabelle Land:
MYDB.SCH1(USER)=> COPY country FROM '/usr1/proj/bray/sql/country_data'; - Dies ist ein Beispiel für Daten, die sich zum Kopieren in eine Tabelle aus der Standardeingabe eignen (daher enthält es die Beendigungszeichenfolge in der letzten Zeile):
AF AFGHANISTAN AL ALBANIA DZ ALGERIA ZM ZAMBIA ZW ZIMBABWE \.