Datenformatparameter - 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.

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" word eingefü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 zur Trennung von Feldern in der Eingabedatei verwendet werden, z. B. ein senkrechtes Zeichen (|), ein Komma (,), ein Tabulatorzeichen (\t) oder mehrere Zeichen wie. |~| Nicht druckbare Zeichen werden unterstützt. Zeichen können auch in Oktal als ihre UTF-8-Codeeinheiten dargestellt werden. Verwenden Sie für Oktalzahlen das Format '\ ddd', wobei' d 'eine Oktalziffer (0—7) ist. Das Standardtrennzeichen ist ein senkrechter Strich (|), es sei denn, der CSV-Parameter wird verwendet. In diesem Fall ist das Standardtrennzeichen ein 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- oder IDENTITY-Spalte. Alle nachfolgenden Spalten folgen der im Shapefile angegebenen Reihenfolge.

SHAPEFILE kann nicht mit FIXEDWIDTH, REMOVEQUOTES oder ESCAPE verwendet werden.

Um GEOGRAPHY-Objekte mit COPY FROM SHAPEFILE zu verwenden, erfassen Sie zuerst in eine GEOMETRY-Spalte und wandeln dann die Objekte in GEOGRAPHY-Objekte um.

SIMPLIFY [Toleranz]

(Optional) Vereinfacht alle Geometrien während des Aufnahmeprozesses mithilfe des Algorithmus und der angegebenen Toleranz. Ramer-Douglas-Peucker

SIMPLIFY AUTO [Toleranz]

(Optional) Vereinfacht nur Geometrien, die größer als die maximale Geometriegröße sind. Bei dieser Vereinfachung werden der Ramer-Douglas-Peucker Algorithmus und die automatisch berechnete Toleranz verwendet, sofern 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-Codecs deflate und snappy erstellt 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 Spaltennamen id, guid, name und address aus.

Bei Verwendung des Standardarguments 'auto' gleicht COPY nur Objekte auf der ersten Ebene mit Spalten ab. Verwenden Sie eine Datei, um die Zuordnung zu tieferen Ebenen im Schema vorzunehmen oder wenn Feld- und Spaltennamen nicht übereinstimmen, definieren Sie die Zuordnung mithilfe einer JSONPaths Datei. 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'

Bei dieser Option verwendet COPY die benannte JSONPaths Datei, um die Datenelemente in den JSON-Quelldaten den Spalten in der Zieltabelle zuzuordnen. 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 Hinweise zur Verwendung einer JSONPaths Datei finden Sie unterJSONPaths Datei.

In einigen Fällen hat die von jsonpaths_file angegebene Datei dasselbe Präfix wie der von copy_from_s3_objectpath angegebene Pfad für die Datendateien. Falls ja, liest COPY die JSONPaths Datei als Datendatei und gibt Fehler zurück. Nehmen wir zum Beispiel an, dass Ihre Datendateien den Objektpfad verwenden s3://amzn-s3-demo-bucket/my_data.json und Ihre JSONPaths Datei bereitss3://amzn-s3-demo-bucket/my_data.jsonpaths. In diesem Fall versucht COPY, my_data.jsonpaths als 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 den Spalten zuzuordnen. 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 um sie tieferen Ebenen in der Datenhierarchie zuzuordnen, können Sie eine JSONPaths Datei verwenden, um JSON- oder Avro-Datenelemente explizit Spalten zuzuordnen. Die JSONPaths Datei ordnet JSON-Datenelemente Spalten zu, indem sie die Spaltenreihenfolge in der Zieltabelle oder Spaltenliste anpasst.

Die JSONPaths Datei darf nur ein einzelnes JSON-Objekt (kein Array) enthalten. 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 von JSONPath Ausdrücken. Jeder JSONPath Ausdruck verweist auf ein einzelnes Element in der JSON-Datenhierarchie oder im Avro-Schema, ähnlich wie ein XPath Ausdruck auf Elemente in einem XML-Dokument verweist. 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 S3-Bucket-Namen und den Objektpfad der JSONPaths Datei im folgenden Format an.

COPY tablename FROM 'data_source' CREDENTIALS 'credentials-args' FORMAT AS { AVRO | JSON } 's3://jsonpaths_file';

Der s3://jsonpaths_file-Wert muss ein Amazon S3-Objektschlüssel sein, der explizit auf eine einzelne Datei verweist, z. B. '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. Falls ja, liest COPY die JSONPaths Datei als Datendatei und gibt Fehler zurück. Nehmen wir zum Beispiel an, dass Ihre Datendateien den Objektpfad verwenden s3://amzn-s3-demo-bucket/my_data.json und Ihre JSONPaths Datei bereitss3://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 nicht für die JSONPaths Datei.

Die JSONPaths Datei darf nicht verschlüsselt sein, auch wenn die ENCRYPTED Option angegeben ist.

Weitere Informationen finden Sie unter COPY von JSON-Format.

JSONPath Ausdrücke

Die JSONPaths Datei verwendet JSONPath Ausdrücke, um Datenfelder Zielspalten zuzuordnen. Jeder JSONPath Ausdruck entspricht einer Spalte in der Amazon Redshift Redshift-Zieltabelle. Die Reihenfolge der JSONPath Array-Elemente muss mit der Reihenfolge der Spalten in der Zieltabelle oder der Spaltenliste übereinstimmen, 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, auf das ein JSONPath Ausdruck verweist, 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, auf das von einem JSONPath Ausdruck verwiesen 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 , die in den Quelldaten nicht vorhanden sind, und überprüfen Sie, ob die Arrays in den Quelldaten korrekt geformt sind. 

Die JSONPath Ausdrücke können entweder die Klammernotation oder die Punktnotation verwenden, aber Sie können Notationen nicht mischen. Das folgende Beispiel zeigt JSONPath Ausdrücke, die die Klammernotation verwenden.

{ "jsonpaths": [ "$['venuename']", "$['venuecity']", "$['venuestate']", "$['venueseats']" ] }

Das folgende Beispiel zeigt JSONPath Ausdrücke in Punktnotation.

{ "jsonpaths": [ "$.venuename", "$.venuecity", "$.venuestate", "$.venueseats" ] }

Im Kontext der Amazon Redshift COPY-Syntax 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 Platzhalterzeichen oder Filterausdrücke, die zu einem mehrdeutigen Pfad oder mehreren Namenselementen aufgelöst werden könnten.

Weitere Informationen finden Sie unter COPY von JSON-Format.

Verwendung JSONPaths mit Avro Data

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"} ] }

Das folgende Beispiel zeigt eine JSONPaths Datei, die AvroPath Ausdrücke verwendet, um auf das vorherige Schema zu verweisen.

{ "jsonpaths": [ "$.id", "$.guid", "$.address", "$.friends[0].id" ] }

Das JSONPaths Beispiel umfasst 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"

Klammern geben einen Array-Index an. JSONPath Ausdrücke verwenden eine nullbasierte Indizierung, sodass dieser Ausdruck auf das erste Element im "friends" Array mit dem Namen verweist. "id"

Die Avro-Schemasyntax erfordert die Verwendung von internen Feldern, um die Struktur der Datensatz- und Array-Datentypen zu definieren. Die inneren Felder werden von den Ausdrücken ignoriert. AvroPath Beispielsweise definiert das Feld "friends" ein Array namens "inner_friends", das wiederum einen Datensatz namens "friends_record" definiert. Der AvroPath Ausdruck, der auf das Feld verweist, "id" kann die zusätzlichen Felder ignorieren, um direkt auf das Zielfeld zu verweisen. Die folgenden AvroPath Ausdrücke verweisen auf 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.