Serialisierung komplexer, verschachtelter 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.

Serialisierung komplexer, verschachtelter JSON

In diesem Thema wird gezeigt, wie verschachtelte Daten im Format serialisiert werden. JSON Verschachtelte Daten sind Daten, die verschachtelte Felder enthalten. Verschachtelte Felder sind Felder, die zu einer Einheit zusammengefügt sind, z. B. Arrays, Strukturen oder Objekte.

Eine Alternative zu den in diesem Tutorial vorgestellten Methoden besteht darin, verschachtelte Sammlungsspalten der obersten Ebene als serialisiert abzufragen. JSON Sie können die Serialisierung verwenden, um verschachtelte Daten wie JSON bei Redshift Spectrum zu untersuchen, zu konvertieren und aufzunehmen. Diese Methode wird für die FormateORC,JSON, Ion und Parquet unterstützt. Verwenden Sie den Sitzungskonfigurationsparameter json_serialization_enable, um das Serialisierungsverhalten zu konfigurieren. Wenn diese Option gesetzt ist, werden komplexe JSON Datentypen nach VARCHAR (65535) serialisiert. Auf die verschachtelten Dateien JSON kann mit zugegriffen werden. JSONFunktionen Weitere Informationen finden Sie unter json_serialization_enable.

Beispiel: Ohne die Einstellung von json_serialization_enable schlagen die folgenden Abfragen, die auf verschachtelte Spalten direkt zugreifen, fehl.

SELECT * FROM spectrum.customers LIMIT 1; => ERROR: Nested tables do not support '*' in the SELECT clause. SELECT name FROM spectrum.customers LIMIT 1; => ERROR: column "name" does not exist in customers

Das Einstellen von json_serialization_enable ermöglicht das direkte Abfragen von Sammlungen der obersten Ebene.

SET json_serialization_enable TO true; SELECT * FROM spectrum.customers order by id LIMIT 1; id | name | phones | orders ---+--------------------------------------+----------------+---------------------------------------------------------------------------------------------------------------------- 1 | {"given": "John", "family": "Smith"} | ["123-457789"] | [{"shipdate": "2018-03-01T11:59:59.000Z", "price": 100.50}, {"shipdate": "2018-03-01T09:10:00.000Z", "price": 99.12}] SELECT name FROM spectrum.customers order by id LIMIT 1; name --------- {"given": "John", "family": "Smith"}

Beachten Sie bei der Serialisierung von Nested die folgenden Punkte. JSON

  • Wenn Sammlungsspalten als VARCHAR (65535) serialisiert werden, kann im Rahmen der Abfragesyntax nicht direkt auf ihre verschachtelten Unterfelder zugegriffen werden (z. B. in der Filterklausel). JSONFunktionen können jedoch für den Zugriff auf verschachtelte Elemente verwendet werden. JSON

  • Die folgenden spezialisierten Darstellungen werden nicht unterstützt:

    • ORCGewerkschaften

    • ORCKarten mit komplexen Typschlüsseln

    • Ion-Datagramme

    • Ion SEXP

  • Zeitstempel werden als ISO serialisierte Zeichenketten zurückgegeben.

  • Primitive Zuordnungsschlüssel werden zu einer Zeichenfolge heraufgestuft (z. B. 1 zu "1").

  • Nullwerte der obersten Ebene werden als serialisiert. NULLs

  • Wenn die Serialisierung die maximale VARCHAR Größe von 65535 überschreitet, wird die Zelle auf gesetzt. NULL

Serialisierung komplexer Typen, die Zeichenketten enthalten JSON

Standardmäßig werden Zeichenkettenwerte, die in verschachtelten Sammlungen enthalten sind, als Escape-Zeichenfolgen serialisiert. JSON Escape-Zeichen können unerwünscht sein, wenn die Zeichenketten gültig sind. JSON Stattdessen möchten Sie vielleicht verschachtelte Unterelemente oder Felder schreiben, die direkt als. VARCHAR JSON Aktivieren Sie dieses Verhalten mit der Konfiguration json_serialization_parse_nested_strings auf Sitzungsebene. Wenn json_serialization_enable sowohl als auch gesetzt json_serialization_parse_nested_strings sind, werden gültige JSON Werte inline ohne Escape-Zeichen serialisiert. Wenn der Wert nicht gültig istJSON, wird er maskiert, als ob der json_serialization_parse_nested_strings Konfigurationswert nicht festgelegt wäre. Weitere Informationen finden Sie unter json_serialization_parse_nested_strings.

Nehmen wir zum Beispiel an, dass die Daten aus dem vorherigen Beispiel JSON als structs komplexer Typ im Feld name VARCHAR (20) enthalten sind:

name --------- {"given": "{\"first\":\"John\",\"middle\":\"James\"}", "family": "Smith"}

Wenn json_serialization_parse_nested_strings eingestellt ist, wird die Spalte name wie folgt serialisiert:

SET json_serialization_enable TO true; SET json_serialization_parse_nested_strings TO true; SELECT name FROM spectrum.customers order by id LIMIT 1; name --------- {"given": {"first":"John","middle":"James"}, "family": "Smith"}

Anstatt wie folgt escaped zu werden:

SET json_serialization_enable TO true; SELECT name FROM spectrum.customers order by id LIMIT 1; name --------- {"given": "{\"first\":\"John\",\"middle\":\"James\"}", "family": "Smith"}