Sdílet prostřednictvím


from_json Funkce

Platí pro:označeno jako ano Databricks SQL označeno jako ano Databricks Runtime

Vrátí hodnotu struktury s hodnotou jsonStr a schema.

Syntaxe

from_json(jsonStr, schema [, options])

Argumenty

  • jsonStr: Výraz STRING určující dokument JSON.
  • schema: STRING Výraz nebo vyvolání funkce schema_of_json.
  • options: Volitelný MAP<STRING,STRING> literál určující direktivy.

jsonStr by měla být dobře vytvořená s ohledem na schema a options.

Musí schema být definován jako názvy sloupců oddělených čárkami a páry datových typů, podobně jako formát použitý v CREATE TABLE. Před Databricks Runtime 12.2 schema musí být literál.

Alternativně můžete s Lakeflow Spark deklarativními kanály automaticky odvodit a vyvinout schéma pomocí from_json nastavením schema na hodnotu NULL a určením schemaLocationKey. Příklady najdete v tématu Odvození a vývoj schématu pomocí from_json kanálů.

Poznámka:

Názvy sloupců a polí v schema rozlišují malá a velká písmena a musí přesně odpovídat názvům v jsonStr. Pokud chcete mapovat pole JSON, která se liší pouze v případě, můžete výslednou strukturu přetypovat na odlišné názvy polí. Další podrobnosti najdete v příkladech .

options, pokud je uvedeno, může být čímkoliv z následujících:

  • primitivesAsString (výchozí false): odvodí všechny primitivní hodnoty jako typ řetězce.
  • prefersDecimal (výchozí false): interpretuje všechny hodnoty s pohyblivou řádovou čárkou jako desetinný typ. Pokud se hodnoty nevejdou do desetinných míst, odvodí je jako dvojité.
  • allowComments (výchozí false): ignoruje komentář stylu Java a C++ v záznamech JSON.
  • allowUnquotedFieldNames (výchozí false): Povoluje názvy polí JSON bez citování.
  • allowSingleQuotes (výchozí true): Umožňuje jednoduché uvozovky kromě dvojitých uvozovek.
  • allowNumericLeadingZeros (výchozí false): umožňuje počáteční nuly v číslech (například 00012).
  • allowBackslashEscapingAnyCharacter (výchozí false): umožňuje přijmout uvozování všech znaků pomocí mechanismu uvozování zpětného lomítka.
  • allowUnquotedControlChars (výchozí false): Umožňuje řetězcům JSON obsahovat necitované řídicí znaky (ZNAKY ASCII s hodnotou menší než 32, včetně znaků tabulátoru a odřádkování) nebo ne.
  • mode (výchozí PERMISSIVE): Umožňuje režim pro práci s poškozenými záznamy během analýzy.
    • PERMISSIVE: Když narazí na poškozený záznam, umístí poškozený řetězec do pole nakonfigurovaného pomocí columnNameOfCorruptRecord a nastaví poškozená pole na hodnotu null. Chcete-li zachovat poškozené záznamy, můžete nastavit pole typu řetězce s názvem columnNameOfCorruptRecord ve schématu definovaném uživatelem. Pokud schéma pole neobsahuje, během analýzy zahodí poškozené záznamy. Při odvození schématu implicitně přidá do výstupního schématu pole columnNameOfCorruptRecord.
    • FAILFAST: vyvolá výjimku, když narazí na poškozené záznamy.
  • columnNameOfCorruptRecord (výchozí hodnota je hodnota zadaná v spark.sql.columnNameOfCorruptRecord): umožňuje přejmenování nového pole s poškozeným řetězcem vytvořeným v režimu PERMISSIVE. Toto přebíjí spark.sql.columnNameOfCorruptRecord.
  • dateFormat (výchozí yyyy-MM-dd): nastaví řetězec, který označuje formát data. Vlastní formáty data se řídí formáty v Datetime patterns. To platí pro typ data.
  • timestampFormat (výchozí yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]): určuje řetězec, který označuje formát časového razítka. Vlastní formáty data se řídí formáty v Datetime patterns. To platí pro typ časového razítka.
  • multiLine (výchozí false): parsuje jeden záznam, který může zahrnovat více řádků na soubor.
  • encoding (ve výchozím nastavení není nastaveno): umožňuje vynuceně nastavit jedno ze standardních základních nebo rozšířených kódování pro soubory JSON. Například UTF-16BE, UTF-32LE. Pokud není zadáno kódování a multiLine je nastavena na true, zjistí se automaticky.
  • lineSep(výchozí hodnota pokrývá vše \r\r\n a \n): definuje oddělovač řádků, který se má použít k analýze.
  • samplingRatio (výchozí 1.0): definuje zlomek vstupních objektů JSON používaných pro odvození schématu.
  • dropFieldIfAllNull (výchozí false): zda se má při odvozování schématu ignorovat sloupec všech hodnot null nebo prázdné pole nebo struktury.
  • locale (výchozí hodnota je en-US): sets národní prostředí jako značka jazyka ve formátu IETF BCP 47. Používá se například při analýze kalendářních dat a časových razítek.
  • allowNonNumericNumbers (výchozí true): Umožňuje analyzátoru JSON rozpoznat sadu tokenů bez čísla (NaN) jako platné číselné hodnoty:
    • +INF pro kladné nekonečno, stejně jako aliasy +Infinity a Infinity.
    • -INF pro záporné nekonečno), alias -Infinity.
    • NaN pro jiná nečísaná čísla, například výsledek dělení nulou.
  • readerCaseSensitive (výchozí true): Určuje chování citlivosti případu, pokud rescuedDataColumn je povoleno. Pokud ano, zachrání sloupce dat, jejichž názvy se liší pouze velikostí písmen od schématu, jinak se data čtou bez rozlišování velikosti písmen. K dispozici v Databricks SQL a Databricks Runtime 13.3 LTS a novějších.

Návraty

Struktura s názvy polí a typy odpovídající definici schématu.

Příklady

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