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à.
È possibile che alcuni dei dati di origine che contengono stringhe codificate JSON non debbano essere necessariamente deserializzate in una tabella Athena. In tal caso, è comunque possibile eseguire operazioni SQL su questi dati utilizzando le funzioni JSON disponibili in Presto.
Considera questa stringa JSON 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 proprietà name
e projects
dalla stringa JSON, utilizza la funzione json_extract
, come nell'esempio seguente. La funzione json_extract
analizza la colonna contenente la stringa JSON e vi esegue la ricerca impiegando un'espressione LIKE JSONPath
con la notazione del punto .
.
Nota
JSONPath
esegue un attraversamento semplice della struttura. utilizzando il simbolo $
per indicare la radice del documento JSON, seguita da un punto e da un elemento nidificato direttamente sotto il livello 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 con codifica JSON 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 stringa JSON, utilizza la funzione json_extract_scalar(
. È simile ajson
,
json_path
)json_extract
, ma restituisce un valore di varchar
stringa anziché una stringa con codifica JSON. Il valore del json_path
parametro deve essere uno scalare (un valore booleano, un numero o una stringa).
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
Restituirà il valore nella posizione indice specificata nella matrice codificata JSON.
+---------------------------------------+
| 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 |
+--------------+