Datenkonvertierungsparameter - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Datenkonvertierungsparameter

Wenn COPY die Tabelle lädt, versucht der Befehl implizit, die Zeichenfolgen in den Quelldaten in den Datentyp der Zielspalte zu konvertieren. Wenn Sie eine Konvertierung angeben müssen, die sich vom Standardverhalten unterscheidet, oder wenn die Standardkonvertierung zu Fehlern führt, können Sie Datenkonvertierungen verwalten, indem Sie die folgenden Parameter angeben. Weitere Informationen zur Syntax dieser Parameter finden Sie unter COPY-Syntax.

Datenkonvertierungsparameter
ACCEPTANYDATE

Ermöglicht das Laden jedes Datumsformats einschließlich ungültiger Formate wie 00/00/00 00:00:00, ohne dass ein Fehler generiert wird. Dieser Parameter gilt nur für die Spalten TIMESTAMP und DATE. Verwenden Sie ACCEPTANYDATE stets mit dem Parameter DATEFORMAT. Wenn das Datumsformat für die Daten nicht der Spezifikation DATEFORMAT entspricht, fügt Amazon Redshift einen NULL-Wert in das betreffende Feld ein.

ACCEPTINVCHARS [AS] ['replacement_char']

Ermöglicht das Laden von Daten in VARCHAR-Spalten, auch wenn die Daten ungültige UTF-8-Zeichen enthalten. Wenn ACCEPTINVCHARS angegeben ist, ersetzt COPY jedes ungültige UTF-8-Zeichen durch eine Zeichenfolge mit gleicher Länge, die aus dem Zeichen besteht, das von replacement_char angegeben wird. Wenn das Ersetzungszeichen beispielsweise ^ ist, wird ein ungültiges Zeichen mit drei Bytes durch ^^^ ersetzt.

Das Ersetzungszeichen kann aus jedem ASCII-Zeichen außer NULL bestehen. Der Standardwert ist das Fragezeichen (?). Informationen zu ungültigen UTF-8-Zeichen finden Sie unter Fehler beim Laden von Multibyte-Zeichen.

COPY gibt die Anzahl der Zeilen mit ungültigen UTF-8-Zeichen zurück und fügt der Systemtabelle STL_REPLACEMENTS einen Eintrag für jede betroffene Zeile hinzu (bis zu maximal 100 Zeilen pro Knoten-Slice). Zusätzliche ungültige UTF-8-Zeichen werden ebenfalls ersetzt. Diese Ersetzungsereignisse werden jedoch nicht aufgezeichnet.

Wenn ACCEPTINVCHARS nicht angegeben ist, gibt COPY einen Fehler zurück, wenn der Befehl auf ein ungültiges UTF-8-Zeichen trifft.

ACCEPTINVCHARS ist nur für VARCHAR-Spalten gültig.

BLANKSASNULL

Lädt leere Felder, die nur aus Leerzeichen bestehen, als NULL. Diese Option gilt nur für CHAR- und VARCHAR-Spalten. Leere Felder für andere Datentypen, beispielsweise INT, werden stets mit NULL geladen. Beispielsweise wird eine Zeichenfolge, die drei aufeinanderfolgende Leerzeichen (und keine anderen Zeichen) enthält, als NULL geladen. Das Standardverhalten (ohne Angabe dieser Option) besteht im Laden der Leerzeichen wie vorhanden.

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

Wenn kein DATEFORMAT angegeben ist, ist das Standardformat 'YYYY-MM-DD'. Ein alternatives gültiges Format ist beispielsweise 'MM-DD-YYYY'.

