Extrahieren Sie JSON Daten aus Zeichenketten - Amazon Athena

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 Zeichenketten

Möglicherweise haben Sie Quelldaten, die JSON -kodierte Zeichenketten enthalten, die Sie nicht unbedingt in eine Tabelle in Athena deserialisieren möchten. In diesem Fall können Sie weiterhin SQL Operationen mit diesen Daten ausführen, indem Sie die in Presto verfügbaren Funktionen verwenden. JSON

Betrachten Sie diese JSON Zeichenfolge als Beispieldatensatz.

{"name": "Susan Smith", "org": "engineering", "projects": [ {"name":"project1", "completed":false}, {"name":"project2", "completed":true} ] }

Beispiele: Eigenschaften extrahieren

Verwenden Sie die json_extract Funktion wie im folgenden Beispiel, um die projects Eigenschaften name und aus der JSON Zeichenfolge zu extrahieren. Die json_extract Funktion verwendet die Spalte, die die JSON Zeichenfolge enthält, und durchsucht sie mit einem JSONPath ähnlichen Ausdruck in . Punktnotation.

Anmerkung

JSONPath führt einen einfachen Strukturdurchlauf aus. Sie verwendet das $ Zeichen, um den Stamm des JSON Dokuments zu kennzeichnen, gefolgt von einem Punkt und einem direkt unter dem Stamm geschachtelten Element, z. B. $.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 systemeigener Athena-Datentyp.

+-----------------------------------------------------------------------------------------------+ | name | projects | +-----------------------------------------------------------------------------------------------+ | "Susan Smith" | [{"name":"project1","completed":false},{"name":"project2","completed":true}] | +-----------------------------------------------------------------------------------------------+

Verwenden Sie die Funktion, um den Skalarwert aus der JSON Zeichenfolge zu extrahieren. json_extract_scalar Sie ist json_extract ähnlich, gibt jedoch nur skalare Werte (boolesche Werte, Zahlen oder Zeichenfolgen) zurück.

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

Sie gibt den Wert an der angegebenen Indexposition im JSON -codierten Array zurück.

+---------------------------------------+ | 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 Zugriff auf Array-Elemente.

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 | +--------------+