COPYaus dem Format JSON - 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.

COPYaus dem Format JSON

Die JSON Datenstruktur besteht aus einer Reihe von Objekten oder Arrays. Ein JSON Objekt beginnt und endet mit geschweiften Klammern und enthält eine ungeordnete Sammlung von Name-Wert-Paaren. Jeder Name und jeder Wert werden durch einen Doppelpunkt getrennt und die Paare werden durch Kommas getrennt. Der Name ist eine Zeichenfolge in doppelten Anführungszeichen. Bei den Anführungszeichen muss es sich um normale Anführungszeichen (0x22) handeln. Es dürfen keine schrägen oder „smarte“ doppelte Anführungszeichen sein.

Ein JSON Array beginnt und endet mit Klammern und enthält eine geordnete Sammlung von Werten, die durch Kommas getrennt sind. Ein Wert kann eine Zeichenfolge in doppelten Anführungszeichen, eine Zahl, ein boolescher Wert vom Typ Wahr oder Falsch, Null, ein JSON Objekt oder ein Array sein.

JSONObjekte und Arrays können verschachtelt werden, wodurch eine hierarchische Datenstruktur ermöglicht wird. Das folgende Beispiel zeigt eine JSON Datenstruktur mit zwei gültigen Objekten.

{ "id": 1006410, "title": "Amazon Redshift Database Developer Guide" } { "id": 100540, "name": "Amazon Simple Storage Service User Guide" }

Das Folgende zeigt dieselben Daten wie zwei JSON Arrays.

[ 1006410, "Amazon Redshift Database Developer Guide" ] [ 100540, "Amazon Simple Storage Service User Guide" ]

COPYOptionen für JSON

Bei der Verwendung COPY mit JSON Formatdaten können Sie die folgenden Optionen angeben:

  • 'auto' — Lädt COPY automatisch Felder aus der JSON Datei.

  • 'auto ignorecase'— lädt COPY automatisch Felder aus der JSON Datei und ignoriert dabei die Groß- und Kleinschreibung von Feldnamen.

  • s3://jsonpaths_file— COPY verwendet eine JSONPaths Datei, um die JSON Quelldaten zu analysieren. Eine JSONPathsDatei ist eine Textdatei, die ein einzelnes JSON Objekt enthält, dessen Name mit einer Reihe von JSONPath Ausdrücken "jsonpaths" gepaart ist. Wenn der Name eine andere Zeichenfolge als ist"jsonpaths", COPY verwendet das 'auto' Argument anstelle der JSONPaths Datei.

Beispiele, die zeigen, wie Daten mithilfe von'auto', 'auto ignorecase' oder einer JSONPaths Datei geladen werden, wobei entweder JSON Objekte oder Arrays verwendet werden, finden Sie unterAus JSON Beispielen kopieren.

JSONPathOption

In der Amazon Redshift COPY Redshift-Syntax gibt ein JSONPath Ausdruck den expliziten Pfad zu einem einzelnen Namenselement in einer JSON hierarchischen Datenstruktur an, wobei entweder Klammern oder Punkte verwendet werden. 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. Daher kann Amazon Redshift keine komplexen Datenstrukturen mit mehreren Ebenen analysieren.

Im Folgenden finden Sie ein Beispiel für eine JSONPaths Datei mit JSONPath Ausdrücken, die die Klammernotation verwenden. Das Dollarzeichen ($) stellt die Stammebenenstruktur dar.

{ "jsonpaths": [ "$['id']", "$['store']['book']['title']", "$['location'][0]" ] }

Im vorherigen Beispiel referenziert $['location'][0] das erste Element in einem Array. JSONverwendet eine nullbasierte Array-Indizierung. Bei Array-Indizes muss es sich um positive Ganzzahlen handeln (größer als oder gleich null).

Das folgende Beispiel zeigt die vorherige JSONPaths Datei in Punktnotation.

{ "jsonpaths": [ "$.id", "$.store.book.title", "$.location[0]" ] }

Sie können Klammer- und Punktnotierung im jsonpaths-Array nicht mischen. Eckige Klammern können sowohl in der Klammer- als auch in der Punktnotierung verwendet werden, um ein Array-Element zu referenzieren.

