from_json függvény

A következőkre vonatkozik:jelölje be az igennel jelölt jelölőnégyzetet Databricks SQL jelölje be az igennel jelölt jelölőnégyzetet Databricks Runtime

Egy szerkezetértéket ad vissza a jsonStr és schema elemekkel.

Szintaxis

from_json(jsonStr, schema [, options])

Argumentumok

  • jsonStr: JSON-dokumentumot STRING meghatározó kifejezés.
  • schema: STRING kifejezés vagy schema_of_json függvény meghívása.
  • options: Egy nem kötelező MAP<STRING,STRING> konstans, amely irányelveket határoz meg.

jsonStr jól formázottnak kell lennie a schema és a options tekintetében.

Az schema oszlopokat vesszővel tagolt oszlopnevekként és adattípuspárként kell definiálni, hasonlóan a használt CREATE TABLEformátumhoz. A Databricks Runtime 12.2 előtt a schema literál kell, hogy legyen.

Azt is megteheti from_json , hogy a Lakeflow-folyamatokkal automatikusan kikövetkezeli és továbbfejleszti a sémát a NULL értékre állítással schema és egy schemaLocationKey. Példákat lásd: A séma from_json következtetése és továbbfejlesztése adatfolyamokban.

Megjegyzés

A schema oszlop- és mezőnevei érzékenyek a kis- és nagybetűkre, és pontosan meg kell egyezniük a jsonStr neveivel. Ha olyan JSON-mezőket szeretne megfeleltetni, amelyek csak abban az esetben különböznek, az eredményként kapott szerkezetet különböző mezőnevekre állíthatja. További részletekért lásd a példákat .

A lehetőségek teljes listáját a JSON-ban találja.

options, ha elérhető, lehet bármelyik az alábbiak közül:

  • primitivesAsString (alapértelmezett false): az összes primitív értéket sztringtípusként következteti.
  • prefersDecimal (alapértelmezett false): az összes lebegőpontos értéket decimális típusként jelöli. Ha az értékek nem felelnek meg a decimális értékeknek, akkor azokat dupla értékként jelöli meg.
  • allowComments (alapértelmezett false): figyelmen kívül hagyja Java és C++ stílusú megjegyzéseket a JSON-rekordokban.
  • allowUnquotedFieldNames (alapértelmezett false): engedélyezi a nem kvótált JSON-mezőneveket.
  • allowSingleQuotes (alapértelmezett true): lehetővé teszi az egyszeri idézőjeleket a dupla idézőjelek mellett.
  • allowNumericLeadingZeros (alapértelmezett false): lehetővé teszi a számok kezdő nulláit (például 00012).
  • allowBackslashEscapingAnyCharacter (alapértelmezett false): lehetővé teszi az összes karakter idézetének elfogadását fordított perjeles idéző mechanizmus használatával.
  • allowUnquotedControlChars (alapértelmezett false): lehetővé teszi, hogy a JSON-sztringek idézőjelek nélküli vezérlőkaraktereket (32-nél kisebb értékű ASCII-karaktereket, beleértve a tabulátor- és soremelés karaktereket) tartalmazzanak, vagy sem.
  • mode (alapértelmezett PERMISSIVE): lehetővé teszi a sérült rekordok elemzés közbeni kezelését.
    • PERMISSIVE: ha egy sérült rekordnak felel meg, a hibásan formázott sztringet egy , által columnNameOfCorruptRecordkonfigurált mezőbe helyezi, és null értékre állítja a hibásan formázott mezőket. A sérült rekordok megőrzéséhez beállíthat egy columnNameOfCorruptRecord nevű sztring típusú mezőt egy felhasználó által definiált sémában. Ha egy séma nem rendelkezik a mezővel, az elemzés során a sérült rekordokat elveti. Séma következtetése esetén implicit módon hozzáad egy columnNameOfCorruptRecord mezőt egy kimeneti sémához.
    • FAILFAST: kivételt eredményez, ha sérült rekordoknak felel meg.
  • columnNameOfCorruptRecord (az alapértelmezett érték az spark.sql.columnNameOfCorruptRecord): lehetővé teszi az PERMISSIVE mód által létrehozott hibás sztringet tartalmazó új mező átnevezését. Ez felülírja a spark.sql.columnNameOfCorruptRecord.
  • dateFormat (alapértelmezett yyyy-MM-dd): beállítja a dátumformátumot jelző sztringet. Az egyéni dátumformátumok a Datetime-minták formátumait követik. Ez a dátumtípusra vonatkozik.
  • timestampFormat (alapértelmezett yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]): beállítja az időbélyeg formátumát jelző sztringet. Az egyéni dátumformátumok a Datetime-minták formátumait követik. Ez az időbélyeg típusára vonatkozik.
  • multiLine (alapértelmezett false): fájlonként egy rekordot elemez, amely több sorra is kiterjedhet.
  • encoding (alapértelmezés szerint nincs beállítva): lehetővé teszi a JSON-fájlok egyik szabványos alapszintű vagy kiterjesztett kódolásának kényszerített beállítását. Például UTF-16BE, UTF-32LE. Ha a kódolás nincs megadva, és multiLinetruevan beállítva, a rendszer automatikusan észleli.
  • lineSep (alapértelmezés szerint az összesre \rvonatkozik, \r\n és \n): az elemzéshez használandó sorelválasztót határozza meg.
  • samplingRatio (alapértelmezett 1.0): a sémakövetközéshez használt bemeneti JSON-objektumok töredékét határozza meg.
  • dropFieldIfAllNull (alapértelmezett false): figyelmen kívül hagyja-e az összes null értékű oszlopot, vagy üres tömböt/szerkezetet a sémakövetkeztetés során.
  • locale (alapértelmezés szerint en-US): sets területi beállítás nyelvi címkeként az IETF BCP 47 formátumban. Ez például a dátumok és időbélyegek elemzésekor használatos.
  • allowNonNumericNumbers (alapértelmezett true): lehetővé teszi, hogy a JSON-elemző a nem szám (NaN) tokeneket érvényes lebegőpontos számértékekként felismerje.
    • +INF a pozitív végtelent, valamint +Infinity és Infinity aliasát jelenti.
    • (c0) negatív végtelen), alias (c1).
    • NaN más nem szám jellegű értékek esetében, mint például a nullával való osztás eredménye.
  • readerCaseSensitive (alapértelmezett true): a kis- és nagybetű érzékenységet határozza meg, ha rescuedDataColumn engedélyezve van. Ha ez igaz, mentse azokat az adatoszlopokat, amelyek neve csak a kis- és nagybetűk tekintetében tér el a sémától; ellenkező esetben olvassa be az adatokat a kis- és nagybetűk érzékenysége nélkül. A Databricks SQL-ben és a Databricks Runtime 13.3 LTS-ben és újabb verziókban érhető el.

Visszatérítések

A sémadefiníciónak megfelelő mezőneveket és típusokat tartalmazó szerkezet.

Ha a mode beállítás értéke FAILFAST, Azure Databricks MALFORMED_RECORD_IN_PARSING, ha a bemenet nem felel meg a sémának.

Gyakori hibafeltételek

Példák

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

> SELECT from_json('invalid', 'a INT', map('mode', 'FAILFAST'));
  Error: MALFORMED_RECORD_IN_PARSING