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