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.
Extrahieren Sie JSON-Daten aus Zeichenfolgen
Möglicherweise verfügen Sie über Quelldaten mit JSON-kodierten Zeichenfolgen, die Sie nicht in eine Tabelle in Athena deserialisieren möchten. In diesem Fall können Sie mit den JSON-Funktionen in Presto dennoch SQL-Operationen für diese Daten ausführen.
Betrachten Sie diese JSON-Zeichenfolge als Beispiel-Dataset.
{"name": "Susan Smith",
"org": "engineering",
"projects":
[
{"name":"project1", "completed":false},
{"name":"project2", "completed":true}
]
}
Beispiele: Extrahieren von Eigenschaften
Um die Eigenschaften name und projects aus der JSON-Zeichenfolge zu extrahieren, verwenden Sie die Funktion json_extract wie im folgenden Beispiel. Die Funktion json_extract übernimmt die Spalte mit der JSON-Zeichenfolge und durchsucht sie mit einem JSONPath-artigen Ausdruck in der Punkt-.-Notation.
Anmerkung
JSONPath führt einen einfachen Strukturdurchlauf aus. Dabei wird das Stammverzeichnis des JSON-Dokuments mit $ bezeichnet, gefolgt von einem Punkt und einem direkt unterhalb des Stammverzeichnisses verschachtelten Elements wie $.name.
WITH dataset AS ( SELECT '{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false}, {"name":"project2", "completed":true}]}' AS myblob ) SELECT json_extract(myblob, '$.name') AS name, json_extract(myblob, '$.projects') AS projects FROM dataset
Der zurückgegebene Wert ist eine JSON-kodierte Zeichenfolge und kein nativer Athena-Datentyp.
+-----------------------------------------------------------------------------------------------+
| name | projects |
+-----------------------------------------------------------------------------------------------+
| "Susan Smith" | [{"name":"project1","completed":false},{"name":"project2","completed":true}] |
+-----------------------------------------------------------------------------------------------+
Verwenden Sie zum Extrahieren von skalaren Werten aus der JSON-Zeichenfolge die Funktion json_extract_scalar(. Es ist ähnlich wie json,
json_path)json_extract, gibt aber einen varchar-Zeichenfolgenwert anstelle einer JSON-kodierten Zeichenfolge zurück. Der Wert für den Parameter json_path muss ein Skalar sein (ein boolescher Wert, eine Zahl oder eine Zeichenfolge).
Anmerkung
Verwenden Sie die Funktion json_extract_scalar nicht für Arrays, Zuordnungen oder Strukturen.
WITH dataset AS ( SELECT '{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS myblob ) SELECT json_extract_scalar(myblob, '$.name') AS name, json_extract_scalar(myblob, '$.projects') AS projects FROM dataset
Diese Abfrage gibt Folgendes zurück:
+---------------------------+
| name | projects |
+---------------------------+
| Susan Smith | |
+---------------------------+
Um das erste Element der Eigenschaft projects in dem Beispiel-Array abzurufen, verwenden Sie die Funktion json_array_get und geben Sie die Indexposition an.
WITH dataset AS ( SELECT '{"name": "Bob Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS myblob ) SELECT json_array_get(json_extract(myblob, '$.projects'), 0) AS item FROM dataset
Es wird der Wert an der angegebenen Indexposition in dem JSON-kodierten Array zurückgegeben.
+---------------------------------------+
| item |
+---------------------------------------+
| {"name":"project1","completed":false} |
+---------------------------------------+
Um einen Athena-Zeichenfolgetyp zurückzugeben, verwenden Sie den []-Operator in einem JSONPath-Ausdruck und verwenden Sie anschließend die Funktion json_extract_scalar. Mehr über [] erfahren Sie unter Auf Array-Elemente zugreifen.
WITH dataset AS ( SELECT '{"name": "Bob Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS myblob ) SELECT json_extract_scalar(myblob, '$.projects[0].name') AS project_name FROM dataset
Sie erhalten das folgende Ergebnis:
+--------------+
| project_name |
+--------------+
| project1 |
+--------------+