Amazon Redshift unterstützt ab dem 1. November 2025 nicht mehr die Erstellung neuer Python-UDFs. Wenn Sie Python-UDFs verwenden möchten, erstellen Sie die UDFs vor diesem Datum. Bestehende Python-UDFs funktionieren weiterhin wie gewohnt. Weitere Informationen finden Sie im Blog-Posting
Datenformatparameter
Standardmäßig geht der COPY-Befehl davon aus, dass es sich bei den Quelldaten um UTF-8-Text mit Trennzeichen handelt. Das Standardtrennzeichen ist der senkrechte Strich (|). Wenn sich die Quelldaten in einem anderen Format befinden, verwenden Sie die folgenden Parameter, um das Datenformat anzugeben:
Neben den Standarddatenformaten unterstützt COPY die folgenden spaltenbasierten Datenformate für COPY aus Amazon S3:
COPY aus einem spaltenbasierten Format wird mit bestimmten Einschränkungen unterstützt. Weitere Informationen finden Sie unter COPY aus spaltenbasierten Datenformaten.
Datenformatparameter
- FORMAT [AS]
-
(Optional) Identifiziert Datenformatschlüsselwörter. Die FORMAT-Argumente werden im Folgenden beschrieben.
- CSV [ QUOTE [AS] 'quote_character' ]
-
Ermöglicht die Verwendung des CSV-Formats in den Eingabedaten. Um Trennzeichen, Zeichen für neue Zeilen und Zeilenumbrüche automatisch mit Escape-Zeichen zu markieren, schließen Sie das Feld in das durch den Parameter QUOTE angegebene Zeichen ein. Das Standardanführungszeichen ist das doppelte Anführungszeichen ("). Wird das Anführungszeichen innerhalb des Feldes verwendet, verwenden Sie ein weiteres Anführungszeichen als Escape-Zeichen. Wenn beispielsweise das Anführungszeichen ein doppeltes Anführungszeichen ist und die Zeichenfolge
A "quoted" wordeingefügt werden soll, sollte die Eingabedatei die Zeichenfolge"A ""quoted"" word"enthalten. Wenn der CSV-Parameter verwendet wird, ist das Standardtrennzeichen ein Komma (,). Sie können ein anderes Trennzeichen angeben, indem Sie den Parameter DELIMITER verwenden.Wenn ein Feld in Anführungszeichen eingeschlossen wird, werden Leerzeichen zwischen Trennzeichen und Anführungszeichen ignoriert. Wenn das Trennzeichen ein Leerzeichen ist, beispielsweise ein Tabulatorzeichen, wird das Trennzeichen nicht als Leerzeichen behandelt.
Das CSV-Format kann nicht mit FIXEDWIDTH, REMOVEQUOTES oder ESCAPE verwendet werden.
- QUOTE [AS] 'quote_character'
-
Optional. Gibt das Zeichen an, das als Anführungszeichen verwendet werden soll, wenn der CSV-Parameter verwendet wird. Der Standardwert ist das doppelte Anführungszeichen ("). Wenn Sie den Parameter QUOTE verwenden, um ein anderes Anführungszeichen als ein doppeltes Anführungszeichen zu definieren, müssen Sie doppelte Anführungszeichen innerhalb des Felds nicht mit Escape-Zeichen markieren. Der Parameter QUOTE kann nur mit dem Parameter CSV verwendet werden. Das Schlüsselwort AS ist optional.
- DELIMITER [AS] ['delimiter_char']
-
Gibt Zeichen an, die verwendet werden, um Felder in der Eingabedatei zu trennen, beispielsweise das Pipe-Zeichen (
|), das Komma (,), das Tabulatorzeichen (\t) oder mehrere Zeichen (z. B.|~|). Nicht druckbare Zeichen werden unterstützt. Zeichen können auch oktal als ihre UTF-8-Codeeinheiten dargestellt werden. Verwenden Sie für die oktale Darstellung das Format „\ddd“, wobei „d“ eine Oktalziffer ist (0–7). Das Standardtrennzeichen ist das Pipe-Zeichen (|), wenn nicht der Parameter CSV verwendet wird. In diesem Fall ist das Standardtrennzeichen das Komma (,). Das Schlüsselwort AS ist optional. DELIMITER kann nicht mit FIXEDWIDTH verwendet werden. - FIXEDWIDTH 'fixedwidth_spec'
-
Lädt die Daten aus einer Datei, in der jede Spalte eine feste Breite hat, statt durch ein Trennzeichen abgetrennt zu werden. fixedwidth_spec ist eine Zeichenfolge, die eine benutzerdefinierte Spaltenbezeichnung und eine benutzerdefinierte Spaltenbreite angibt. Die Spaltenbezeichnung kann eine Textzeichenfolge oder eine Ganzzahl sein, abhängig davon, wofür sich der Benutzer entscheidet. Spaltenbezeichnung und Spaltenname sind nicht aufeinander bezogen. Die Reihenfolge der Paare aus Bezeichnung/Breite muss exakt mit der Reihenfolge der Tabellenspalten übereinstimmen. FIXEDWIDTH kann nicht mit CSV oder DELIMITER verwendet werden. In Amazon Redshift wird die Länge der CHAR- und VARCHAR-Spalten in Bytes ausgedrückt. Achten Sie daher darauf, dass die von Ihnen angegebene Spaltenbreite beim Vorbereiten der Datei auf das Laden die binäre Länge von Multibyte-Zeichen berücksichtigt. Weitere Informationen finden Sie unter Zeichentypen.
Das Format für fixedwidth_spec wird im Folgenden gezeigt:
'colLabel1:colWidth1,colLabel:colWidth2, ...' - SHAPEFILE [ SIMPLIFY [AUTO] ['Toleranz'] ]
-
Ermöglicht die Verwendung des SHAPEFILE-Formats in den Eingabedaten. Standardmäßig ist die erste Spalte des Shapefile entweder eine
GEOMETRY- oderIDENTITY-Spalte. Alle nachfolgenden Spalten folgen der im Shapefile angegebenen Reihenfolge.SHAPEFILE kann nicht mit FIXEDWIDTH, REMOVEQUOTES oder ESCAPE verwendet werden.
Um
GEOGRAPHY-Objekte mitCOPY FROM SHAPEFILEzu verwenden, erfassen Sie zuerst in eineGEOMETRY-Spalte und wandeln dann die Objekte inGEOGRAPHY-Objekte um.- SIMPLIFY [Toleranz]
-
(Optional) Vereinfacht alle Geometrien während der Erfassung mithilfe des Ramer-Douglas-Peucker-Algorithmus und der angegebenen Toleranz.
- SIMPLIFY AUTO [Toleranz]
-
(Optional) Vereinfacht nur Geometrien, die größer als die maximale Geometriegröße sind. Diese Vereinfachung verwendet den Ramer-Douglas-Peucker-Algorithmus und die automatisch berechnete Toleranz, wenn diese die angegebene Toleranz nicht überschreitet. Der Algorithmus berechnet die Größe zum Speichern von Objekten innerhalb der angegebenen Toleranz. Der Toleranz-Wert ist optional.
Beispiele zum Laden von Shapefiles finden Sie unter Laden eines Shapefile in Amazon Redshift.
- AVRO [AS] 'avro_option'
-
Gibt an, dass die Quelldaten im Avro-Format vorliegen.
Das Avro-Format wird durch folgende Services und Protokolle für den COPY-Befehl unterstützt:
-
Amazon S3
-
Amazon EMR
-
Remote-Hosts (SSH)
Avro wird für COPY aus DynamoDB nicht unterstützt.
Avro ist ein Protokoll für die Datenserialisierung. Eine Avro-Quelldatei enthält ein Schema, das die Struktur der Daten definiert. Der Avro-Schematyp muss sein
record. COPY akzeptiert Avro-Dateien, die unter Verwendung des standardmäßigen nicht komprimierten Codec sowie der Komprimierungs-Codecsdeflateundsnappyerstellt wurden. Weitere Informationen zu Avro finden Sie unter Apache Avro. Gültige Werte für avro_option sind folgende:
-
'auto' -
'auto ignorecase' -
's3://jsonpaths_file'
Der Standardwert ist
'auto'.COPY weist die Datenelemente in den Avro-Quelldaten automatisch den Spalten in der Zieltabelle zu. Dies geschieht durch den Abgleich von Feldnamen im Avro-Schema mit den Spaltennamen in der Zieltabelle. Mit
'auto'wird beim Abgleich die Groß-/Kleinschreibung beachtet, mit'auto ignorecase'nicht.Spaltennamen in Amazon-Redshift-Tabellen verwenden stets Kleinbuchstaben. Daher müssen übereinstimmende Feldnamen ebenfalls Kleinbuchstaben verwenden, wenn Sie die Option
'auto'verwenden. Wenn die Feldnamen nicht alle Kleinbuchstaben sind, können Sie die Option'auto ignorecase'verwenden. Mit dem Standardargument'auto'erkennt COPY nur die erste Ebene von Feldern bzw. die äußeren Felder in der Struktur.Um den Avro-Feldnamen explizit Spaltennamen zuzuordnen, können Sie verwenden JSONPaths-Datei.
Standardmäßig versucht COPY, alle Spalten in der Zieltabelle mit Avro-Feldnamen abzugleichen. Um einen Subsatz der Spalten zu laden, können Sie optional eine Spaltenliste angeben. Wenn eine Spalte in der Zieltabelle aus der Spaltenliste ausgelassen wird, lädt COPY den DEFAULT-Ausdruck der Zielspalte. Wenn die Zielspalte keinen Standardwert besitzt, versucht COPY, NULL zu laden. Wenn eine Spalte in der Spaltenliste enthalten ist und COPY in den Avro-Daten kein übereinstimmendes Feld findet, versucht COPY, NULL in die Spalte zu laden.
Wenn COPY versucht, einer Spalte NULL zuzuweisen, die als NOT NULL definiert ist, schlägt der COPY-Befehl fehl.
Avro-Schema
Eine Avro-Quelldatendatei enthält ein Schema, das die Struktur der Daten definiert. COPY liest das Schema, das Teil der Avro-Quelldatendatei ist, um Datenelemente zu Zieltabellenspalten zuzuweisen. Die folgende Abbildung zeigt ein Avro-Schema.
{ "name": "person", "type": "record", "fields": [ {"name": "id", "type": "int"}, {"name": "guid", "type": "string"}, {"name": "name", "type": "string"}, {"name": "address", "type": "string"}] }Das Avro-Schema wird unter Verwendung des JSON-Formats definiert. Das JSON-Objekt auf der obersten Ebene enthält drei Name/Wert-Paare mit den Namen bzw. Schlüsseln
"name","type"und"fields".Der
"fields"-Schlüssel wird mit einem Array von Objekten verknüpft, die den Namen und Datentyp der einzelnen Felder in der Datenstruktur definieren. Standardmäßig gleicht COPY die Feldnamen mit Spaltennamen ab. Spaltennamen verwenden stets Kleinbuchstaben. Daher müssen übereinstimmende Feldnamen ebenfalls Kleinbuchstaben verwenden, außer Sie geben die Option‘auto ignorecase’an. Feldnamen, die mit keiner Spalte übereinstimmen, werden ignoriert. Die Reihenfolge spielt keine Rolle. Im vorherigen Beispiel führt COPY einen Abgleich mit den Spaltennamenid,guid,nameundaddressaus.Bei Verwendung des Standardarguments
'auto'gleicht COPY nur Objekte auf der ersten Ebene mit Spalten ab. Um einen Abgleich mit tieferen Ebenen im Schema auszuführen oder wenn Feldnamen und Spaltennamen nicht übereinstimmen, verwenden Sie eine JSONPaths-Datei, um das Mapping zu definieren. Weitere Informationen finden Sie unter JSONPaths-Datei.Wenn es sich bei dem Wert, der mit einem Schlüssel verknüpft ist, um einen komplexen Avro-Datentyp wie Byte, Array, Datensatz, Zuweisung oder Link handelt, lädt COPY den Wert als Zeichenfolge. Hier ist die Zeichenfolge die JSON-Darstellung der Daten. COPY lädt Avro-Aufzählungsdatentypen als Zeichenfolgen, wobei der Inhalt der Name des Typs ist. Ein Beispiel finden Sie unter COPY von JSON-Format.
Die maximale Größe des Avro-Dateiheaders, der das Schema und die Dateimetadaten enthält, beträgt 1 MB.
Die maximale Größe eines einzelnen Avro-Datenblocks beträgt 4 MB. Dies ist etwas anderes als die maximale Zeilengröße. Wenn die maximale Größe eines einzelnen Avro-Datenblocks überschritten wird, schlägt der COPY-Befehl fehl. Dies ist auch dann der Fall, wenn die entsprechende Zeilengröße unter der Grenze von 4 MB für Zeilengrößen liegt.
Bei der Berechnung der Zeilengröße zählt Amazon Redshift intern Pipe-Zeichen (|) zweimal. Wenn Ihre Eingabedaten eine sehr große Zahl von Pipe-Zeichen enthalten, ist es möglich, dass die Zeilengröße 4 MB überschreitet, auch wenn der Datenblock kleiner als 4 MB ist.
-
- JSON [AS] 'json_option'
-
Die Quelldaten weisen das JSON-Format auf.
Das JSON-Format wird durch folgende Services und Protokolle für den COPY-Befehl unterstützt:
-
Amazon S3
-
COPY aus Amazon EMR
-
COPY aus SSH
JSON wird für COPY aus DynamoDB nicht unterstützt.
Gültige Werte für json_option sind folgende:
-
'auto' -
'auto ignorecase' -
's3://jsonpaths_file' -
'noshred'
Der Standardwert ist
'auto'. Amazon Redshift zerlegt die Attribute von JSON-Strukturen beim Laden eines JSON-Dokuments nicht in mehrere Spalten.Standardmäßig versucht COPY, alle Spalten in der Zieltabelle mit JSON-Feldnamenschlüsseln abzugleichen. Um einen Subsatz der Spalten zu laden, können Sie optional eine Spaltenliste angeben. Wenn die JSON-Feldnamenschlüssel nicht nur Kleinbuchstaben verwenden, können Sie
'auto ignorecase'oder JSONPaths-Datei verwenden, um Spaltennamen explizit zu JSON-Feldnamenschlüsseln zuzuweisen.Wenn eine Spalte in der Zieltabelle aus der Spaltenliste ausgelassen wird, lädt COPY den DEFAULT-Ausdruck der Zielspalte. Wenn die Zielspalte keinen Standardwert besitzt, versucht COPY, NULL zu laden. Wenn eine Spalte in der Spaltenliste enthalten ist und COPY in den JSON-Daten kein übereinstimmendes Feld findet, versucht COPY, NULL in die Spalte zu laden.
Wenn COPY versucht, einer Spalte NULL zuzuweisen, die als NOT NULL definiert ist, schlägt der COPY-Befehl fehl.
COPY weist die Datenelemente in den JSON-Quelldaten den Spalten in der Zieltabelle zu. Dies geschieht durch den Abgleich der Objektschlüssel oder -namen in den Name-Wert-Paaren der Quelle mit den Namen der Spalten in der Zieltabelle.
Im Folgenden finden Sie nähere Angaben zu den einzelnen json_option-Werten:
- 'auto'
-
Bei dieser Option wird zwischen Groß- und Kleinschreibung unterschieden. Spaltennamen in Amazon-Redshift-Tabellen verwenden stets Kleinbuchstaben. Daher müssen übereinstimmende JSON-Feldnamen ebenfalls Kleinbuchstaben verwenden, wenn Sie die Option
'auto'verwenden. - 'auto ignorecase'
-
Bei dieser Option wird nicht zwischen Groß- und Kleinschreibung unterschieden. Spaltennamen in Amazon-Redshift-Tabellen verwenden stets Kleinbuchstaben. Wenn Sie die Option
'auto ignorecase'verwenden, können entsprechende JSON-Feldnamen Kleinbuchstaben, Großbuchstaben oder beides verwenden. - 's3://jsonpaths_file'
-
Mit dieser Option verwendet COPY die benannte JSONPaths-Datei, um die Datenelemente in den JSON-Quelldaten den Spalten in der Zieltabelle zuzuweisen. Das
s3://jsonpaths_file-Argument muss ein Amazon S3-Objektschlüssel sein, der explizit auf eine einzelne Datei verweist. Ein Beispiel ist's3://amzn-s3-demo-bucket/jsonpaths.txt'. Das Argument darf kein Schlüsselpräfix sein. Weitere Informationen zur Verwendung einer JSONPaths-Datei finden Sie unter JSONPaths-Datei.In einigen Fällen hat die von
jsonpaths_fileangegebene Datei dasselbe Präfix wie der voncopy_from_s3_objectpathangegebene Pfad für die Datendateien. In diesem Fall liest COPY die JSONPaths-Datei als Datendatei und gibt Fehler zurück. Angenommen, Ihre Datendateien verwenden den Objektpfads3://amzn-s3-demo-bucket/my_data.jsonund Ihre JSONPaths-Datei ists3://amzn-s3-demo-bucket/my_data.jsonpaths. In diesem Fall versucht COPY,my_data.jsonpathsals Datendatei zu laden. - 'noshred'
-
Mit dieser Option zerlegt Amazon Redshift die Attribute von JSON-Strukturen beim Laden eines JSON-Dokuments nicht in mehrere Spalten.
-
JSON-Datendatei
Die JSON-Datendatei enthält einen Satz von Objekten oder einen Satz von Arrays. COPY lädt jedes JSON-Objekt oder -Array in eine einzige Zeile in der Zieltabelle. Jedes Objekt oder Array, das einer Zeile entspricht, muss eine eigenständige Struktur auf Stammebene besitzen, d. h., es darf kein Mitglied einer anderen JSON-Struktur sein.
Ein JSON-Objekt beginnt und endet mit geschweiften Klammern ({}) und enthält eine nicht geordnete Sammlung von Name/Wert-Paaren. Name und Wert in einem Paar werden durch einen Doppelpunkt getrennt und die Paare werden durch Kommas getrennt. Standardmäßig muss der Objektschlüssel bzw. Name in den Name-Wert-Paaren mit dem Namen der entsprechenden Spalte in der Tabelle übereinstimmen. Spaltennamen in Amazon-Redshift-Tabellen verwenden stets Kleinbuchstaben. Daher müssen übereinstimmende JSON-Feldnamenschlüssel ebenfalls Kleinbuchstaben verwenden. Wenn Ihre Spaltennamen und JSON-Schlüssel nicht übereinstimmen, verwenden Sie JSONPaths-Datei, um Spalten explizit Schlüsseln zuzuweisen.
Die Reihenfolge in einem JSON-Objekt spielt keine Rolle. Namen, die mit keiner Spalte übereinstimmen, werden ignoriert. Im Folgenden wird die Struktur eines einfachen JSON-Objekts gezeigt.
{ "column1": "value1", "column2": value2, "notacolumn" : "ignore this value" }
Ein JSON-Array beginnt und endet mit eckigen Klammern ([]) und enthält eine geordnete Sammlung von Werten, getrennt durch Kommas. Wenn Ihre Datendateien Arrays verwenden, müssen Sie eine JSONPaths-Datei angeben, um die Werte mit Spalten abzugleichen. Im Folgenden wird die Struktur eines einfachen JSON-Arrays gezeigt.
["value1", value2]
JSON muss wohl geformt sein. Die Objekte oder Arrays dürfen beispielsweise nicht durch Kommas oder andere Zeichen getrennt werden, sondern nur durch Leerzeichen. Zeichenfolgen müssen in doppelte Anführungszeichen eingeschlossen werden. Bei den Anführungszeichen muss es sich um normale Anführungszeichen (0x22) handeln. Es dürfen keine schrägen oder „smarten“ Anführungszeichen sein.
Die maximale Größe eines einzelnen JSON-Objekts oder -Arrays einschließlich geschweifter oder eckiger Klammern beträgt 4 MB. Dies ist etwas anderes als die maximale Zeilengröße. Wenn die maximale Größe eines einzelnen JSON-Objekts oder Arrays überschritten wird, schlägt der COPY-Befehl fehl. Dies ist auch dann der Fall, wenn die entsprechende Zeilengröße unter der Grenze von 4 MB für Zeilengrößen liegt.
Bei der Berechnung der Zeilengröße zählt Amazon Redshift intern Pipe-Zeichen (|) zweimal. Wenn Ihre Eingabedaten eine sehr große Zahl von Pipe-Zeichen enthalten, ist es möglich, dass die Zeilengröße 4 MB überschreitet, auch wenn die Objektgröße weniger als 4 MB beträgt.
COPY lädt \n als Zeichen für neue Zeilen und \t als Tabulatorzeichen. Um einen Backslash zu laden, muss ein Backslash als Escape-Zeichen verwendet werden ( \\ ).
COPY durchsucht die angegebene JSON-Quelle nach einem wohl geformten, gültigen JSON-Objekt oder -Array. Wenn COPY vor dem Auffinden einer verwendbaren JSON-Struktur oder zwischen gültigen JSON-Objekten oder -Arrays auf Zeichen stößt, die keine Leerzeichen sind, gibt COPY für jede Instance einen Fehler zurück. Diese Fehler werden auf die MAXERROR-Fehlerzahl angerechnet. Wenn die Fehlerzahl gleich oder größer als MAXERROR ist, schlägt COPY fehl.
Für jeden Fehler zeichnet Amazon Redshift eine Zeile in der Systemtabelle STL_LOAD_ERRORS auf. Die Spalte LINE_NUMBER zeichnet die letzte Zeile des JSON-Objekts auf, das den Fehler verursacht hat.
Wenn IGNOREHEADER angegeben ist, ignoriert COPY die angegebene Zahl von Zeilen in den JSON-Daten. Zeichen für neue Zeilen in den JSON-Daten werden stets für IGNOREHEADER-Berechnungen berücksichtigt.
COPY lädt leere Zeichenfolgen standardmäßig als leere Felder. Wenn EMPTYASNULL angegeben ist, lädt COPY leere Zeichenfolgen für CHAR- und VARCHAR-Felder als NULL. Leere Zeichenfolgen für andere Datentypen, beispielsweise INT, werden stets mit NULL geladen.
Die folgenden Optionen werden für JSON nicht unterstützt:
-
CSV
-
DELIMITER
-
ESCAPE
-
FILLRECORD
-
FIXEDWIDTH
-
IGNOREBLANKLINES
-
NULL AS
-
READRATIO
-
REMOVEQUOTES
Weitere Informationen finden Sie unter COPY von JSON-Format. Weitere Informationen zu JSON-Datenstrukturen finden Sie unter www.json.org
JSONPaths-Datei
Wenn Sie Daten aus Quelldaten im JSON-Format oder aus Avro-Quelldaten laden, weist COPY standardmäßig die Datenelemente auf der ersten Ebene in den Quelldaten den Spalten in der Zieltabelle zu. Dazu wird jeder Name bzw. Objektschlüssel in einem Name-Wert-Paar mit dem Namen einer Spalte in der Zieltabelle abgeglichen.
Wenn Ihre Spaltennamen und Objektschlüssel nicht übereinstimmen oder wenn Sie Zuweisungen auf tieferen Ebenen in der Datenhierarchie durchführen möchten, können Sie eine JSONPaths-Datei verwenden, um JSON- oder Avro-Datenelemente explizit Spalten zuzuweisen. Die JSONPaths-Datei weist JSON-Datenelemente zu Spalten zu, indem die Spaltenreihenfolge in der Zieltabelle oder Spaltenliste abgeglichen wird.
Die JSONPaths-Datei darf nur ein einzelnes JSON-Objekt enthalten (kein Array). Das JSON-Objekt ist ein Name-Wert-Paar. Der Objektschlüssel (der Name im Name-Wert-Paar) muss "jsonpaths" sein. Der Wert im Name-Wert-Paar ist ein Array aus JSONPath-Ausdrücken. Jeder JSONPath-Ausdruck referenziert ein einzelnes Element in der JSON-Datenhierarchie oder im Avro-Schema, ähnlich wie ein XPath-Ausdruck Elemente in einem XML-Dokument referenziert. Weitere Informationen finden Sie unter JSONPath-Ausdrücke.
Um eine JSONPaths-Datei zu verwenden, fügen Sie dem Befehl COPY das Schlüsselwort JSON oder AVRO hinzu. Geben Sie den Namen des S3 Buckets und den Objektpfad der JSONPaths-Datei in folgendem Format an.
COPY tablename FROM 'data_source' CREDENTIALS 'credentials-args' FORMAT AS { AVRO | JSON } 's3://jsonpaths_file';
Der -Wert muss ein Amazon S3-Objektschlüssel sein, der explizit auf eine einzelne Datei verweist, z. B. s3://jsonpaths_file's3://amzn-s3-demo-bucket/jsonpaths.txt'. Es darf kein Schlüsselpräfix sein.
Bei Ladevorgängen aus Amazon S3 hat die von jsonpaths_file angegebene Datei in einigen Fällen dasselbe Präfix wie der von copy_from_s3_objectpath angegebene Pfad für die Datendateien. In diesem Fall liest COPY die JSONPaths-Datei als Datendatei und gibt Fehler zurück. Angenommen, Ihre Datendateien verwenden den Objektpfad s3://amzn-s3-demo-bucket/my_data.json und Ihre JSONPaths-Datei ist s3://amzn-s3-demo-bucket/my_data.jsonpaths. In diesem Fall versucht COPY, my_data.jsonpaths als Datendatei zu laden.
Wenn der Schlüsselname eine andere Zeichenfolge als "jsonpaths" ist, gibt der COPY-Befehl keinen Fehler zurück, sondern ignoriert jsonpaths_file und verwendet stattdessen das Argument 'auto'.
Wenn eine der folgenden Bedingungen zutrifft, schlägt der COPY-Befehl fehl:
-
Der JSON-Code ist schlecht geformt.
-
Es gibt mehr als ein JSON-Objekt.
-
Außerhalb des Objekts sind Zeichen (außer Leerzeichen) vorhanden.
-
Ein Array-Element ist eine leere Zeichenfolge oder keine Zeichenfolge.
MAXERROR gilt für die JSONPaths-Datei nicht.
Die JSONPaths-Datei darf nicht verschlüsselt sein, auch dann nicht, wenn die Option ENCRYPTED angegeben ist.
Weitere Informationen finden Sie unter COPY von JSON-Format.
JSONPath-Ausdrücke
Die JSONPaths-Datei verwendet JSONPaths-Ausdrücke, um Datenfelder zu Zielspalten zuzuweisen. Jeder JSONPath-Ausdruck entspricht einer einzelnen Spalte in der Amazon-Redshift-Zieltabelle. Die Reihenfolge der JSONPath-Array-Elemente muss der Reihenfolge der Spalten in der Zieltabelle oder Spaltenliste entsprechen, wenn eine Spaltenliste verwendet wird.
Doppelte Anführungszeichen sind sowohl für Feldnamen als auch für Werte erforderlich. Es muss sich um normale Anführungszeichen (0x22) handeln. Es dürfen keine schrägen oder „smarten“ Anführungszeichen sein.
Wenn ein Objektelement, das von einem JSONPath-Ausdruck referenziert wird, in den JSON-Daten nicht gefunden wird, versucht COPY, einen NULL-Wert zu laden. Wenn das referenzierte Objekt schlecht geformt ist, gibt COPY einen Ladefehler zurück.
Wenn ein Array-Element, das von einem JSONPath-Ausdruck referenziert wird, in den JSON- oder Avro-Daten nicht gefunden wird, schlägt COPY mit dem folgenden Fehler fehl: Invalid JSONPath format: Not
an array or index out of range. Entfernen Sie alle Array-Elemente aus dem JSONPaths-Ausdruck, die in den Quelldaten nicht vorhanden sind, und überprüfen Sie, ob die Arrays in den Quelldaten wohl geformt sind.
Die JSONPath-Ausdrücke können eine Klammer- oder eine Punktnotierung verwenden. Sie können die Notierungen jedoch nicht mischen. Im folgenden Beispiel werden JSONPath-Ausdrücke gezeigt, die eine Klammernotierung verwenden.
{ "jsonpaths": [ "$['venuename']", "$['venuecity']", "$['venuestate']", "$['venueseats']" ] }
Im folgenden Beispiel werden JSONPath-Ausdrücke gezeigt, die eine Punktnotierung verwenden.
{ "jsonpaths": [ "$.venuename", "$.venuecity", "$.venuestate", "$.venueseats" ] }
Im Kontext der COPY-Syntax von Amazon Redshift muss ein JSONPath-Ausdruck den expliziten Pfad zu einem einzelnen Namenselement in einer hierarchischen JSON- oder Avro-Datenstruktur angeben. Amazon Redshift unterstützt keine JSONPath-Elemente, wie z. B. Platzhalterzeichen oder Filterausdrücke, die zu einem mehrdeutigen Pfad oder mehreren Namenselementen führen könnten.
Weitere Informationen finden Sie unter COPY von JSON-Format.
Verwenden von JSONPaths mit Avro-Daten
Im folgenden Beispiel wird ein Avro-Schema mit mehreren Ebenen gezeigt.
{ "name": "person", "type": "record", "fields": [ {"name": "id", "type": "int"}, {"name": "guid", "type": "string"}, {"name": "isActive", "type": "boolean"}, {"name": "age", "type": "int"}, {"name": "name", "type": "string"}, {"name": "address", "type": "string"}, {"name": "latitude", "type": "double"}, {"name": "longitude", "type": "double"}, { "name": "tags", "type": { "type" : "array", "name" : "inner_tags", "items" : "string" } }, { "name": "friends", "type": { "type" : "array", "name" : "inner_friends", "items" : { "name" : "friends_record", "type" : "record", "fields" : [ {"name" : "id", "type" : "int"}, {"name" : "name", "type" : "string"} ] } } }, {"name": "randomArrayItem", "type": "string"} ] }
Im folgenden Beispiel wird eine JSONPaths-Datei gezeigt, die AvroPath-Ausdrücke verwendet, um das vorherige Schema zu referenzieren.
{ "jsonpaths": [ "$.id", "$.guid", "$.address", "$.friends[0].id" ] }
Das JSONPaths-Beispiel enthält die folgenden Elemente:
- jsonpaths
-
Der Name des JSON-Objekts, das die AvroPath-Ausdrücke enthält.
- [ … ]
-
Eckige Klammern schließen das JSON-Array ein, das die Pfadelemente enthält.
- $
-
Das Dollarzeichen bezieht sich auf das Stammelement im Avro-Schema, das das
"fields"-Array ist. - "$.id",
-
Das Ziel des AvroPath-Ausdrucks. In diesem Fall ist das Ziel das Element im
"fields"-Array mit dem Namen"id". Die Ausdrücke werden durch Kommas getrennt. - "$.friends[0].id"
-
Eckige Klammern zeigen einen Array-Index an. JSONPath-Ausdrücke verwenden eine nullbasierte Indizierung. Daher referenziert dieser Ausdruck das erste Element im
"friends"-Array mit dem Namen"id".
Die Avro-Schemasyntax erfordert die Verwendung von internen Feldern, um die Struktur der Datensatz- und Array-Datentypen zu definieren. Die internen Felder werden von den AvroPath-Ausdrücken ignoriert. Beispielsweise definiert das Feld "friends" ein Array namens "inner_friends", das wiederum einen Datensatz namens "friends_record" definiert. Der AvroPath-Ausdruck, der das Feld "id" referenziert, kann die zusätzlichen Felder ignorieren, um das Zielfeld direkt zu referenzieren. Die folgenden AvroPath-Ausdrücke referenzieren die beiden Felder, die zum "friends"-Array gehören.
"$.friends[0].id" "$.friends[0].name"
Spaltendatenformat-Parameter
Neben den Standarddatenformaten unterstützt COPY die folgenden spaltenbasierten Datenformate für COPY aus Amazon S3. COPY aus einem Spaltenformat wird mit bestimmten Einschränkungen unterstützt. Weitere Informationen finden Sie unter COPY aus spaltenbasierten Datenformaten.
- ORC
-
Lädt die Daten aus einer Datei im Optimized Row Columnar (ORC)-Format.
- PARQUET
-
Lädt die Daten aus einer Datei im Parquet-Format.