适用于:
Databricks SQL
Databricks Runtime 14.1 及更高版本
重要
此功能目前以公共预览版提供。
返回从xmlStr使用schema解析出的结构体或变体值。
语法
from_xml(xmlStr, schema [, options])
参数
-
xmlStr:一个STRING表达式,用于指定单个 XML 记录 -
schema:STRING表达式或对schema_of_xml函数的调用。 -
options:指定指令的可选MAP<STRING,STRING>文本。
返回
具有与架构定义匹配的字段名称和类型的STRUCT,如果架构是单个VARIANT类型,则为Variant值。
xmlStr 在 schema 和 options 方面的格式应正确。 如果无法分析xmlStr,会返回NULL。
schema 必须定义为逗号分隔的列名称和数据类型对(例如如同在 CREATE TABLE 中使用一样)。 在 Databricks Runtime 16.4 及更高版本中, schema 也可以定义为单个 VARIANT 类型。
如果提供,options 可以是下列任何内容:
-
excludeAttribute(默认false):是否排除元素中的属性。 -
mode(默认值为PERMISSIVE):允许采用在分析期间处理损坏记录的模式。-
PERMISSIVE:遇到损坏的记录时,将格式错误的字符串放入由columnNameOfCorruptRecord配置的字段中,并将格式错误的字段设置为 null。 若要保留损坏的记录,可以在用户定义的架构中设置名为columnNameOfCorruptRecord的字符串类型字段。 如果架构没有该字段,则会在分析期间删除损坏的记录。 推理架构时,它会在输出架构中隐式添加columnNameOfCorruptRecord字段。 -
FAILFAST:遇到损坏的记录时引发异常。
-
-
columnNameOfCorruptRecord(默认值为spark.sql.columnNameOfCorruptRecord中指定的值):允许重命名通过PERMISSIVE模式创建的包含格式错误字符串的新字段。 这会替代spark.sql.columnNameOfCorruptRecord。 -
inferSchema(默认为true):如果为true,则尝试为生成的每个属性推断一个相应的类型,例如布尔、数字或日期类型。 如果为false,则生成的所有列均为字符串类型。 -
prefersDecimal(默认值为false):将所有浮点值推断为十进制类型。 如果这些值不适合十进制,那么它会将这些值推断为双精度值。 -
attributePrefix(默认_):属性的前缀,用于区分属性和元素。 这将是字段名称的前缀。 可以为空字符串。 -
valueTag(默认值为_VALUE):该标记用于同时具有属性元素或子元素的元素中的人物数据。 -
encoding(默认值为 UTF-8):按照指定编码类型对 XML 文件进行解码。 -
ignoreSurroundingSpaces(默认值为true):定义是否应跳过正在读取的值周围的空格。 -
rowValidationXSDPath:XSD 文件的路径,用于单独验证每行的 XML。 未能通过验证的行视为上述解析错误。 XSD 不会以其他方式影响提供或推理的架构。 -
ignoreNamespace(默认false):如果为true,则忽略 XML 元素和属性上的命名空间前缀。 例如,标记<abc:author>和<def:author>会被视为只是<author>。 请注意,不能忽略rowTag元素上的命名空间,只忽略其子元素。 请注意,即使为 false,XML 分析通常也无法识别命名空间。 -
timestampFormat(默认值为yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]):设置指示时间戳格式的字符串。 自定义日期格式遵循日期/时间模式中的格式。 这适用于时间戳类型。 -
timestampNTZFormat(默认值为yyyy-MM-dd'T'HH:mm:ss[.SSS]):设置指示不带时区的时间戳格式的字符串。 自定义日期格式遵循日期/时间模式中的格式。 这适用于 TimestampNTZType 类型。 -
dateFormat(默认值为yyyy-MM-dd):设置指示日期格式的字符串。 自定义日期格式遵循日期/时间模式中的格式。 这适用于日期类型。 -
locale(默认值为en-US):将区域设置设定为 IETF BCP 47 格式中的语言标记。 例如,在分析日期和时间戳时使用。 -
nullValue(默认值为null):设置 null 值的字符串表示形式。
示例
> 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}]}
> SELECT from_xml('<p><a>1</a><b>0.8</b></p>', 'VARIANT');
{"p":{"a":1,"b":0.8}}