Condividi tramite


Funzione from_json

Si applica a: segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime

Restituisce un valore struct con jsonStr e schema.

Sintassi

from_json(jsonStr, schema [, options])

Argomenti

  • jsonStrSTRING: espressione che specifica un documento JSON.
  • schemaSTRING: espressione o chiamata di schema_of_json funzione.
  • options: valore letterale facoltativo MAP<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 predefinita false): deduce tutti i valori primitivi come tipo stringa.
  • prefersDecimal (impostazione predefinita false): deduce tutti i valori a virgola mobile come tipo decimale. Se i valori non rientrano nel separatore decimale, li deduce come double.
  • allowComments (impostazione predefinita false): ignora il commento di stile Java e C++ nei record JSON.
  • allowUnquotedFieldNames (impostazione predefinita false): consente nomi di campo JSON senza virgo chiave.
  • allowSingleQuotes (impostazione predefinita true): consente virgolette singole oltre alle virgolette doppie.
  • allowNumericLeadingZeros (impostazione predefinita false): consente zeri iniziali in numeri (ad esempio, 00012).
  • allowBackslashEscapingAnyCharacter (impostazione predefinita false): consente l'accettazione di virgolette di tutti i caratteri usando il meccanismo di virgolette rovesciata.
  • allowUnquotedControlChars (impostazione predefinita false): 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 predefinita PERMISSIVE): 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 da columnNameOfCorruptRecorde imposta i campi in formato non valido su Null. Per mantenere i record danneggiati, è possibile impostare un campo di tipo stringa denominato columnNameOfCorruptRecord 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 un columnNameOfCorruptRecord campo in uno schema di output.
    • FAILFAST: genera un'eccezione quando soddisfa i record danneggiati.
  • columnNameOfCorruptRecord (il valore predefinito è il valore specificato in spark.sql.columnNameOfCorruptRecord): consente di rinominare il nuovo campo con una stringa in formato non valido creata dalla PERMISSIVE modalità . In questo modo viene eseguito l'override di spark.sql.columnNameOfCorruptRecord.
  • dateFormat (impostazione predefinita yyyy-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 predefinita yyyy-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 predefinita false): 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 e multiLine è impostata su true, viene rilevata automaticamente.
  • lineSep (il valore predefinito riguarda tutti gli \roggetti 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 predefinita false): 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 predefinita true): 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 e Infinity.
    • -INF per infinito negativo), alias -Infinity.
    • NaN per altri numeri non numerici, ad esempio il risultato della divisione per zero.
  • readerCaseSensitive (impostazione predefinita true): specifica il comportamento di distinzione tra maiuscole e minuscole quando rescuedDataColumn è 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}