Wenn der COPY-Befehl das Format Ihrer Datums- oder Zeitwerte nicht erkennt oder Ihre Datums- oder Zeitwerte unterschiedliche Formate verwenden, verwenden Sie das Argument 'auto' mit dem Parameter DATEFORMAT oder TIMEFORMAT. Das Argument 'auto' erkennt verschiedene Formate, die bei der Verwendung einer DATEFORMAT- und TIMEFORMAT-Zeichenfolge nicht unterstützt werden. Das Schlüsselwort 'auto' unterscheidet zwischen Groß- und Kleinschreibung. Weitere Informationen finden Sie unter Verwenden der automatischen Erkennung bei DATEFORMAT und TIMEFORMAT.

Das Datumsformat kann Zeitinformationen (Stunde, Minuten, Sekunden) enthalten. Diese Informationen werden jedoch ignoriert. Das Schlüsselwort AS ist optional. Weitere Informationen finden Sie unter DATEFORMAT- und TIMEFORMAT-Zeichenfolgen.

EMPTYASNULL

Zeigt an, dass Amazon Redshift leere CHAR- und VARCHAR-Felder als NULL laden soll. Leere Felder für andere Datentypen, beispielsweise INT, werden stets mit NULL geladen. Leere Felder treten auf, wenn Daten zwei aufeinanderfolgende Trennzeichen enthalten, ohne dass sich zwischen den Trennzeichen Zeichen befinden. EMPTYASNULL und NULL AS '' (leere Zeichenfolge) führen zum selben Verhalten.

ENCODING [AS] file_encoding

Gibt den Kodierungstyp der Daten an, die geladen werden. Der COPY-Befehl konvertiert während des Ladens die Daten aus der angegebenen Kodierung in UTF-8.

Gültige Werte für file_encoding sind folgende:

  • UTF8

  • UTF16

  • UTF16LE

  • UTF16BE

Der Standardwert ist UTF8.

Quelldateinamen müssen UTF-8-Kodierung verwenden.

Die folgenden Dateien müssen UTF-8-Kodierung verwenden, auch wenn für die Daten, die geladen werden, eine andere Kodierung angegeben ist:

  • Manifestdateien

  • JSONPaths-Dateien

Die mit den folgenden Parametern bereitgestellten Argumentzeichenfolgen müssen UTF-8 verwenden:

  • FIXEDWIDTH 'fixedwidth_spec'

  • ACCEPTINVCHARS 'replacement_char'

  • DATEFORMAT 'dateformat_string'

  • TIMEFORMAT 'timeformat_string'

  • NULL AS 'null_string'

Datendateien mit fester Breite müssen UTF-8-Kodierung verwenden. Die Feldbreiten basieren auf der Anzahl der Zeichen, nicht der Bytes.

Alle geladenen Daten müssen die angegebene Kodierung verwenden. Wenn COPY auf eine andere Kodierung trifft, werden die Datei übersprungen und ein Fehler zurückgegeben.

Wenn Sie UTF16 angeben, müssen Ihre Daten eine Byte-Reihenfolgenmarkierung (Byte Order Mark, BOM) besitzen. Wenn Sie wissen, ob Ihre UTF-16-Daten little-endian (LE) oder big-endian (BE) sind, können Sie unabhängig vom Vorhandensein einer BOM UTF16LE oder UTF16BE verwenden.

ESCAPE

Wenn dieser Parameter angegeben ist, wird das Backslash-Zeichen (\) in Eingabedaten als Escape-Zeichen behandelt. Das Zeichen, das dem Backslash-Zeichen folgt, wird als Teil des aktuellen Spaltenwerts in die Tabelle geladen, auch wenn es sich um ein Zeichen handelt, das normalerweise einem speziellen Zweck dient. Sie können diesen Parameter beispielsweise verwenden, um das Trennzeichen, ein Fragezeichen, ein eingebettetes Zeichen für neue Zeilen oder das Escape-Zeichen selbst mit einer Escape-Markierung zu markieren, wenn eines dieser Zeichen legitimer Teil eines Spaltenwerts ist.