Bei Verwendung der Punktnotation dürfen die JSONPath Ausdrücke die folgenden Zeichen nicht enthalten:

  • Einfache gerade Anführungszeichen (')

  • Punkt (.)

  • Eckige Klammern ([]), es sei denn, sie werden verwendet, um ein Array-Element zu referenzieren

Wenn es sich bei dem Wert in dem Name-Wert-Paar, auf das ein JSONPath Ausdruck verweist, um ein Objekt oder ein Array handelt, wird das gesamte Objekt oder die Matrix als Zeichenfolge geladen, einschließlich der geschweiften Klammern. Nehmen wir beispielsweise an, dass Ihre JSON Daten das folgende Objekt enthalten.

{ "id": 0, "guid": "84512477-fa49-456b-b407-581d0d851c3c", "isActive": true, "tags": [ "nisi", "culpa", "ad", "amet", "voluptate", "reprehenderit", "veniam" ], "friends": [ { "id": 0, "name": "Martha Rivera" }, { "id": 1, "name": "Renaldo" } ] }

Der JSONPath Ausdruck gibt $['tags'] dann den folgenden Wert zurück.

"["nisi","culpa","ad","amet","voluptate","reprehenderit","veniam"]"

Der JSONPath Ausdruck gibt $['friends'][1] dann den folgenden Wert zurück.

"{"id": 1,"name": "Renaldo"}"

Jeder JSONPath Ausdruck im jsonpaths Array entspricht einer Spalte in der Amazon Redshift Redshift-Zieltabelle. Die Reihenfolge der jsonpaths-Array-Elemente muss der Reihenfolge der Spalten in der Zieltabelle oder Spaltenliste entsprechen, wenn eine Spaltenliste verwendet wird.

Beispiele, die zeigen, wie Daten entweder mithilfe des 'auto' Arguments oder einer JSONPaths Datei geladen werden, und zwar entweder mithilfe von JSON Objekten oder Arrays, finden Sie unter. Aus JSON Beispielen kopieren

Informationen zum Kopieren mehrerer JSON Dateien finden Sie unterVerwenden eines Manifests für die Angabe von Datendateien.

Escape-Zeichen in JSON

COPYwird \n als Zeilenumbruchzeichen und \t als Tabulatorzeichen geladen. Um einen Backslash zu laden, muss ein Backslash als Escape-Zeichen verwendet werden ( \\ ).

Nehmen wir zum Beispiel an, Sie haben Folgendes JSON in einer Datei mit dem Namen escape.json im Buckets3://amzn-s3-demo-bucket/json/.

{ "backslash": "This is a backslash: \\", "newline": "This sentence\n is on two lines.", "tab": "This sentence \t contains a tab." }

Führen Sie die folgenden Befehle aus, um die ESCAPES Tabelle zu erstellen und zu ladenJSON.

create table escapes (backslash varchar(25), newline varchar(35), tab varchar(35)); copy escapes from 's3://amzn-s3-demo-bucket/json/escape.json' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' format as json 'auto';

Fragen Sie die ESCAPES Tabelle ab, um die Ergebnisse anzuzeigen.

select * from escapes; backslash | newline | tab ------------------------+-------------------+---------------------------------- This is a backslash: \ | This sentence | This sentence contains a tab. : is on two lines. (1 row)

Verlust der numerischen Präzision

Sie verlieren möglicherweise an Genauigkeit, wenn Sie Zahlen aus Datendateien im JSON Format in eine Spalte laden, die als numerischer Datentyp definiert ist. Einige Gleitpunktwerte werden in Rechnersystemen nicht genau dargestellt. Daher werden Daten, die Sie aus einer JSON Datei kopieren, möglicherweise nicht erwartungsgemäß gerundet. Um einen Verlust der Präzision zu vermeiden, raten wir zur Verwendung einer der folgenden Alternativen:

  • Stellen Sie die Zahl als eile Zeichenfolge dar, deren Wert in doppelte Anführungszeichen gesetzt wird.

  • Verwenden Sie diese ROUNDECOption, um die Zahl zu runden, anstatt sie zu kürzen.

  • Verwenden Sie anstelle von Avro-Dateien durch Zeichen getrennte Textdateien JSON oder CSV Textdateien mit fester Breite.