Função from_xml
Aplica-se a: SQL do Databricks
Databricks Runtime 14.1 e superior
Importante
Esse recurso está em uma versão prévia.
Retorna um valor de struct analisado de xmlStr
usando schema
.
Sintaxe
from_xml(xmlStr, schema [, options])
Argumentos
xmlStr
: Uma expressãoSTRING
especificando um único registro XMLschema
: uma expressãoSTRING
ou invocação da função schema_of_xml.options
: umaMAP<STRING,STRING>
literal opcional especificando diretivas.
Retorna
Um STRUCT
com nomes de campo e tipos que correspondem à definição de esquema.
xmlStr
deve ser bem formado com relação a schema
e options
. Se xmlStr
não puder ser analisado NULL
será retornado.
schema
precisa ser definido como pares de tipo de dados e nome de coluna separados por vírgula, como usado, por exemplo, em CREATE TABLE
.
options
, se fornecido, pode ser um dos seguintes:
excludeAttribute
(false
padrão): se deve excluir atributos em elementos.mode
(padrãoPERMISSIVE
): permite um modo para lidar com registros corrompidos durante a análise.PERMISSIVE
: quando ele encontra um registro corrompido, coloca a cadeia de caracteres malformada em um campo configurado porcolumnNameOfCorruptRecord
e define os campos malformados como nulos. Para manter os registros corrompidos, você pode definir um campo de tipo de cadeia de caracteres chamadocolumnNameOfCorruptRecord
em um esquema definido pelo usuário. Se o esquema não tiver o campo, ele removerá os registros corrompidos durante a análise. Ao inferir um esquema, ele adiciona implicitamente um campocolumnNameOfCorruptRecord
a um esquema de saída.FAILFAST
: gera uma exceção quando encontra registros corrompidos.
columnNameOfCorruptRecord
(o padrão é o valor especificado emspark.sql.columnNameOfCorruptRecord
): permite renomear o novo campo que tem uma cadeia de caracteres malformada criada pelo modoPERMISSIVE
. Isso substituispark.sql.columnNameOfCorruptRecord
.inferSchema
(padrãotrue
): setrue
, tenta inferir um tipo apropriado para cada atributo resultante, como um tipo booleano, numérico ou de data. Se forfalse
, todas as colunas resultantes serão do tipo de cadeia de caracteres.prefersDecimal
(padrãofalse
): infere todos os valores de ponto flutuante como um tipo decimal. Se os valores não couberem em decimal, ele vai inferi-los como duplos.attributePrefix
(_
padrão): o prefixo para atributos diferenciarem atributos de elementos. Esse será o prefixo para nomes de campo. Pode ser uma cadeia de caracteres vazia.valueTag
(padrão_VALUE
): A tag usada para os dados do caractere em elementos que também possuem atributos ou elementos filhos.encoding
(padrão UTF-8): decodifica os arquivos XML pelo tipo de codificação especificado.ignoreSurroundingSpaces
(true
padrão): define se os espaços em branco ao redor dos valores que estão sendo lidos devem ser ignorados.rowValidationXSDPath
: caminho para um arquivo XSD usado para validar o XML para cada linha individualmente. As linhas que não são validadas são tratadas como erros de análise, conforme mostrado acima. O XSD não afeta de outra forma o esquema fornecido ou inferido.ignoreNamespace
(padrãofalse
): setrue
, os prefixos de namespaces em elementos e atributos XML serão ignorados. As marcas<abc:author>
e<def:author>
, por exemplo, seriam tratadas como se ambas fossem apenas<author>
. Observe que os namespaces não podem ser ignorados no elementorowTag
, apenas seus filhos. Observe que, em geral, a análise de XML não reconhece namespace, mesmo que falsa.timestampFormat
(padrãoyyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
): define a cadeia de caracteres que indica um formato de carimbo de data/hora. Os formatos de data personalizados seguem os formatos dos padrões de datetime. Isso se aplica ao tipo de carimbo de data/hora.timestampNTZFormat
(padrãoyyyy-MM-dd'T'HH:mm:ss[.SSS]
): define a cadeia de caracteres que indica um carimbo de data/hora sem formato de fuso horário. Os formatos de data personalizados seguem os formatos dos padrões de datetime. Isso se aplica ao tipo TimestampNTZType.dateFormat
(padrãoyyyy-MM-dd
): define a cadeia de caracteres que indica um formato de data. Os formatos de data personalizados seguem os formatos dos padrões de datetime. Isso se aplica ao tipo de data.locale
(o padrão éen-US
): define um código de idioma como tag de idioma no formato IETF BCP 47. Por exemplo, isso é usado durante a análise de datas e de carimbos de data/hora.nullValue
(o padrão énull
): Define a representação de cadeia de caracteres de um valor nulo.
Exemplos
> 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}]}