Funkce from_xml
Platí pro: Databricks SQL Databricks Runtime 14.1 a vyšší
Důležité
Tato funkce je ve verzi Public Preview.
Vrátí hodnotu struktury parsovanou z xmlStr
metody using schema
.
Syntaxe
from_xml(xmlStr, schema [, options])
Argumenty
xmlStr
STRING
: Výraz určující jeden záznam XMLschema
STRING
: Výraz nebo vyvolání schema_of_xml funkce.options
: VolitelnýMAP<STRING,STRING>
literál určující direktivy.
Návraty
A STRUCT
s názvy polí a typy odpovídající definici schématu.
xmlStr
by měla být dobře vytvořená s ohledem na schema
a options
. Pokud xmlStr
nelze analyzovat NULL
, je vrácena.
schema
musí být definován jako názvy sloupců oddělených čárkami a páry datových typů, jak se používá například CREATE TABLE
.
options
, pokud je uvedeno, může být některá z těchto možností:
excludeAttribute
(výchozífalse
): Zda se mají vyloučit atributy v prvcích.mode
(výchozíPERMISSIVE
): Umožňuje režim pro práci s poškozenými záznamy během analýzy.PERMISSIVE
: Když splňuje poškozený záznam, umístí poškozený řetězec do pole nakonfigurovanéhocolumnNameOfCorruptRecord
pomocí a nastaví poškozená pole na hodnotu null. Chcete-li zachovat poškozené záznamy, můžete nastavit pole typu řetězce pojmenované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ácolumnNameOfCorruptRecord
pole ve výstupním schématu.FAILFAST
: vyvolá výjimku, když splňuje poškozené záznamy.
columnNameOfCorruptRecord
(výchozí hodnota je hodnota zadaná vspark.sql.columnNameOfCorruptRecord
): Umožňuje přejmenování nového pole s poškozeným řetězcem vytvořeným režimemPERMISSIVE
. Toto přepsáníspark.sql.columnNameOfCorruptRecord
.inferSchema
(výchozítrue
): pokudtrue
se pokusí odvodit odpovídající typ pro každý výsledný atribut, například logický, číselný nebo datový typ. Pokudfalse
jsou všechny výsledné sloupce typu řetězce.prefersDecimal
(výchozífalse
): Odvodí všechny hodnoty s plovoucí desetinnou čárkou jako desetinný typ. Pokud se hodnoty nevejdou do desetinných míst, odvodí je jako dvojité.attributePrefix
(výchozí_
): Předpona atributů k rozlišení atributů od prvků. Toto bude předpona pro názvy polí. Může to být prázdný řetězec.valueTag
(výchozí_VALUE
): Značka použitá pro data znaků v elementech, které mají také atributy nebo podřízené elementy.encoding
(výchozí UTF-8): dekóduje soubory XML zadaným typem kódování.ignoreSurroundingSpaces
(výchozítrue
): Definuje, zda mají být vynechány okolní prázdné znaky z hodnot, které se čtou.rowValidationXSDPath
: Cesta k souboru XSD, který slouží k ověření XML pro každý řádek jednotlivě. Řádky, které se nepodaří ověřit, se považují za parsované chyby jako výše. XSD jinak nemá vliv na zadané schéma ani na odvození.ignoreNamespace
(výchozífalse
): Pokudtrue
jsou předpony oborů názvů u elementů a atributů XML ignorovány. Značky<abc:author>
a<def:author>
byly by například považovány za to, že oba jsou jen<author>
. Všimněte si, že obory názvů nelze u elementurowTag
ignorovat, pouze jeho podřízené položky. Mějte na paměti, že analýza XML obecně nerozšimuje obor názvů, i když je false.timestampFormat
(výchozíyyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
): nastaví řetězec, který označuje formát časového razítka. Vlastní formáty kalendářních dat se řídí formáty v vzorech datetime. To platí pro typ časového razítka.timestampNTZFormat
(výchozíyyyy-MM-dd'T'HH:mm:ss[.SSS]
): nastaví řetězec, který označuje časové razítko bez formátu časového pásma. Vlastní formáty kalendářních dat se řídí formáty v vzorech datetime. To platí pro typ TimestampNTZType.dateFormat
(výchozíyyyy-MM-dd
): nastaví řetězec, který označuje formát data. Vlastní formáty kalendářních dat se řídí formáty v vzorech datetime. To platí pro typ data.locale
(výchozí hodnota jeen-US
): Nastaví národní prostředí jako značku 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.nullValue
(výchozí hodnota jenull
): Nastaví řetězcovou reprezentaci hodnoty null.
Příklady
> SELECT from_xml('<p><a>1</a><b>0.8</b></p>', 'a INT, b DOUBLE');
{"a":1,"b":0.8}
> SELECT from_xml('<p><time>26/08/2015</time></p>', 'time Timestamp', map('timestampFormat', 'dd/MM/yyyy'));
{ "time": "2015-08-26T00:00:00.000+0000"}
> SELECT from_xml('<p><teacher>Alice</teacher><student><name>Bob</name><rank>1</rank></student><student><name>Charlie</name><rank>2</rank></student></p>',
'STRUCT<teacher: STRING, student: ARRAY<STRUCT<name: STRING, rank: INT>>>');
{"teacher":"Alice","student":[{"name":"Bob","rank":1},{"name":"Charlie","rank":2}]}