Funzione from_json
Si applica a: Databricks SQL Databricks Runtime
Restituisce un valore struct con jsonStr
e schema
.
Sintassi
from_json(jsonStr, schema [, options])
Argomenti
jsonStr
STRING
: espressione che specifica un documento JSON.schema
STRING
: espressione o chiamata di schema_of_json funzione.options
: valore letterale facoltativoMAP<STRING,STRING>
che specifica le direttive.
jsonStr
deve essere ben formato rispetto a schema
e options
.
schema
deve essere definito come nomi di colonna delimitati da virgole e coppie di tipi di dati, in modo simile al formato usato in CREATE TABLE
.
Prima di Databricks Runtime 12.2 schema
deve essere un valore letterale.
Nota
I nomi di colonna e di campo in schema
fanno distinzione tra maiuscole e minuscole e devono corrispondere esattamente ai nomi jsonStr
.
Per eseguire il mapping dei campi JSON che differiscono solo nel caso, è possibile eseguire il cast dello struct risultante in nomi di campo distinti.
Per altri dettagli, vedere Esempi .
options
, se specificato, può essere uno dei seguenti:
primitivesAsString
(impostazione predefinitafalse
): deduce tutti i valori primitivi come tipo stringa.prefersDecimal
(impostazione predefinitafalse
): deduce tutti i valori a virgola mobile come tipo decimale. Se i valori non rientrano nel separatore decimale, li deduce come double.allowComments
(impostazione predefinitafalse
): ignora il commento di stile Java e C++ nei record JSON.allowUnquotedFieldNames
(impostazione predefinitafalse
): consente nomi di campo JSON senza virgo chiave.allowSingleQuotes
(impostazione predefinitatrue
): consente virgolette singole oltre alle virgolette doppie.allowNumericLeadingZeros
(impostazione predefinitafalse
): consente zeri iniziali in numeri (ad esempio,00012
).allowBackslashEscapingAnyCharacter
(impostazione predefinitafalse
): consente l'accettazione di virgolette di tutti i caratteri usando il meccanismo di virgolette rovesciata.allowUnquotedControlChars
(impostazione predefinitafalse
): consente alle stringhe JSON di contenere caratteri di controllo non racchiusi tra virgolette (caratteri ASCII con valore minore di 32, inclusi caratteri di tabulazioni e avanzamento riga) o meno.mode
(impostazione predefinitaPERMISSIVE
): consente una modalità per gestire i record danneggiati durante l'analisi.PERMISSIVE
: quando soddisfa un record danneggiato, inserisce la stringa in formato non valido in un campo configurato dacolumnNameOfCorruptRecord
e imposta i campi in formato non valido su Null. Per mantenere i record danneggiati, è possibile impostare un campo di tipo stringa denominatocolumnNameOfCorruptRecord
in uno schema definito dall'utente. Se uno schema non dispone del campo, elimina i record danneggiati durante l'analisi. Quando si deduce uno schema, aggiunge in modo implicito uncolumnNameOfCorruptRecord
campo in uno schema di output.FAILFAST
: genera un'eccezione quando soddisfa i record danneggiati.
columnNameOfCorruptRecord
(il valore predefinito è il valore specificato inspark.sql.columnNameOfCorruptRecord
): consente di rinominare il nuovo campo con una stringa in formato non valido creata dallaPERMISSIVE
modalità . In questo modo viene eseguito l'override dispark.sql.columnNameOfCorruptRecord
.dateFormat
(impostazione predefinitayyyy-MM-dd
): imposta la stringa che indica un formato di data. I formati di data personalizzati seguono i formati in base ai modelli Datetime. Questo vale per il tipo di dati.timestampFormat
(impostazione predefinitayyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
): imposta la stringa che indica un formato timestamp. I formati di data personalizzati seguono i formati in base ai modelli Datetime. Questo vale per il tipo di timestamp.multiLine
(impostazione predefinitafalse
): analizza un record, che può estendersi su più righe, per ogni file.encoding
(per impostazione predefinita non è impostata): consente di impostare forzatamente una codifica standard di base o estesa per i file JSON. Ad esempio UTF-16BE, UTF-32LE. Se la codifica non è specificata emultiLine
è impostata sutrue
, viene rilevata automaticamente.lineSep
(il valore predefinito riguarda tutti gli\r
oggetti e\r\n
\n
): definisce il separatore di riga da usare per l'analisi.samplingRatio
(impostazione predefinita 1.0): definisce la frazione di oggetti JSON di input usati per l'inferenza dello schema.dropFieldIfAllNull
(impostazione predefinitafalse
): se ignorare la colonna di tutti i valori Null o una matrice/struct vuota durante l'inferenza dello schema.locale
(il valore predefinito èen-US
):sets
impostazioni locali come tag di lingua in formato IETF BCP 47. Ad esempio, questo viene usato durante l'analisi di date e timestamp.allowNonNumericNumbers
(impostazione predefinitatrue
): consente al parser JSON di riconoscere il set di token non numerici (NaN
) come valori numerici mobili legali:+INF
per l'infinito positivo, nonché l'alias di+Infinity
eInfinity
.-INF
per infinito negativo), alias-Infinity
.NaN
per altri numeri non numerici, ad esempio il risultato della divisione per zero.
readerCaseSensitive
(impostazione predefinitatrue
): specifica il comportamento di distinzione tra maiuscole e minuscole quandorescuedDataColumn
è abilitato. Se true, salvare le colonne di dati i cui nomi differiscono per maiuscole e minuscole rispetto allo schema; in caso contrario, leggere i dati senza distinzione tra maiuscole e minuscole. Disponibile in Databricks SQL e Databricks Runtime 13.3 LTS e versioni successive.
Valori restituiti
Struct con nomi di campo e tipi corrispondenti alla definizione dello schema.
Esempi
> SELECT from_json('{"a":1, "b":0.8}', 'a INT, b DOUBLE');
{"a":1,"b":0.8}
-- The column name must to match the case of the JSON field
> SELECT from_json('{"a":1}', 'A INT');
{"A":null}
> SELECT from_json('{"datetime":"26/08/2015"}', 'datetime Timestamp', map('timestampFormat', 'dd/MM/yyyy'));
{"datetime":2015-08-26 00:00:00}
-- Disambiguate field names with different cases
> SELECT cast(from_json('{"a":1, "A":0.8}', 'a INT, A DOUBLE') AS STRUCT<a: INT, b: DOUBLE>);
{"a":1, "b":0.8}