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 erwartet der COPY Befehl, dass es sich bei den Quelldaten um einen durch Zeichen getrennten Text (-8UTF) 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:
COPYUnterstützt zusätzlich zu den Standarddatenformaten die folgenden spaltenförmigen Datenformate für COPY Amazon S3:
COPYDas Format aus Spalten wird mit bestimmten Einschränkungen unterstützt. Weitere Informationen finden Sie unter COPYaus spaltenförmigen Datenformaten.
Datenformatparameter
- FORMAT[WIE]
-
(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, Zeilenumbrüche und Zeilenumbrüche automatisch zu maskieren, schließen Sie das Feld in das im Parameter angegebene Zeichen ein. QUOTE 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 (,). Mithilfe des Parameters können Sie ein anderes Trennzeichen angeben. DELIMITERWenn 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.
CSVkann nicht mitFIXEDWIDTH, REMOVEQUOTES oder verwendet werden. ESCAPE
- QUOTE[AS] 'quote_character'
-
Optional. Gibt das Zeichen an, das bei Verwendung des Parameters als Anführungszeichen verwendet werden soll. CSV Der Standardwert ist das doppelte Anführungszeichen ("). Wenn Sie den QUOTE Parameter verwenden, um ein anderes Anführungszeichen als ein doppeltes Anführungszeichen zu definieren, müssen Sie doppelte Anführungszeichen innerhalb des Felds nicht umgehen. Der QUOTE Parameter kann nur zusammen mit dem CSV Parameter verwendet werden. Das Schlüsselwort AS ist optional.
- DELIMITER[AS] ['delimiter_char']
-
Gibt das einzelne ASCII Zeichen an, das zur Trennung von Feldern in der Eingabedatei verwendet wird, z. B. ein senkrechter Strich (|), ein Komma (,) oder ein Tabulatorzeichen (\ t). ASCIIZeichen, die nicht gedruckt werden können, werden unterstützt. ASCIIZeichen können auch oktal dargestellt werden, wobei das Format '\ ddd' verwendet wird, wobei' d 'eine Oktalziffer (0—7) ist. Das Standardtrennzeichen ist ein senkrechter Strich (|), sofern der CSV Parameter nicht verwendet wird. In diesem Fall ist das Standardtrennzeichen ein Komma (,). Das Schlüsselwort AS ist optional. DELIMITERkann nicht mit verwendet werden. FIXEDWIDTH
- 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. FIXEDWIDTHkann nicht mit oder verwendet werden. CSV DELIMITER In Amazon Redshift werden die Länge von CHAR und VARCHAR Spalten in Byte ausgedrückt. Stellen Sie daher sicher, dass die von Ihnen angegebene Spaltenbreite der binären Länge von Multibyte-Zeichen entspricht, wenn Sie die Datei für das Laden vorbereiten. 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.Sie können es nicht SHAPEFILE mit FIXEDWIDTHREMOVEQUOTES, oder verwendenESCAPE.
Um
GEOGRAPHY
-Objekte mitCOPY FROM SHAPEFILE
zu 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.
- SIMPLIFYAUTO[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 für die folgenden Dienste und COPY Protokolle unterstützt:
-
Amazon S3
-
Amazon EMR
-
Remote-Hosts (SSH)
Avro wird COPY von DynamoDB aus 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
. COPYakzeptiert Avro-Dateien, die mit dem unkomprimierten Standardcodec sowie den Kompressionscodecs erstellt wurden.deflate
snappy
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'
.COPYordnet 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. COPYErkennt mit dem'auto'
Standardargument nur die erste Feldebene oder äußere Felder in der Struktur.Um den Avro-Feldnamen explizit Spaltennamen zuzuordnen, können Sie verwenden JSONPathsDatei.
COPYVersucht standardmäßig, alle Spalten in der Zieltabelle den Avro-Feldnamen zuzuordnen. Um einen Subsatz der Spalten zu laden, können Sie optional eine Spaltenliste angeben. Wenn eine Spalte in der Zieltabelle nicht in der Spaltenliste enthalten ist, wird der DEFAULT Ausdruck der Zielspalte COPY geladen. Wenn die Zielspalte keinen Standardwert hat, wird COPY versucht, sie zu ladenNULL. Wenn eine Spalte in der Spaltenliste enthalten ist und COPY kein passendes Feld in den Avro-Daten gefunden wird, wird COPY versucht, in die Spalte NULL zu laden.
Wenn COPY versucht wird, eine Spalte NULL zuzuweisen, die als definiert ist NOTNULL, schlägt der COPY Befehl fehl.
Avro-Schema
Eine Avro-Quelldatendatei enthält ein Schema, das die Struktur der Daten definiert. COPYliest das Schema, das Teil der Avro-Quelldatendatei ist, um Datenelemente den Spalten der Zieltabelle zuzuordnen. 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 mithilfe JSON des Formats definiert. Das JSON Objekt der obersten Ebene enthält drei Name-Wert-Paare mit den Namen oder Schlüsseln,, und
"name"
."type"
"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. Ordnet die Feldnamen standardmäßig COPY automatisch den Spaltennamen zu. 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 werden COPY die Spaltennamenid
,guid
name
, und zugeordnetaddress
.Ordnet mit dem
'auto'
COPY Standardargument nur die Objekte der ersten Ebene Spalten zu. Um tieferen Ebenen im Schema zuzuordnen oder wenn Feld- und Spaltennamen nicht übereinstimmen, verwenden Sie eine JSONPaths Datei, um die Zuordnung zu definieren. Weitere Informationen finden Sie unter JSONPathsDatei.Handelt es sich bei dem mit einem Schlüssel verknüpften Wert um einen komplexen Avro-Datentyp wie Byte, Array, Record, Map oder Link, COPY wird der Wert als Zeichenfolge geladen. In diesem Fall ist die Zeichenfolge die JSON Darstellung der Daten. COPYlädt Avro-Enum-Datentypen als Zeichenketten, wobei der Inhalt der Name des Typs ist. Ein Beispiel finden Sie unter COPYaus dem Format JSON.
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 Befehl fehl, auch wenn die resultierende Zeilengröße unter der Zeilengrößenbeschränkung von 4 MB liegt. COPY
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 sind im Format. JSON
JSONDas Format wird COPY von diesen Diensten und Protokollen unterstützt:
-
Amazon S3
-
COPYvon Amazon EMR
-
COPYvon SSH
JSONwird COPY von 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 zerkleinert die Attribute von JSON Strukturen beim Laden eines JSON Dokuments nicht in mehrere Spalten.COPYVersucht standardmäßig, alle Spalten in der Zieltabelle den JSON Feldnamenschlüsseln zuzuordnen. Um einen Subsatz der Spalten zu laden, können Sie optional eine Spaltenliste angeben. Wenn die JSON Feldnamenschlüssel nicht alle in Kleinbuchstaben geschrieben sind, können Sie die
'auto ignorecase'
Option oder a verwenden, JSONPathsDatei um Spaltennamen explizit JSON Feldnamenschlüsseln zuzuordnen.Wenn eine Spalte in der Zieltabelle nicht in der Spaltenliste enthalten ist, wird der DEFAULT Ausdruck der Zielspalte COPY geladen. Wenn die Zielspalte keinen Standardwert hat, wird COPY versucht, sie zu ladenNULL. Wenn eine Spalte in der Spaltenliste enthalten ist und COPY kein passendes Feld in den JSON Daten gefunden wird, wird COPY versucht, in die Spalte NULL zu laden.
Wenn COPY versucht wird, eine Spalte NULL zuzuweisen, die als definiert ist NOTNULL, schlägt der COPY Befehl fehl.
COPYordnet 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 Redshift-Tabellen werden immer in Kleinbuchstaben geschrieben. Wenn Sie
'auto'
diese Option verwenden, müssen übereinstimmende JSON Feldnamen also auch in Kleinbuchstaben geschrieben sein. - 'auto ignorecase'
-
Bei dieser Option wird nicht zwischen Groß- und Kleinschreibung unterschieden. Spaltennamen in Amazon Redshift Redshift-Tabellen werden immer in Kleinbuchstaben geschrieben. Wenn Sie
'auto ignorecase'
diese Option verwenden, können die entsprechenden JSON Feldnamen also in Kleinbuchstaben, Großbuchstaben oder in gemischter Schreibweise geschrieben werden. - 's3://jsonpaths_file'
-
Bei dieser Option wird die benannte JSONPaths Datei COPY verwendet, 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 unterJSONPathsDatei.In einigen Fällen hat die von
jsonpaths_file
angegebene Datei dasselbe Präfix wie der voncopy_from_s3_objectpath
angegebene Pfad für die Datendateien. Wenn ja, COPY liest die JSONPaths Datei als Datendatei und gibt Fehler zurück. Nehmen wir zum Beispiel an, dass Ihre Datendateien den Objektpfad verwendens3://amzn-s3-demo-bucket/my_data.json
und Ihre JSONPaths Datei bereitss3://amzn-s3-demo-bucket/my_data.jsonpaths
. In diesem Fall COPY versucht es,my_data.jsonpaths
als Datendatei zu laden. - 'noshred'
-
Mit dieser Option zerkleinert Amazon Redshift die Attribute von JSON Strukturen beim Laden eines JSON Dokuments nicht in mehrere Spalten.
-
JSONDatendatei
Die JSON Datendatei enthält eine Reihe von Objekten oder Arrays. COPYlädt jedes JSON Objekt oder Array in eine Zeile in der Zieltabelle. Jedes Objekt oder Array, das einer Zeile entspricht, muss eine eigenständige Struktur auf Stammebene sein, d. h. es darf kein Mitglied einer anderen Struktur sein. JSON
Ein JSON Objekt beginnt und endet mit geschweiften Klammern ({}) und enthält eine ungeordnete 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 Redshift-Tabellen werden immer in Kleinbuchstaben geschrieben, sodass übereinstimmende JSON Feldnamenschlüssel ebenfalls in Kleinbuchstaben geschrieben werden müssen. Wenn Ihre Spaltennamen und JSON Schlüssel nicht übereinstimmen, verwenden Sie a, JSONPathsDatei um Spalten explizit Schlüsseln zuzuordnen.
Die Reihenfolge in einem JSON Objekt spielt keine Rolle. Namen, die mit keiner Spalte übereinstimmen, werden ignoriert. Das Folgende zeigt die Struktur eines einfachen JSON Objekts.
{ "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, die durch Kommas getrennt sind. 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 veranschaulicht.
["value1", value2]
Das JSON muss wohlgeformt 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 Klammern oder 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 Befehl fehl, auch wenn die resultierende Zeilengröße unter der Zeilengrößenbeschränkung von 4 MB liegt. COPY
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.
COPYwird \n
als Zeilenumbruchzeichen und \t
als Tabulatorzeichen geladen. Um einen Backslash zu laden, muss ein Backslash als Escape-Zeichen verwendet werden ( \\
).
COPYdurchsucht die angegebene JSON Quelle nach einem wohlgeformten, gültigen JSON Objekt oder Array. Wenn vor COPY der Suche nach einer verwendbaren JSON Struktur oder zwischen gültigen JSON Objekten oder Arrays Zeichen gefunden werden, die keine Leerzeichen sind, wird für jede Instanz ein COPY Fehler zurückgegeben. Diese Fehler werden auf die Anzahl der Fehler angerechnet. MAXERROR COPYSchlägt fehl, wenn die Fehleranzahl gleich oder höher MAXERROR ist.
Für jeden Fehler zeichnet Amazon Redshift eine Zeile in der ERRORS Systemtabelle STL _ LOAD _ auf. In der NUMBER Spalte LINE _ wird die letzte Zeile des JSON Objekts aufgezeichnet, das den Fehler verursacht hat.
Wenn angegeben, IGNOREHEADER wird die angegebene Anzahl von Zeilen in den JSON Daten COPY ignoriert. Zeilenumbrüche in den JSON Daten werden bei Berechnungen immer mitgezählt. IGNOREHEADER
COPYlädt standardmäßig leere Zeichenketten als leere Felder. Wenn EMPTYASNULL angegeben, werden leere Zeichenketten für CHAR und VARCHAR Felder als COPY geladenNULL. Leere Zeichenketten für andere Datentypen, wie z. B.INT, werden immer mit geladenNULL.
Die folgenden Optionen werden nicht unterstützt mitJSON:
-
CSV
-
DELIMITER
-
ESCAPE
-
FILLRECORD
-
FIXEDWIDTH
-
IGNOREBLANKLINES
-
NULLALS
-
READRATIO
-
REMOVEQUOTES
Weitere Informationen finden Sie unter COPYaus dem Format JSON. Weitere Informationen zu JSON Datenstrukturen finden Sie auf www.json.org
JSONPathsDatei
Wenn Sie aus JSON -formatierten oder Avro-Quelldaten laden, COPY ordnet sie standardmäßig die Datenelemente 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 Spalten explizit JSON oder Avro-Datenelemente 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 Ausdrücken. JSONPath Jeder JSONPath Ausdruck verweist auf ein einzelnes Element in der JSON Datenhierarchie oder im Avro-Schema, ähnlich wie sich ein XPath Ausdruck auf Elemente in einem Dokument bezieht. XML Weitere Informationen finden Sie unter JSONPathAusdrücke.
Um eine JSONPaths Datei zu verwenden, fügen Sie dem COPY Befehl das AVRO Schlüsselwort JSON oder 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
-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. Wenn ja, COPY liest 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 COPY versucht es, my_data.jsonpaths
als Datendatei zu laden.
Wenn der Schlüsselname eine andere Zeichenfolge als ist"jsonpaths"
, gibt der COPY Befehl keinen Fehler zurück, ignoriert aber jsonpaths_file und verwendet stattdessen das Argument. 'auto'
Wenn einer der folgenden Fälle eintritt, schlägt der Befehl fehl: COPY
-
Der JSON ist falsch formatiert.
-
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.
MAXERRORgilt 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 COPYaus dem Format JSON.
JSONPathAusdrü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, wird COPY versucht, einen NULL Wert zu laden. Wenn das Objekt, auf das verwiesen wird, falsch formatiert ist, wird ein Ladefehler COPY zurückgegeben.
Wenn ein Array-Element, auf das durch einen JSONPath Ausdruck verwiesen wird, in den JSON oder Avro-Daten nicht gefunden wird, COPY schlägt dies mit dem folgenden Fehler fehl: Invalid JSONPath format: Not
an array or index out of range.
Entfernen Sie alle Array-Elemente aus demJSONPaths, 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 Redshift-Syntax muss ein JSONPath Ausdruck den expliziten Pfad zu einem einzelnen Namenselement in einer JSON oder Avro-hierarchischen 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 COPYaus dem Format JSON.
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.
- [ … ]
-
Das JSON Array, das die Pfadelemente enthält, wird in Klammern eingeschlossen.
- $
-
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. JSONPathAusdrü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
COPYUnterstützt zusätzlich zu den Standarddatenformaten die folgenden spaltenförmigen Datenformate für COPY Amazon S3. COPYDas Format aus Spalten wird mit bestimmten Einschränkungen unterstützt. Weitere Informationen finden Sie unter COPYaus spaltenförmigen Datenformaten.
- ORC
-
Lädt die Daten aus einer Datei, die das Dateiformat Optimized Row Columnar (ORC) verwendet.
- PARQUET
-
Lädt die Daten aus einer Datei im Parquet-Format.