Estrarre JSON dati dalle stringhe - Amazon Athena

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Estrarre JSON dati dalle stringhe

Potresti avere dati di origine JSON contenenti stringhe con codifica che non vuoi necessariamente deserializzare in una tabella in Athena. In questo caso, puoi comunque eseguire SQL operazioni su questi dati utilizzando le funzioni disponibili in Presto. JSON

Considerate questa JSON stringa come un set di dati di esempio.

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

Esempi: proprietà di estrazione

Per estrarre le projects proprietà name and dalla JSON stringa, utilizzate la json_extract funzione come nell'esempio seguente. La json_extract funzione prende la colonna contenente la JSON stringa e la cerca utilizzando un'espressione JSONPath simile a -like con notazione a punti..

Nota

JSONPath esegue un attraversamento semplice della struttura. Utilizza il $ segno per indicare la radice del JSON documento, seguito da un punto e da un elemento annidato direttamente sotto la radice, ad esempio. $.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

Il valore restituito è una stringa JSON con codifica e non un tipo di dati Athena nativo.

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

Per estrarre il valore scalare dalla JSON stringa, usa la funzione. json_extract_scalar Quest'ultima è simile a json_extract, ma restituisce solo valori scalari (booleani, numeri o stringhe).

Nota

Non utilizzare la funzione json_extract_scalar su matrici, mappe o strutture.

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

Questa query restituisce:

+---------------------------+ | name | projects | +---------------------------+ | Susan Smith | | +---------------------------+

Per ottenere il primo elemento della proprietà projects nella matrice di esempio, utilizza la funzione json_array_get e specifica la posizione indice.

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

Restituisce il valore nella posizione di indice specificata nell'array JSON -encoded.

+---------------------------------------+ | item | +---------------------------------------+ | {"name":"project1","completed":false} | +---------------------------------------+

Per restituire un tipo di stringa Athena, utilizza l'operatore [] all'interno di un'espressione JSONPath, quindi utilizza la funzione json_extract_scalar. Per ulteriori informazioni su [], consulta Accedi agli elementi dell'array.

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

Tale operazione restituisce questo risultato:

+--------------+ | project_name | +--------------+ | project1 | +--------------+