Wenn Sie den Parameter ESCAPE in Kombination mit dem Parameter REMOVEQUOTES angeben, können Sie Anführungszeichen (' oder ") mit Escape-Zeichen markieren und beibehalten, die ansonsten möglicherweise entfernt würden. Die standardmäßige Null-Zeichenfolge \N funktioniert wie vorhanden, kann jedoch in den Eingabedaten ebenfalls mit einem Escape-Zeichen markiert werden: \\N. Solange sie keine alternative Null-Zeichenfolge mit dem Parameter NULL AS angeben, führen \N und \\N zu denselben Ergebnissen.

Anmerkung

Das Steuerzeichen 0x00 (NUL) kann nicht mit einem Escape-Zeichen markiert werden und sollte aus den Eingabedaten entfernt werden oder konvertiert werden. Dieses Zeichen wird als Markierung für das Ende von Datensätzen (End of Record, EOR) verwendet, was dazu führt, dass der Rest des Datensatzes abgeschnitten wird.

Sie können den Parameter ESCAPE nicht bei FIXEDWIDTH-Ladevorgängen verwenden. Darüber hinaus können Sie das Escape-Zeichen selbst nicht angeben; das Escape Zeichen ist stets das Backslash-Zeichen. Außerdem müssen Sie sicherstellen, dass die Eingabedaten das Escape-Zeichen an den richtigen Stellen enthalten.

Im Folgenden finden Sie einige Beispiele für Eingabedaten und die entsprechenden geladenen Daten, wenn der Parameter ESCAPE angegeben ist. Das Ergebnis für Zeile 4 geht davon aus, dass der Parameter REMOVEQUOTES ebenfalls angegeben ist. Die Eingabedaten bestehen aus zwei Feldern, die durch das Pipe-Zeichen getrennt sind:

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'

Die Daten, die in Spalte 2 geladen wurden, sehen wie folgt aus:

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

Die Anwendung des Escape-Zeichens auf die Eingabedaten, die geladen werden sollen, liegt in der Verantwortung der Benutzer. Eine Ausnahme für diese Anforderung liegt dann vor, wenn Sie Daten erneut laden, die zuvor mit dem Parameter ESCAPE entladen wurden. In diesem Fall enthalten die Daten die notwendigen Escape-Zeichen bereits.

Der Parameter ESCAPE interpretiert keine Oktal-, Hex-, Unicode- oder andere Escape-Sequenznotierungen. Wenn Ihre Quelldaten beispielsweise den oktalen Zeilen-Feed-Wert (\012) enthalten und Sie versuchen, diese Daten mit dem Parameter ESCAPE zu laden, lädt Amazon Redshift den Wert 012 in die Tabelle und interpretiert diesen Wert nicht als Zeilen-Feed, der mit einem Escape-Zeichen markiert wurde.

Um in Daten, die aus Microsoft Windows-Plattformen stammen, das Zeichen für neue Zeilen mit einem Escape-Zeichen zu markieren, müssen Sie möglicherweise zwei Escape-Zeichen verwenden: ein Zeichen für die Zeilenumschaltung und ein Zeichen für den Zeilen-Feed. Alternativ können Sie die Zeilenumschaltungen vor dem Laden der Datei entfernen (beispielsweise durch Verwendung des Hilfsprogramms dos2unix).

EXPLICIT_IDS

Verwenden Sie EXPLICIT_IDS für Tabellen, die IDENTITY-Spalten besitzen, wenn Sie die automatisch generierten Werte durch explizite Werte aus den Quelldatendateien für die Tabellen überschreiben möchten. Wenn der Befehl eine Spaltenliste enthält, muss diese Liste die IDENTITY-Spalten enthalten, um diesen Parameter verwenden zu können. Das Datenformat für EXPLICIT_IDS-Werte muss mit dem IDENTITY-Format übereinstimmen, das von der Definition CREATE TABLE angegeben wird.

Nachdem Sie einen COPY-Befehl mit der EXPLICIT_IDS-Option für eine Tabelle ausgeführt haben, überprüft Amazon Redshift die Eindeutigkeit von IDENTITY-Spalten in der Tabelle nicht.

Wenn eine Spalte mit GENERATED BY DEFAULT AS IDENTITY definiert ist, kann sie kopiert werden. Die Werte werden mit den von Ihnen angegebenen Werten generiert oder aktualisiert. Die Option EXPLICIT_IDS ist nicht erforderlich. COPY aktualisiert nicht die Identity High Watermark.

Ein Beispiel für einen COPY-Befehl mit EXPLICIT_IDS finden Sie unter Laden von VENUE mit expliziten Werte für eine IDENTITY-Spalte.

FILLRECORD

Ermöglicht das Laden von Datendateien, wenn am Ende einiger Datensätze angrenzende Spalten fehlen. Die fehlenden Spalten werden als NULL-Werte geladen. Wenn die fehlende Spalte eine VARCHAR-Spalte ist und es sich um ein Text- oder CSV-Format handelt, werden Zeichenfolgen mit null Länge geladen (anstelle von NULL-Werten). Um NULL-Werte von Text- oder CSV-Formaten in VARCHAR-Spalten zu laden, müssen Sie das EMPTYASNULL-Stichwort festlegen. Die NULL-Ersetzung funktioniert nur, wenn die Spaltendefinition NULL-Werte zulässt.

Wenn die Tabellendefinition beispielsweise vier nullwertfähige CHAR-Spalten enthält und ein Datensatz die Werte apple, orange, banana, mango enthält, könnte der COPY-Befehl einen Datensatz laden und ausfüllen, der nur die Werte apple, orange enthält. Die fehlenden CHAR-Werte würden als NULL-Werte geladen.

IGNOREBLANKLINES

Ignoriert leere Zeilen, die nur einen Zeilen-Feed in einer Datendatei enthalten, und versucht nicht, sie zu laden.

IGNOREHEADER [ AS ] number_rows

Behandelt die angegebene number_rows als Dateiheader und lädt sie nicht. Sie verwenden IGNOREHEADER, um in einem parallelen Ladevorgang Dateiheader in allen Dateien zu überspringen.

NULL AS 'null_string'

Lädt Felder, die mit null_string als NULL übereinstimmen, wobei null_string jede Zeichenfolge sein kann. Wenn Ihre Daten einen Null-Terminator enthalten, auch als NUL (UTF-8 0000) oder Binär-Null (0x000) bezeichnet, behandelt COPY diesen als ein beliebiges anderes Zeichen. Zum Beispiel wird ein Datensatz, der '1' || NUL || '2' enthält, als Zeichenkette der Länge 3 Bytes kopiert. Wenn ein Feld nur NUL enthält, können Sie NULL AS verwenden, um den Nullterminator durch NULL zu ersetzen, indem Sie '\0' oder '\000'angeben, z. B. NULL AS '\0' oder NULL AS '\000'. Wenn ein Feld eine Zeichenfolge enthält, die mit NUL endet, und NULL AS angegeben ist, wird die Zeichenfolge mit NUL am Ende eingefügt. Verwenden Sie für den null_string-Wert nicht '\n' (Zeilenumbruch). Amazon Redshift reserviert '\n' für die Verwendung als Zeilentrennzeichen. Der Standardwert für null_string ist '\N'.

Anmerkung

Wenn Sie versuchen, Null-Werte in eine Spalte zu laden, die als NOT NULL definiert ist, schlägt der Befehl COPY fehl.

REMOVEQUOTES

Entfernt in den eingehenden Daten Anführungszeichen, die Zeichenfolgen umschließen. Alle Zeichen innerhalb der Anführungszeichen einschließlich Trennzeichen bleiben bewahrt. Wenn eine Zeichenfolge mit einem einfachen oder doppelten Anführungszeichen beginnt, es jedoch kein entsprechendes schließendes Anführungszeichen gibt, lädt der COPY-Befehl diese Zeile nicht und gibt einen Fehler zurück. In der folgenden Tabelle werden einige einfache Beispiele für Zeichenfolgen mit Anführungszeichen und die entsprechenden geladenen Werte gezeigt.

Eingabezeichenfolge Geladener Wert mit Option REMOVEQUOTES
"The delimiter is a pipe (|) character" Das Trennzeichen ist ein Pipe-Zeichen (|)
'Schwarz' Schwarz
"Weiß" Weiß
Blau' Blau'
Blau' Wert nicht geladen: Fehlerbedingung
"Blue Wert nicht geladen: Fehlerbedingung
' ' 'Black' ' ' ' 'Schwarz' '
' ' <Leerzeichen>
ROUNDEC

Rundet numerische Werte auf, wenn die Skala des Eingabewerts größer als die Skala der Spalte ist. Standardmäßig schneidet COPY Werte ab, wenn notwendig, um sie an die Spaltenskala anzupassen. Wenn beispielsweise der Wert 20.259 in eine DECIMAL(8,2)-Spalte geladen wird, schneidet COPY den Wert standardmäßig auf 20.25 ab. Wenn ROUNDEC angegeben ist, rundet COPY den Wert auf auf 20.26. Der INSERT-Befehl rundet Werte stets, wenn notwendig, um sie an die Spaltenskala anzupassen. Daher weist ein COPY-Befehl mit dem Parameter ROUNDEC dasselbe Verhalten wie ein INSERT-Befehl auf.

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

Gibt das Zeitformat an. Wenn TIMEFORMAT nicht angegeben wird, ist das Standardformat YYYY-MM-DD HH:MI:SS für TIMESTAMP-Spalten oder YYYY-MM-DD HH:MI:SSOF für TIMESTAMPTZ-Spalten, wobei OF der Unterschied zur Coordinated Universal Time (UTC) ist. Sie können in der Zeitformatzeichenfolge keinen Zeitzonenspezifikator verwenden. Um TIMESTAMPTZ-Daten zu laden, die sich in einem anderen Format als dem Standardformat befinden, geben Sie 'auto' an. Weitere Informationen finden Sie unter Verwenden der automatischen Erkennung bei DATEFORMAT und TIMEFORMAT. Weitere Informationen zu timeformat_string finden Sie unter DATEFORMAT- und TIMEFORMAT-Zeichenfolgen.

Das Argument 'auto' erkennt verschiedene Formate, die bei der Verwendung einer DATEFORMAT- und TIMEFORMAT-Zeichenfolge nicht unterstützt werden. Wenn der COPY-Befehl das Format Ihrer Datums- oder Zeitwerte nicht erkennt oder Ihre Datums- oder Zeitwerte unterschiedliche verwenden, verwenden Sie das Argument 'auto' mit dem Parameter DATEFORMAT oder TIMEFORMAT. Weitere Informationen finden Sie unter Verwenden der automatischen Erkennung bei DATEFORMAT und TIMEFORMAT.

Wenn Ihre Quelldaten als Epochenzeit dargestellt werden, d. h. als Zahl der Sekunden oder Millisekunden seit dem 1. Januar 1970, 00:00:00 UTC, geben Sie 'epochsecs' oder 'epochmillisecs' an.

Die Schlüsselwörter 'auto', 'epochsecs' und 'epochmillisecs' unterscheiden zwischen Groß- und Kleinschreibung.

Das Schlüsselwort AS ist optional.

TRIMBLANKS

Entfernt Leerzeichen am Ende von VARCHAR-Zeichenfolgen. Dieser Parameter gilt nur für die Spalten mit dem Datentyp VARCHAR.

TRUNCATECOLUMNS

Schneidet Daten in Spalten auf die entsprechende Zahl von Zeichen ab, sodass sie der Spaltenspezifikation entsprechen. Gilt nur für Spalten mit dem Datentyp VARCHAR und CHAR und Zeilen mit einer Größe von 4 MB oder weniger.